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

        Add a new unavailablePluginButtonClicked callback that takes a WKDictionary of plug-in information
        https://bugs.webkit.org/show_bug.cgi?id=110821

        Reviewed by Beth Dakin.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetPluginInformationPluginspageAttributeURLKey):
        (WKPageGetPluginInformationPluginURLKey):
        Add two new API key getters.
        
        * UIProcess/API/C/WKPage.h:
        Add a new callback and deprecate the old callback.
        
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::WebLoaderClient::didFailToInitializePlugin):
        (WebKit::WebLoaderClient::didBlockInsecurePluginVersion):
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        Make the pluginInformationDictionary a static member function of WebPageProxy so it
        can be called from WebUIClient as well.
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath):
        Pass the bundle version as well.

        (WebKit::WebPageProxy::pluginInformationPluginspageAttributeURLKey):
        (WebKit::WebPageProxy::pluginInformationPluginURLKey):
        Add two new keys.

        (WebKit::WebPageProxy::pluginInformationDictionary):
        Handle more keys.

        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        Get the plug-in bundle identifier and version.

        * UIProcess/WebPageProxy.messages.in:
        Pass along more information; the frame and page URLs.

        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::unavailablePluginButtonClicked):
        Call the new callback if it's supported.

        * UIProcess/WebUIClient.h:
        (WebUIClient):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Update for API changes.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::unavailablePluginButtonClicked):
        Ensure that the pluginspage attribute is a valid URL.

2013-02-21  Jeffrey Pfau  <jpfau@apple.com>

        Optionally partition cache to prevent using cache for tracking
        https://bugs.webkit.org/show_bug.cgi?id=110269

        Reviewed by Maciej Stachowiak.

        Update WKSI bindings and add feature defines.

        * Configurations/FeatureDefines.xcconfig: Add defines for cache partitioning and public suffix list usage
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Normalize ENABLE_ENCRYPTED_MEDIA definitions across all FeatureDefines files.
        https://bugs.webkit.org/show_bug.cgi?id=110806

        Ensure both ENCRYPTED_MEDIA and ENCRYPTED_MEDIA_V2 are enabled on macosx_1090.

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

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

        Full screen mode should not exit when application resigns active state.
        https://bugs.webkit.org/show_bug.cgi?id=106129

        Reviewed by Darin Adler.

        Now that full screen windows get their own full screen space, there is no reason to exit full
        screen mode when the application resigns active state. Instead, the windowserver will bring the
        space containing the newly active application to the foreground. The user can then swipe back
        to the full screen space (or use Mission Control) to get back to the full screen window.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController windowDidLoad]): Remove the applicationDidResignActive: notification from WKFullScreenWindowController.

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

        Safari shows empty window and paints webpage in full-screen background
        https://bugs.webkit.org/show_bug.cgi?id=103712

        Reviewed by Darin Adler.

        When canceling full screen mode due to a provisional load, exit normally instead of closing the
        full screen window controller. Additionally, to ensure full screen is cancelled when the enclosing
        frame around a full screen iframe is navigated, check to see if the navigating document contains
        a full screen element, rather than checking whether the document itself is full screen.

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

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

        Fix build.

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

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

        Add a new pluginDidFail callback that takes a WKDictionary of plug-in information
        https://bugs.webkit.org/show_bug.cgi?id=110793
        <rdar://problem/13265303>

        Reviewed by Sam Weinig.

        Add a new pluginDidFail callback that takes a WKDictionaryRef and also pass in the
        frame and page URLs.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::pluginInformationDictionary):
        (WebKit::WebLoaderClient::didFailToInitializePlugin):
        (WebKit::WebLoaderClient::didBlockInsecurePluginVersion):
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFailToInitializePlugin):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didFailToInitializePlugin):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createJavaAppletWidget):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):

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

        PDFPlugin: Tab between text annotations
        https://bugs.webkit.org/show_bug.cgi?id=106539
        <rdar://problem/12751789>

        Reviewed by Darin Adler.

        Use [PDFLayerController activateNextAnnotation:] to advance focus when the tab key is hit while inside a PDF form.

        Also, a drive-by fix to make the lifetime of PDFPluginAnnotationEventListener's m_annotation pointer more explicit.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add activateNextAnnotation: SPI.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add focus(Next|Previous)Annotation.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::focusNextAnnotation): Ask PDFLayerController to focus the next annotation.
        (WebKit::PDFPlugin::focusPreviousAnnotation): Ask PDFLayerController to focus the next annotation.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.h: Drive-by, initialize m_parent to 0.
        (WebKit::PDFPluginAnnotation::PDFPluginAnnotationEventListener::setAnnotation): Added.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::attach): Use eventNames() instead of string literals.
        (WebKit::PDFPluginAnnotation::~PDFPluginAnnotation): Clear the event listener's reference to its annotation.
        (WebKit::PDFPluginAnnotation::PDFPluginAnnotationEventListener::handleEvent): Null-check the event listener's annotation.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h:
        (WebKit::PDFPluginTextAnnotation::PDFPluginTextAnnotation): Create our PDFPluginTextAnnotationEventListener.
        (PDFPluginTextAnnotationEventListener): Added an event listener (for keydown events in form fields).
        (WebKit::PDFPluginTextAnnotation::PDFPluginTextAnnotationEventListener::create):
        (WebKit::PDFPluginTextAnnotation::PDFPluginTextAnnotationEventListener::setTextAnnotation):
        (WebKit::PDFPluginTextAnnotation::PDFPluginTextAnnotationEventListener::PDFPluginTextAnnotationEventListener):
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::~PDFPluginTextAnnotation): Unregister our keydown event listener.
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement): Register our keydown event listener.
        (WebKit::PDFPluginTextAnnotation::PDFPluginTextAnnotationEventListener::handleEvent): Ask PDFPlugin to focus
        the next/previous annotation when the tab key is pressed (Shift-Tab goes backwards).

2013-02-25  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12976385> Remove rule to silence attempts to create the ~/Library/Caches/com.apple.WebKit2.WebProcessService directory

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb.in: Remove the obsolete rule. We no longer
        have a "WebProcessService".

2013-02-25  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Remove unneeded method didResumeContent from PageViewportController clients
        https://bugs.webkit.org/show_bug.cgi?id=110751

        Reviewed by Jocelyn Turcotte.

        This is a clean-up in the PageViewportController clients that removes leftover
        code from previous design that is partially unused and unnecessary, to simplify
        the interaction between PageViewportController and clients.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::resumeContent):
        * UIProcess/PageViewportControllerClient.h:
        (PageViewportControllerClient):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (PageViewportControllerClientEfl):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::flickMoveEnded):
        (WebKit::PageViewportControllerClientQt::resumeAndUpdateContent):
        (WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2013-02-25  Andreas Kling  <akling@apple.com>

        Reduce amount of code that includes StylePropertySet.h
        <http://webkit.org/b/101149>

        Reviewed by Antti Koivisto.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:

2013-02-24  Andreas Kling  <akling@apple.com>

        Reduce include graph of JSDOMBinding.h
        <http://webkit.org/b/110709>

        Reviewed by Antti Koivisto.

        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject):
        * WebProcess/Storage/StorageAreaProxy.cpp:

2013-02-22  Sam Weinig  <sam@webkit.org>

        Add temporary work around for 32-bit plugins not working in production builds as XPCServices
        https://bugs.webkit.org/show_bug.cgi?id=110680
        <rdar://problem/13236883>

        Reviewed by Anders Carlsson.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        Temporarily don't use XPC for plug-ins for Safari while we figure out why the
        32-bit XPCService is being built universal.

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

        [WK2] The root and page overlay layers should be the size of the view, not the content
        https://bugs.webkit.org/show_bug.cgi?id=110660
        <rdar://problem/13096456>

        Reviewed by Simon Fraser.

        Use the view size for the size of the root and page overlay layers.
        For one, we never update these layers' sizes when the content size changes, causing size mismatches.
        In addition, there's no reason an overlay shouldn't be able to draw outside of the bounds of the content.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):

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

        pluginLoadStrategy should take a WKDictionaryRef for extensibility
        https://bugs.webkit.org/show_bug.cgi?id=110656
        <rdar://problem/13265303>

        Reviewed by Jessie Berlin.

        Change pluginLoadStrategy to take a WKDictionaryRef instead of a number of parameters;
        this lets us add more plug-in information if needed. Also add the page URL and rename documentURL to frameURL.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetPluginInformationBundleIdentifierKey):
        (WKPageGetPluginInformationBundleVersionKey):
        (WKPageGetPluginInformationDisplayNameKey):
        (WKPageGetPluginInformationFrameURLKey):
        (WKPageGetPluginInformationMIMETypeKey):
        (WKPageGetPluginInformationPageURLKey):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit):
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath):
        (WebKit::WebPageProxy::pluginInformationBundleIdentifierKey):
        (WebKit):
        (WebKit::WebPageProxy::pluginInformationBundleVersionKey):
        (WebKit::WebPageProxy::pluginInformationDisplayNameKey):
        (WebKit::WebPageProxy::pluginInformationFrameURLKey):
        (WebKit::WebPageProxy::pluginInformationMIMETypeKey):
        (WebKit::WebPageProxy::pluginInformationPageURLKey):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):

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

        Move pluginLoadPolicy to the page loader client
        https://bugs.webkit.org/show_bug.cgi?id=110635
        <rdar://problem/13265303>
        
        Reviewed by Sam Weinig.

        Move the pluginLoadPolicy callback to the page loader client where it belongs.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebLoaderClient.cpp:
        (WebKit::toWKPluginLoadPolicy):
        (WebKit):
        (WebKit::toPluginModuleLoadPolicy):
        (WebKit::WebLoaderClient::pluginLoadPolicy):
        * UIProcess/WebLoaderClient.h:
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath):
        * UIProcess/WebUIClient.cpp:
        (WebKit):
        * UIProcess/WebUIClient.h:
        (WebUIClient):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2013-02-21  Jer Noble  <jer.noble@apple.com>

        Two video contollers appear after exiting the fullscreen video when using menubar to exit.
        https://bugs.webkit.org/show_bug.cgi?id=110506

        Reviewed by Eric Carlson.

        When we are notified that the fullscreen window is about to exit fullscreen mode unrequested,
        call requestExitFullScreen(), as that will result in Document::webkitExitFullScreen() correctly
        tearing down the fullscreen state.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):

2013-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        Yet another unreviewed buildfix after r143714.

        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::paintToCairoSurface):

2013-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed preventive buildfix after my last commit.

        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/efl/WebView.cpp:

2013-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordGfx] Minor cleanup in CoordinatedGraphicsScene::paintToGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=109824

        Reviewed by Andreas Kling.

        Avoid ugly ifdefs by using PlatformGraphicsContext.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::displayTimerFired):

2013-02-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Remove declaration of non-existent functions from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=110572

        Reviewed by Kenneth Rohde Christiansen.

        Removed declarations of non-existent EwkView::paintToCurrentGLContext() and
        EwkView::paintToCairoSurface(cairo_surface_t*) that were accidentally
        left at r143699.

        * UIProcess/API/efl/EwkView.h:
        (EwkView):

2013-02-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Clean up PageViewportControllerClientEfl class
        https://bugs.webkit.org/show_bug.cgi?id=110438

        Reviewed by Andreas Kling.

        Cleaned up PageViewportControllerClientEfl class from unused methods
        and class members, eliminated access to WK2 internals from this class.

        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::~PageViewportControllerClientEfl):
        (PageViewportControllerClientEfl):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::updateViewportSize):

2013-02-22  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [WK2][EFL][GTK][Qt] Add context menu item tags for C API
        https://bugs.webkit.org/show_bug.cgi?id=109815

        Reviewed by Anders Carlsson.

        This patch adds context menu item tags used by EFL, GTK and Qt ports, defined in
        WebCore to WK2 C API.

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

2013-02-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Move AC code from EwkView to WebView
        https://bugs.webkit.org/show_bug.cgi?id=110216

        Reviewed by Anders Carlsson.

        Accelerated compositing code is moved from EwkView to WebView.
        Added new WKView API to be used from EwkView instead of direct accessing
        to coordinated graphics scene.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewSetUserViewportTranslation):
        (WKViewUserViewportToContents):
        (WKViewPaintToCurrentGLContext):
        (WKViewPaintToCairoSurface):
        * UIProcess/API/C/efl/WKView.h:

            Added WKView API functions.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::displayTimerFired):
        (EwkView::feedTouchEvent):
        (EwkView::createGLSurface):
        (EwkView::handleEvasObjectCalculate):
        (EwkView::handleEwkViewMouseWheel):
        (EwkView::handleEwkViewMouseDown):
        (EwkView::handleEwkViewMouseUp):
        (EwkView::handleEwkViewMouseMove):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):

            Using new WKView API.

        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::initialize):
        (WebKit):
        (WebKit::WebView::paintToCurrentGLContext):
        (WebKit::WebView::paintToCairoSurface):
        (WebKit::WebView::userViewportToContents):
        (WebKit::WebView::transformFromScene):
        (WebKit::WebView::transformToScene):
        (WebKit::WebView::coordinatedGraphicsScene):
        (WebKit::WebView::enterAcceleratedCompositingMode):
        (WebKit::WebView::exitAcceleratedCompositingMode):
        * UIProcess/efl/WebView.h:
        (WebCore):
        (WebKit::WebView::setUserViewportTranslation):
        (WebView):

            Added WebView methods to support new WKView API.

2013-02-21  Dima Gorbik  <dgorbik@apple.com>

        QuickTime plugin doesn't load when accelerated compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=110534

        Reviewed by Anders Carlsson.

        We shouldn't disable accelerated compositing for plugins, because
        plugins such as QuickTime rely on this and will try to set other drawing
        models that we don't support.

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

2013-02-21  Dean Jackson  <dino@apple.com>

        Plug-in snapshotting code always accepts first snapshot
        https://bugs.webkit.org/show_bug.cgi?id=110495

        Reviewed by Tim Horton.

        When we detect a plugin that can be snapshotted we start capturing
        images until we find one that we believe isn't blank, or we timeout.
        I introduced a regression recently where we swap renderers as
        soon as the snapshot arrives, whether or not is is blank.

        The fix was to have the embedder (currently only WK2) be the one
        who tells the HTMLPlugInElement to start displaying snapshots.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginSnapshotTimerFired): When we find a
        snapshot that we like, tell the HTMLPlugInElement to move to
        the snapshot view.

2013-02-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add -DBUILDING_WEBKIT flags to introspection
        scanner.
        * GNUmakefile.list.am: Add missing header to compilation and
        remove one that no longer exists.

2013-02-21  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Move PageViewportController and PageViewportControllerClientEfl out from WebView
        https://bugs.webkit.org/show_bug.cgi?id=110345

        Reviewed by Andreas Kling.

        WebView does not need to know about both PageViewportController and 
        PageViewportControllerClientEfl. Considering the fact that PageViewportController
        will stop being WK2 internal and will be based on WK2 C API, it 
        should be owned by EwkView rather than WebView.

        This patch is also a preparation for WKViewClient API extension to cover all
        the places where PageViewportController and PageViewportControllerClientEfl
        are accessed directly from WebView at the moment.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        (WebKit):
        (EwkView::pageViewportControllerClient):
        (EwkView::pageViewportController):
        (EwkView):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::didCommitLoad):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::didChangeContentsSize):
        (WebKit::WebView::didChangeViewportProperties):
        (WebKit::WebView::pageDidRequestScroll):
        (WebKit::WebView::didRenderFrame):
        (WebKit::WebView::pageTransitionViewportReady):
        * UIProcess/efl/WebView.h:
        (WebView):

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

        Provide WKView SPI to defer telling the WebPageProxy and WebProcess about changes in the hosting window
        https://bugs.webkit.org/show_bug.cgi?id=110415
        <rdar://problem/13095405>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm: Add _viewInWindowChangesDeferredCount and _viewInWindowChangeWasDeferred to WKViewData.
        (-[WKView viewDidMoveToWindow]): If we're deferring window changes, don't include the ViewIsInWindow flag
        when sending viewStateDidChange. Instead, save the fact that we want to do that later aside.
        (-[WKView beginDeferringViewInWindowChanges]):
        (-[WKView endDeferringViewInWindowChanges]): Straightforward begin/end pair. When we exit the last pair and
        have a pending window change, let the WebPageProxy know. WebPageProxy will do the check to ensure that
        the in-window state has actually changed.
        (-[WKView isDeferringViewInWindowChanges]):
        * UIProcess/API/mac/WKViewPrivate.h: 

2013-02-20  Kiran Muppala  <cmuppala@apple.com>

        Disable window occlusion notifications for App Store on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=110417

        Reviewed by Simon Fraser.

        Temporary fix to workaround issues with window occlusion notifications
        in App Store.

        * UIProcess/API/mac/WKView.mm:
        (+[WKView _registerWindowOcclusionNotificationHandlers]): Return early
        if the main bundle identifier matches that of App Store.

2013-02-20  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/110410> Specify the plug-in process / service entitlements via the Xcode configuration.

        This is the modern mechanism for applying entitlements to production builds,
        and it simplifies the maintenance of entitlements going forward. It also allows
        us to fix the new XPC PluginServices to have the same entitlements as PluginProcess.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig: Ad-hoc sign all WebKit2 components.
        * Configurations/PluginProcess.xcconfig: Specify the entitlements to use.
        * Configurations/PluginService.32.xcconfig: Ditto.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/PluginService.Development.xcconfig: Ditto.
        * Configurations/PluginService.entitlements: Renamed from Source/WebKit2/PluginProcess/mac/PluginProcess.entitlements.
        Move the entitlements in to the Configurations directory to make them easier to find.
        * PluginProcess/mac/add-entitlements.sh: Removed. In my testing the dependency issue mentioned
        in the script is not an issue with current versions of Xcode. If we see it again we can come
        up with a workaround that doesn't involve performing the signing via a script phase.
        * WebKit2.xcodeproj/project.pbxproj:

2013-02-20  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/110409> Remove duplication between 32- and 64-bit PluginService plists.

        Reviewed by Dan Bernstein.

        The only difference between the plists was the CFBundleIdentifier. Since the values are the
        same as the product name, we can just use the value of the PRODUCT_NAME configuration setting.

        * Configurations/PluginService.32.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist: Renamed from Source/WebKit2/PluginProcess/EntryPoint/mac/XPCService/PluginService.32/Info.plist.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/Info.plist: Removed.

2013-02-20  Simon Fraser  <simon.fraser@apple.com>

        Zoomed, slow-scrolling pages keep recreating tiles when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=110379

        Reviewed by Tim Horton.

        Make the visible rect and exposed rects passed through
        the drawing area to the tile cache FloatRects instead of IntRects.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]):
        (-[WKView _updateWindowAndViewFrames]):
        (-[WKView enableFrameSizeUpdates]):
        (-[WKView setMinimumWidthForAutoLayout:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::viewExposedRectChanged):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setExposedRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::viewExposedRectChanged):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect):

2013-02-20  Dirk Schulze  <krit@webkit.org>

        Enable CANVAS_PATH flag
        https://bugs.webkit.org/show_bug.cgi?id=108508

        Reviewed by Simon Fraser.

        Enable CANVAS_PATH flag on trunk.

        * Configurations/FeatureDefines.xcconfig:

2013-02-20  Laszlo Gombos  <l.gombos@samsung.com>

        Remove unnecessary includes for Platform.h from headers
        https://bugs.webkit.org/show_bug.cgi?id=110300

        Reviewed by Alexey Proskuryakov.

        wtf/Platform.h only need to be included in a few places directly    
        as it is included in config.h. Remove the unnecessay duplicate as    
        it can be confusing.

        * Shared/PrintInfo.h:

2013-02-20  Huang Dongsung  <luxtella@company100.net>

        [WK2] Remove m_viewportSize in WebPage.
        https://bugs.webkit.org/show_bug.cgi?id=110311

        Reviewed by Anders Carlsson.

        EFL and Qt use m_viewSize as a contents size while Apple use it as a viewport
        size, so EFL and Qt introduced m_viewportSize to make WebPage know a viewport
        size.

        EFL and Qt use m_viewSize as a contents size because the size of non compositing
        layer is contents size, and EFL and Qt mark whole non compositing layer as dirty
        using m_viewSize. Bug 110299 (http://webkit.org/b/110299) changes that it is not
        necessary to know m_viewSize when marking whole non compositing layer as dirty.
        So we can make EFL and Qt use m_viewSize as a viewport size also.

        This patch removes m_viewportSize and related methods to increase readability.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::setSize):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeViewportSize):
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::pageRect):
        (WebKit::WebChromeClient::contentsSizeChanged):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateBackingStoreState):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize):
        (WebKit::WebPage::sendViewportAttributesChanged):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2013-02-20  Huang Dongsung  <luxtella@company100.net>

        [WK2] add setNeedsDisplay in DrawingArea to mark whole layer as dirty.
        https://bugs.webkit.org/show_bug.cgi?id=110299

        Reviewed by Anders Carlsson.

        Currently, we call setNeedsDisplay with the size of WebPage to mark whole
        backing store as dirty. However, the size of non compositing layer can be
        inconsistent with the size of WebPage. For example, in Coordinated Graphics, the
        size of non compositing layer is contents size.

        So, WebPage should not assume the size of non compositing layer, and should just
        call setNeedsDisplay when marking whole layer as dirty.

        In addition, this patch renames from setNeedsDisplay() with a rect argument to
        setNeedsDisplayInRect(), which matches to the terms of GraphicsLayer.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsAndRootView):
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setNonCompositedContentsNeedDisplay):
        (WebKit):
        (WebKit::CoordinatedLayerTreeHost::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::CoordinatedLayerTreeHost::scrollNonCompositedContents):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit):
        (WebKit::DrawingAreaImpl::setNeedsDisplayInRect):
        (WebKit::DrawingAreaImpl::scroll):
        (WebKit::DrawingAreaImpl::forceRepaint):
        (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
        (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
        (WebKit::DrawingAreaImpl::resumePainting):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setSize):
        (WebKit::WebPage::setDrawsBackground):
        (WebKit::WebPage::setDrawsTransparentBackground):
        (WebKit::WebPage::resumeActiveDOMObjectsAndAnimations):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplay):
        (WebKit):
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHostGtk::scrollNonCompositedContents):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        (LayerTreeHostMac):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        (WebKit):
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHostMac::scrollNonCompositedContents):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setNeedsDisplay):
        (WebKit):
        (WebKit::RemoteLayerTreeDrawingArea::setNeedsDisplayInRect):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setNeedsDisplay):
        (WebKit):
        (WebKit::TiledCoreAnimationDrawingArea::setNeedsDisplayInRect):

2013-02-20  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Port EwkPopupMenuItem to the C API
        https://bugs.webkit.org/show_bug.cgi?id=108798

        Reviewed by Kenneth Rohde Christiansen.

        Make use of the new WKPopupItem C API inside EwkPopupMenuItem to remove
        dependency on internal WebPopupItem type. Eina shared string members
        are now lazily initialized to make the object cheaper to construct.

        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::EwkPopupMenu):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (EwkPopupMenuItem::EwkPopupMenuItem):
        (EwkPopupMenuItem::type):
        (EwkPopupMenuItem::textDirection):
        (EwkPopupMenuItem::text):
        (EwkPopupMenuItem::tooltipText):
        (EwkPopupMenuItem::accessibilityText):
        (EwkPopupMenuItem::hasTextDirectionOverride):
        (EwkPopupMenuItem::isEnabled):
        (EwkPopupMenuItem::isLabel):
        (EwkPopupMenuItem::isSelected):
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (EwkPopupMenuItem::create):
        (EwkPopupMenuItem):

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

        Clarify isInWindow vs. isVisible path through to RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=110261
        <rdar://problem/13196122>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setIsInWindow):
        Use Page::setIsInWindow in addition to willMoveOffscreen/didMoveOnscreen.

2013-02-19  Conrad Shultz  <conrad_shultz@apple.com>

        Allow UI clients to handle vertical wheel events.
        https://bugs.webkit.org/show_bug.cgi?id=110006

        Reviewed by Tim Horton.

        Add API to allow clients to selectively control rubber-banding at vertical page extrema.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRubberBandsAtBottom):
        Proxy for the corresponding function in WebCore::Page.
        (WKPageSetRubberBandsAtBottom):
        Ditto.
        (WKPageRubberBandsAtTop):
        Ditto.
        (WKPageSetRubberBandsAtTop):
        Ditto.

        * UIProcess/API/C/WKPage.h:
        Declare new API.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize new member variables.
        (WebKit::WebPageProxy::setRubberBandsAtBottom):
        New function; dispatches a matching message to the WebKit::WebPage.
        (WebKit::WebPageProxy::setRubberBandsAtTop):
        Ditto.

        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        Declare new API.
        (WebKit::WebPageProxy::rubberBandsAtBottom):
        New accessor function.
        (WebKit::WebPageProxy::rubberBandsAtTop):
        Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setRubberBandsAtBottom):
        New function; call the matching function on the associated WebCore::Page.
        (WebKit::WebPage::setRubberBandsAtTop):
        Ditto.

        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        Declare new rubber-banding API.

        * WebProcess/WebPage/WebPage.messages.in:
        Declare new rubber-banding API.

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

        StorageAreaProxy should know its quota
        https://bugs.webkit.org/show_bug.cgi?id=110268

        Reviewed by Sam Weinig.

        Begin stubbing out StorageAreaProxy::setItem and add some quota member variables.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::StorageAreaProxy):
        (WebKit::StorageAreaProxy::setItem):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):
        * WebProcess/Storage/StorageNamespaceProxy.cpp:
        (WebKit::StorageNamespaceProxy::createSessionStorageNamespace):
        (WebKit::StorageNamespaceProxy::StorageNamespaceProxy):
        * WebProcess/Storage/StorageNamespaceProxy.h:
        (WebKit::StorageNamespaceProxy::quota):
        (StorageNamespaceProxy):

2013-02-19  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13239119> NetworkProcess generates timeout spindump logs

        Reviewed by Mark Rowe.

        Don't keep a window server connection in processes that don't need it, and don't
        run an NSApplication run loop.

        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm: (WebKit::ChildProcess::shutdownWindowServerConnection):
        Added a function to shut down connections, and to make sure we don't get one in the future.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        * OfflineStorageProcess/mac/OfflineStorageProcessMac.mm:
        (WebKit::OfflineStorageProcess::initializeProcessName):
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        (WebKit::SharedWorkerProcess::platformInitializeSharedWorkerProcess): Also removed
        some unused includes and forward declarations.

2013-02-18  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Cannot load documents with blob urls
        https://bugs.webkit.org/show_bug.cgi?id=110160

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::canHandleRequest):
        Added knowledge about blobs.

2013-02-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move the API to get TLS certificate from WebKitURIResponse to WebKitWebView
        https://bugs.webkit.org/show_bug.cgi?id=110190

        Reviewed by Anders Carlsson.

        Add webkit_web_view_get_tls_info() and remove
        webkit_uri_response_get_https_status(). This way I can be sure
        that when called after load has been committed the certificate
        will be available. It also makes the API easier to use.

        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        * UIProcess/API/gtk/WebKitURIResponse.h:
        * UIProcess/API/gtk/WebKitURIResponsePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewLoadChanged):
        (mainResourceResponseChangedCallback):
        (webkit_web_view_get_tls_info):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestSSL.cpp:

2013-02-19  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Eliminate access to WK2 C++ internals from ewk_view functions
        https://bugs.webkit.org/show_bug.cgi?id=109794

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewSetShowsAsSource):
        (WKViewGetShowsAsSource):

            Added new WKView API to wrap WebPageProxy::setMainFrameInViewSourceMode()
            and WebPageProxy::mainFrameInViewSourceMode() calls.

        (WKViewExitFullScreen):

            Added new WKView API to wrap WebFullScreenManagerProxy::exitFullScreen()
            calls.

        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::feedTouchEvent):

            Added feedTouchEvent() method so that: at first ewk_view_feed_touch_event()
            is not invoked from EwkView class, secondly ewk_view_feed_touch_event() does
            not access WebPage instance directly.

        (EwkView::feedTouchEvents):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_feed_touch_event):
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):
        (ewk_view_fullscreen_exit):
        (ewkViewPageContentsCallback):
        (ewk_view_page_contents_get):
        (ewk_view_source_mode_set):
        (ewk_view_source_mode_get):

            Those are now using exported C API.

        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setShowsAsSource):
        (WebKit):
        (WebKit::WebView::showsAsSource):
        (WebKit::WebView::exitFullScreen):
        * UIProcess/efl/WebView.h:
        (WebView):

            Added WebView methods to support added WKView API.

2013-02-19  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] ASSERT(node) hit in WebPage::findZoomableAreaForPoint if no zoomable area found
        https://bugs.webkit.org/show_bug.cgi?id=110220

        Reviewed by Allan Sandfeld Jensen.

        If EventHandler::bestZoomableAreaForTouchPoint was unsuccessfull, eg.
        no node was found for a given point, we hit ASSERT(node).
        We should only assert for a valid node if a zoomable area was found.

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

2013-02-19  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Regression(r143273): Caused a lot of tests to time out
        https://bugs.webkit.org/show_bug.cgi?id=110212

        Reviewed by Anders Carlsson.

        StorageManager::destroySessionStorageNamespace() and StorageManager::cloneSessionStorageNamespace()
        should call their respective "*Internal" equivalent instead of calling themselves. This lead to
        a lot of time outs on our build bots.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::cloneSessionStorageNamespace):

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

        [GTK] Remove webkit_web_view_get_subresources from WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=110125

        Reviewed by Anders Carlsson.

        This API is currently implemented caching all resources in the
        WebView which causes some problems in documents loading resources
        indefinitely. This API was used in WebKit1 mainly to implement
        webkit_web_view_save(), but we already have such API in
        WebKit2.

        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        (didReceiveWebViewMessageFromInjectedBundle):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate):
        (webkitWebViewLoadChanged):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebViewResources):
        (testWebResourceGetData):

2013-02-18  Christophe Dumez  <dchris@gmail.com>

        [WK2][EFL] Stop using internal C++ API in ewk_error
        https://bugs.webkit.org/show_bug.cgi?id=108796

        Reviewed by Benjamin Poulain.

        Stop using internal C++ API in ewk_error and use C API instead of avoid
        violating API layering.

        * UIProcess/API/efl/ewk_error.cpp:
        (EwkError::domain):
        (EwkError::isCancellation):
        (ewk_error_type_get):
        * UIProcess/API/efl/ewk_error_private.h:
        (EwkError):

2013-02-18  Simon Fraser  <simon.fraser@apple.com>

        Clean up the boolean argument to visibleContentRect
        https://bugs.webkit.org/show_bug.cgi?id=110167

        Reviewed by Simon Fraser.
        
        Replace the boolean argument to visibleContentRect() with
        an enum.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::visibleContentBounds):
        (WebKit::WebFrame::visibleContentBoundsExcludingScrollbars):

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

        Add a DefaultHash for RefPtr<SecurityOrigin>
        https://bugs.webkit.org/show_bug.cgi?id=110170

        Reviewed by Andreas Kling.

        Remove all explicit uses of SecurityOriginHash.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::SessionStorageNamespace):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::originsWithApplicationCache):
        * WebProcess/Notifications/NotificationPermissionRequestManager.h:
        Include SecurityOriginHash.h. This fixes a bug where m_originToIDMap used pointer-equality
        for looking up security origins.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        This can just take a const reference.

        * WebProcess/ResourceCache/WebResourceCacheManager.h:

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

        Begin stubbing out session storage classes
        https://bugs.webkit.org/show_bug.cgi?id=110168

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit):
        (WebKit::StorageManager::StorageArea::create):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (WebKit::StorageManager::StorageArea::~StorageArea):
        (StorageManager::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::isEmpty):
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::~SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::cloneTo):
        (WebKit::StorageManager::createSessionStorageNamespaceInternal):
        (WebKit::StorageManager::destroySessionStorageNamespaceInternal):
        (WebKit::StorageManager::cloneSessionStorageNamespaceInternal):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Add C API for popup menu and popup item
        https://bugs.webkit.org/show_bug.cgi?id=109083

        Reviewed by Anders Carlsson.

        WK2 EFL delegates display of the popup menu to the browser which causes
        us to have a strong interdependency between internal C++ classes
        (WebPopupMenuProxyEfl, WebPopupItem) and our EFL API implementation
        (EwkView, EwkPopupMenu, EwkPopupMenuItem).

        Since we want to remove this interdependency, this patch introduces a
        for WebPopupMenuProxyEfl (WKPopupMenuListener) and for WebPopupItem
        (WKPopupItem). It also introduces a WKPage client with callbacks for
        showPopupMenu and hidePopupMenu.

        Note that the popup menu functionality is covered by ewk_popup_menu API
        tests and no functionality is lost.

        * PlatformEfl.cmake: Add new files to EFL CMake config.
        * Shared/API/c/efl/WKBaseEfl.h: Add typedefs for WKPopupItemRef and
        WKPopupMenuListenerRef.
        * Shared/APIObject.h: Add new TypePopupMenuItem APIObject type for EFL
        platform.
        * UIProcess/API/C/efl/WKAPICastEfl.h: Add mapping for WKPopupItemRef
        and WKPopupMenuListenerRef API types.
        (WebKit):
        (WebKit::toAPI):
        * UIProcess/API/C/efl/WKPageEfl.cpp: Added.
        (WKPageSetUIPopupMenuClient): Add new C API to set the UI Popup Menu
        client on the page.
        * UIProcess/API/C/efl/WKPageEfl.h: Added.
        * UIProcess/API/C/efl/WKPopupItem.cpp: Added. Add C API for WebPopupItem.
        (WKPopupItemGetType):
        (WKPopupItemGetTextDirection):
        (WKPopupItemHasTextDirectionOverride):
        (WKPopupItemCopyText):
        (WKPopupItemCopyToolTipText):
        (WKPopupItemCopyAccessibilityText):
        (WKPopupItemIsEnabled):
        (WKPopupItemIsLabel):
        (WKPopupItemIsSelected):
        * UIProcess/API/C/efl/WKPopupItem.h: Added.
        * UIProcess/API/C/efl/WKPopupMenuListener.cpp: Added. Add C API for
        WebPopupMenuListenerEfl (formerly WebPopupMenuProxyEfl) so that the
        client can report which popup menu item was selected.
        (WKPopupMenuListenerSetSelection):
        * UIProcess/API/C/efl/WKPopupMenuListener.h: Added.
        * UIProcess/API/efl/EwkView.cpp: Remove dependency on internal C++ types
        (WebPopupMenuProxyEfl and WebPopupItem) and use C API types instead.
        (EwkView::requestPopupMenu):
        * UIProcess/API/efl/EwkView.h:
        (WebKit):
        (EwkView):
        * UIProcess/API/efl/ewk_popup_menu.cpp: Use C API for Popup menu.
        (EwkPopupMenu::EwkPopupMenu):
        (EwkPopupMenu::setSelectedIndex):
        * UIProcess/API/efl/ewk_popup_menu_private.h:
        (EwkPopupMenu::create):
        (EwkPopupMenu):
        * UIProcess/WebPageProxy.cpp: Use WKPageUIPopupMenuClient to show / hide
        the popup menu on EFL port instead of asking the WebPopupMenuProxy.
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::showPopupMenu):
        (WebKit::WebPageProxy::hidePopupMenu):
        * UIProcess/WebPageProxy.h: Add new WKPageUIPopupMenuClient member and
        corresponding initialization method.
        (WebPageProxy):
        * UIProcess/WebPopupMenuProxy.h: Disable showPopupMenu / hidePopupMenu
        virtual methods on EFL port since we go via WKPageUIPopupMenuClient
        for this now.
        (WebPopupMenuProxy):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl): Handle WKPageUIPopupMenuClient
        callbacks and call corresponding EwkView methods. Previously, the EwkView
        methods were called by the internal WebPageProxyEfl class which is no
        longer needed.
        (WebKit::PageUIClientEfl::showPopupMenu):
        (WebKit):
        (WebKit::PageUIClientEfl::hidePopupMenu):
        * UIProcess/efl/PageUIClientEfl.h:
        (PageUIClientEfl):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::initializeUIPopupMenuClient):
        (WebKit):
        * UIProcess/efl/WebPopupItemEfl.cpp: Added. Add APIObject wrapper for
        WebPopupItem so that we can use it in WKPageUIPopupMenuClient.
        (WebKit):
        (WebKit::WebPopupItemEfl::WebPopupItemEfl):
        (WebKit::WebPopupItemEfl::~WebPopupItemEfl):
        * UIProcess/efl/WebPopupItemEfl.h: Added.
        (WebKit):
        (WebPopupItemEfl):
        (WebKit::WebPopupItemEfl::create):
        (WebKit::WebPopupItemEfl::data):
        (WebKit::WebPopupItemEfl::itemType):
        (WebKit::WebPopupItemEfl::text):
        (WebKit::WebPopupItemEfl::textDirection):
        (WebKit::WebPopupItemEfl::hasTextDirectionOverride):
        (WebKit::WebPopupItemEfl::toolTipText):
        (WebKit::WebPopupItemEfl::accessibilityText):
        (WebKit::WebPopupItemEfl::isEnabled):
        (WebKit::WebPopupItemEfl::isLabel):
        (WebKit::WebPopupItemEfl::isSelected):
        (WebKit::WebPopupItemEfl::type):
        * UIProcess/efl/WebPopupMenuListenerEfl.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.cpp.
        Use WebPopupMenuListenerEfl name instead of WebPopupMenuProxyEfl since
        it more accurately represents its functionality now.
        (WebKit):
        (WebKit::WebPopupMenuListenerEfl::WebPopupMenuListenerEfl):
        (WebKit::WebPopupMenuListenerEfl::valueChanged):
        * UIProcess/efl/WebPopupMenuListenerEfl.h: Renamed from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.h.
        (WebKit):
        (WebPopupMenuListenerEfl):
        (WebKit::WebPopupMenuListenerEfl::create):
        * UIProcess/efl/WebUIPopupMenuClient.cpp: Added.
        (WebUIPopupMenuClient::showPopupMenu):
        (WebUIPopupMenuClient::hidePopupMenu):
        * UIProcess/efl/WebUIPopupMenuClient.h: Added.
        (WebKit):
        (WebUIPopupMenuClient):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::createPopupMenuProxy):

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

        Add StorageManager member functions for keeping track of session storage namespaces
        https://bugs.webkit.org/show_bug.cgi?id=110163

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit):
        (WebKit::StorageManager::destroySessionStorageNamespace):
        (WebKit::StorageManager::cloneSessionStorageNamespace):
        (WebKit::StorageManager::createSessionStorageNamespaceInternal):
        (WebKit::StorageManager::destroySessionStorageNamespaceInternal):
        (WebKit::StorageManager::cloneSessionStorageNamespaceInternal):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::storageManager):
        (WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::createNewPage):

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

        StorageManager message handlers should take the connection
        https://bugs.webkit.org/show_bug.cgi?id=110151

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC):
        (CoreIPC::callMemberFunction):
        (CoreIPC::handleMessage):
        * Scripts/webkit2/messages.py:
        (sync_message_statement):
        (generate_message_handler):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createStorageArea):
        (WebKit::StorageManager::destroyStorageArea):
        (WebKit::StorageManager::getValues):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/Storage/StorageManager.messages.in:

2013-02-18  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_security_origin
        https://bugs.webkit.org/show_bug.cgi?id=107923

        Reviewed by Alexey Proskuryakov.

        Use C API inside ewk_security_origin instead of accessing
        directly internal C++ classes, to avoid breaking API
        layering.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::enterFullScreen):
        * UIProcess/API/efl/ewk_security_origin.cpp:
        (EwkSecurityOrigin::EwkSecurityOrigin):
        * UIProcess/API/efl/ewk_security_origin_private.h:
        (EwkSecurityOrigin::create):
        (EwkSecurityOrigin):

2013-01-04  Jer Noble  <jer.noble@apple.com>

        pinch-zooming webpage messes up full-screening of embedded video
        https://bugs.webkit.org/show_bug.cgi?id=106115

        Reviewed by Maciej Stachowiak.

        Reset the page scale when entering full screen, and reset to the original scale when exiting.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Disable failing API tests
        https://bugs.webkit.org/show_bug.cgi?id=110081

        Reviewed by Kenneth Rohde Christiansen.

        Disable EWK2UnitTestBase.ewk_view_scale API test as it is failing.

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

2013-02-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK2] Support WK2 API tests
        https://bugs.webkit.org/show_bug.cgi?id=109843

        Reviewed by Jocelyn Turcotte.

        * UIProcess/API/qt/qquickwebview_p.h:
        (TestWebKitAPI):

2013-02-18  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Changing WebView.contentY and WebView.contentX does not redraw content
        https://bugs.webkit.org/show_bug.cgi?id=108337

        Reviewed by Jocelyn Turcotte.

        We should not ignore content position changes unless pinch zoom or bounce-back
        animation is ongoing.
        This way we notify the web process about visible rect changes if the contentX
        and contentY properties are used to programmatically scroll the content from QML.
        One important usecase for this is when implementing scrollbars.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
        (WebKit::PageViewportControllerClientQt::flickMoveStarted):
        (WebKit::PageViewportControllerClientQt::flickMoveEnded):
        (WebKit::PageViewportControllerClientQt::pageItemPositionChanged):
        (WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):

2013-02-18  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Unified text checker implementation
        https://bugs.webkit.org/show_bug.cgi?id=107682

        Reviewed by Anders Carlsson.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit):
        (WebKit::nextWordOffset):
        Helper function to determine the word offset to do not call
        client's checkSpellingOfString for the word separators.

        (WebKit::TextChecker::checkTextOfParagraph):
        Allow to check spelling for multiple words,
        their misspelling location and length are saved to the vector.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        Add UNIFIED_TEXT_CHECKING guard to checkTextOfParagraph.

        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        (WebKit):
        (WebKit::WebEditorClient::checkTextOfParagraph):
        As spelling implementation is exposed to UIProcess,
        send a meesage to UIProcess to call TextChecker::checkTextOfParagraph.

2013-02-18  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Refactor Ewk_Favicon code and stop relying on internal C++ API
        https://bugs.webkit.org/show_bug.cgi?id=108598

        Reviewed by Kenneth Rohde Christiansen.

        Refactor the Ewk_Favicon code so that it no longer relies on internal
        C++ API and so that it is based solely on the C API. The API is changed
        a little as well so that the Favicon URL is no longer exposed to the
        client. Also the client is now only notified of icon changes once the
        favicon data is actually available.

        The API is covered by existing API tests and by MiniBrowser which are
        both updated accordingly in this patch.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::informURLChange):
        (EwkView::createFavicon):
        (EwkView::onFaviconChanged):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        Client are now notified of favicon changes only when the favicon data
        becomes available and make API to retrieve a favicon synchronous. NULL
        is returned if the favicon data is not available.

        (EwkFaviconDatabase::EwkFaviconDatabase):
        (EwkFaviconDatabase::getIconSurfaceSynchronously):
        (EwkFaviconDatabase::iconDataReadyForPageURL):
        (ewk_favicon_database_icon_get):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (EwkFaviconDatabase):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_favicon_get):
        * UIProcess/API/efl/ewk_view.h:
        Rename 'icon,changed' signal to 'favicon,changed' for clarity and
        consistency with the rest of the favicon API. Remove API to retrieve
        the favicon URL and replace it by one to retrieve the favicon image as
        an Evas_Object instead.

        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        Update API tests to use the new favicon API.

2013-02-17  Jae Hyun Park  <jae.park@company100.net>

        Remove unnecessary public method DrawingAreaImpl::createGraphicsContext()
        https://bugs.webkit.org/show_bug.cgi?id=109893

        Reviewed by Anders Carlsson.

        DrawingAreaImpl::createGraphicsContext() is unnecessary since
        createGraphicsContext can be called directly using ShareableBitmap.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):

2013-02-17  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][EFL] Remove fullscreen manager proxy as a message receiver on invalidate()
        https://bugs.webkit.org/show_bug.cgi?id=109451

        Reviewed by Anders Carlsson.

        Remove fullscreen manager proxy as a message receiver on invalidate(), like
        other ports do after r142160.

        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::invalidate):

2013-02-17  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Regression(r143124): Caused plugins/plugin-javascript-access.html to fail
        https://bugs.webkit.org/show_bug.cgi?id=110053

        Reviewed by Alexey Proskuryakov.

        Clear m_plugins in loadPluginsIfNecessary() before populating the
        vector again. We get duplicates otherwise.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):

2013-02-16  Andreas Kling  <akling@apple.com>

        Remove multi-threading gunk from PluginInfoStore.
        <http://webkit.org/b/110046>

        Reviewed by Alexey Proskuryakov.

        PluginInfoStore is never accessed from multiple threads anymore, so remove the Mutex locking
        and stop making isolated copies of everything.

        * Shared/Plugins/PluginModuleInfo.h:
        (PluginModuleInfo):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::loadPluginsIfNecessary):
        (WebKit::PluginInfoStore::plugins):
        (WebKit::PluginInfoStore::findPluginForMIMEType):
        (WebKit::PluginInfoStore::findPluginForExtension):
        (WebKit::PluginInfoStore::findPlugin):
        (WebKit::PluginInfoStore::infoForPluginWithPath):
        * UIProcess/Plugins/PluginInfoStore.h:
        (PluginInfoStore):

2013-02-16  Sam Weinig  <sam@webkit.org>

        Fix non-production builds.

        * WebKit2.xcodeproj/project.pbxproj:

2013-02-16  Sam Weinig  <sam@webkit.org>

        The Plugin.32 target does not build
        https://bugs.webkit.org/show_bug.cgi?id=110032

        Reviewed by Anders Carlsson.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/PluginService.32.Main.mm: Removed.
        This was meant to be removed already.

        * WebKit2.xcodeproj/project.pbxproj:
        Add Plugin.32 as dependency in All as it should be.

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

        Fix WKDOMRangePrivate.h mistakes
        https://bugs.webkit.org/show_bug.cgi?id=110028

        Reviewed by Ryosuke Niwa.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        Added include of WKDOMRangePrivate.h.

        * WebProcess/InjectedBundle/API/mac/WKDOMRangePrivate.h:
        Fixed class name and include to be WKDOMRange.
        Fixed method name, _copyBundleRangeHandleRef, to match the
        name in the source file.

2013-02-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] remove wkCaptionAppearance from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=109996

        Reviewed by Simon Fraser.

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

2013-02-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143088.
        http://trac.webkit.org/changeset/143088
        https://bugs.webkit.org/show_bug.cgi?id=110000

        Breaks the build (Requested by dgorbik on #webkit).

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

2013-02-15  Kiran Muppala  <cmuppala@apple.com>

        Disable sudden termination on Mac
        https://bugs.webkit.org/show_bug.cgi?id=109990

        Reviewed by Mark Rowe.

        Sudden Termination is causing WebContent XPC services to be killed in
        response to memory pressure.  Hence, disable it until we can identify
        if it is being enabled in error or not.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize): Add call to
        [NSProcessInfo disableSuddenTermination].

2013-02-15  Eric Carlson  <eric.carlson@apple.com>

        [Mac] remove wkCaptionAppearance from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=109996

        Reviewed by Simon Fraser.

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

2013-02-15  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt][WK2] Crash on window resize if WebProcess is closed/crashed
        https://bugs.webkit.org/show_bug.cgi?id=109216

        Reviewed by Benjamin Poulain.

        Only make calls into DrawingAreaProxy pointer after checking its state.

        When the WebProcess was closed or crashed, WebKit::WebPageProxy will set
        its DrawingAreaProxy pointer to null. Resize events on UIProcess/client will
        try to access the object to update the geometry and forward this information
        into the WebProcess. This would create a crash scenario that is fixed by this patch.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::didRelaunchProcess):
        (QQuickWebViewLegacyPrivate::updateViewportSize):

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

        Add HashMap::isValidKey and HashSet::isValidValue
        https://bugs.webkit.org/show_bug.cgi?id=109977

        Reviewed by Sam Weinig and Darin Adler.

        Just call HashMap::isValidKey directly.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::generatePageID):
        Initialize the id to 0 and use prefix increment.

        (WebKit::WebProcessProxy::webFrame):
        (WebKit::WebProcessProxy::canCreateFrame):
        (WebKit::WebProcessProxy::didDestroyFrame):

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

        Typo fix after r143064.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):

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

        One more buildfix after r143052.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):

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

        Unreviewed buildfix after r143052 for Qt/GTK/EFL ports.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        * Shared/WebBatteryStatus.cpp:
        (WebKit::WebBatteryStatus::Data::encode):
        * Shared/WebNetworkInfo.cpp:
        (WebKit::WebNetworkInfo::Data::encode):
        * Shared/efl/LayerTreeContextEfl.cpp:
        (WebKit::LayerTreeContext::encode):
        * Shared/gtk/LayerTreeContextGtk.cpp:
        (WebKit::LayerTreeContext::encode):
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::encode):
        * Shared/qt/QtNetworkReplyData.cpp:
        (WebKit::QtNetworkReplyData::encode):
        * Shared/qt/QtNetworkRequestData.cpp:
        (WebKit::QtNetworkRequestData::encode):
        * Shared/soup/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::encode):

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

        Make most ArgumentEncoder::encode member functions private
        https://bugs.webkit.org/show_bug.cgi?id=109973

        Reviewed by Sam Weinig.

        Make the encode overloads private; the stream operator should be used instead.

        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments1::encode):
        (CoreIPC::Arguments2::encode):
        (CoreIPC::Arguments3::encode):
        (CoreIPC::Arguments4::encode):
        (CoreIPC::Arguments5::encode):
        (CoreIPC::Arguments6::encode):
        (CoreIPC::Arguments7::encode):
        (CoreIPC::Arguments8::encode):
        (CoreIPC::Arguments10::encode):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Scripts/webkit2/messages.py:
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::EncoderAdapter):
        (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):

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

        Add a synchronous GetValues message to StorageManager
        https://bugs.webkit.org/show_bug.cgi?id=109968

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        Handle synchronous messages.

        (CoreIPC::Connection::processIncomingMessage):
        Check for work queue message receivers before doing any other processing.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getValues):
        Add empty stub.

        * UIProcess/Storage/StorageManager.h:
        * UIProcess/Storage/StorageManager.messages.in:
        Add GetValues message.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::loadValuesIfNeeded):
        Send the GetValues message.

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

        A storage area should know its storage type
        https://bugs.webkit.org/show_bug.cgi?id=109964

        Reviewed by Andreas Kling.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::StorageAreaProxy):
        (WebKit::StorageAreaProxy::disabledByPrivateBrowsingInFrame):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):
        * WebProcess/Storage/StorageNamespaceProxy.cpp:
        (WebKit::StorageNamespaceProxy::storageType):
        (WebKit):
        * WebProcess/Storage/StorageNamespaceProxy.h:
        (StorageNamespaceProxy):

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

        Implement StorageAreaProxy::length
        https://bugs.webkit.org/show_bug.cgi?id=109962

        Reviewed by Andreas Kling.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::length):
        Load the values if needed and then return the length.

        (WebKit::StorageAreaProxy::disabledByPrivateBrowsingInFrame):
        Add helper function.

        (WebKit::StorageAreaProxy::loadValuesIfNeeded):
        Just allocate the hash map for now.

        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):

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

        Remove const from a bunch of StorageArea member functions
        https://bugs.webkit.org/show_bug.cgi?id=109957

        Reviewed by Beth Dakin.

        Update for WebCore changes.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::length):
        (WebKit::StorageAreaProxy::key):
        (WebKit::StorageAreaProxy::getItem):
        (WebKit::StorageAreaProxy::contains):
        (WebKit::StorageAreaProxy::canAccessStorage):
        (WebKit::StorageAreaProxy::memoryBytesUsedByCache):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):

2013-02-15  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Use C API inside BatteryProvider and NetworkInfoProvider
        https://bugs.webkit.org/show_bug.cgi?id=107821

        Reviewed by Anders Carlsson.

        BatteryProvider and NetworkInfoProvider should use C API
        instead of accessing the internal C++ classes directly.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/efl/BatteryProvider.cpp:
        (BatteryProvider::~BatteryProvider):
        (BatteryProvider::create):
        (BatteryProvider::BatteryProvider):
        (BatteryProvider::didChangeBatteryStatus):
        * UIProcess/efl/BatteryProvider.h:
        (BatteryProvider):
        * UIProcess/efl/NetworkInfoProvider.cpp:
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        (NetworkInfoProvider::~NetworkInfoProvider):
        * UIProcess/efl/NetworkInfoProvider.h:
        (NetworkInfoProvider):

2013-02-15  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL]REGRESSION (r141978): ewk_view_type_check api test failing
        https://bugs.webkit.org/show_bug.cgi?id=109038

        Reviewed by Anders Carlsson.

        EFL API is defensive by its nature and expects graceful handling of wrong function arguments
        whereas webkit implementation code does not. This patch adds new 'toEwkViewChecked' function,
        which provides handling of wrong arguments, to be used within EFL API layer code.

        * UIProcess/API/efl/EwkView.cpp:
        (toEwkView):

            EwkView* toEwkView(const Ewk_View_Smart_Data* smartData) is not exported anymore
            as it's used within EwkView class only.        

        (EwkView::handleTouchMove):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (toEwkViewChecked):

2013-02-15  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Have WebView subclass PageClient
        https://bugs.webkit.org/show_bug.cgi?id=109684

        Reviewed by Anders Carlsson.

        Stop constructing the PageClient in EwkView. PageClient is an internal
        class and we should not use it directly in our Ewk implementation.
        Instead, have WebView subclass PageClient. The PageClient implementation
        just calls WebView methods otherwise.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::setSize):
        * UIProcess/API/efl/EwkView.h:
        (WebKit):
        (EwkView):
        (EwkView::webView):
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/efl/PageClientBase.cpp: Removed.
        * UIProcess/efl/PageClientBase.h: Removed.
        * UIProcess/efl/PageClientDefaultImpl.cpp: Removed.
        * UIProcess/efl/PageClientDefaultImpl.h: Removed.
        * UIProcess/efl/PageClientLegacyImpl.cpp: Removed.
        * UIProcess/efl/PageClientLegacyImpl.h: Removed.
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::viewWidget):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::initialize):
        (WebKit):
        (WebKit::WebView::evasObject):
        (WebKit::WebView::setThemePath):
        (WebKit::WebView::setDrawsBackground):
        (WebKit::WebView::drawsBackground):
        (WebKit::WebView::setDrawsTransparentBackground):
        (WebKit::WebView::drawsTransparentBackground):
        (WebKit::WebView::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebView::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebView::didCommitLoad):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::didChangeContentsSize):
        (WebKit::WebView::createDrawingAreaProxy):
        (WebKit::WebView::setViewNeedsDisplay):
        (WebKit::WebView::displayView):
        (WebKit::WebView::scrollView):
        (WebKit::WebView::viewSize):
        (WebKit::WebView::isViewWindowActive):
        (WebKit::WebView::isViewFocused):
        (WebKit::WebView::isViewVisible):
        (WebKit::WebView::isViewInWindow):
        (WebKit::WebView::processDidCrash):
        (WebKit::WebView::didRelaunchProcess):
        (WebKit::WebView::pageClosed):
        (WebKit::WebView::toolTipChanged):
        (WebKit::WebView::setCursor):
        (WebKit::WebView::setCursorHiddenUntilMouseMoves):
        (WebKit::WebView::registerEditCommand):
        (WebKit::WebView::clearAllEditCommands):
        (WebKit::WebView::canUndoRedo):
        (WebKit::WebView::executeUndoRedo):
        (WebKit::WebView::screenToWindow):
        (WebKit::WebView::windowToScreen):
        (WebKit::WebView::doneWithKeyEvent):
        (WebKit::WebView::doneWithTouchEvent):
        (WebKit::WebView::createPopupMenuProxy):
        (WebKit::WebView::createContextMenuProxy):
        (WebKit::WebView::createColorChooserProxy):
        (WebKit::WebView::setFindIndicator):
        (WebKit::WebView::enterAcceleratedCompositingMode):
        (WebKit::WebView::exitAcceleratedCompositingMode):
        (WebKit::WebView::updateAcceleratedCompositingMode):
        (WebKit::WebView::didCommitLoadForMainFrame):
        (WebKit::WebView::didFinishLoadingDataForCustomRepresentation):
        (WebKit::WebView::customRepresentationZoomFactor):
        (WebKit::WebView::setCustomRepresentationZoomFactor):
        (WebKit::WebView::flashBackingStoreUpdates):
        (WebKit::WebView::findStringInCustomRepresentation):
        (WebKit::WebView::countStringMatchesInCustomRepresentation):
        (WebKit::WebView::updateTextInputState):
        (WebKit::WebView::handleDownloadRequest):
        (WebKit::WebView::convertToDeviceSpace):
        (WebKit::WebView::convertToUserSpace):
        (WebKit::WebView::didChangeViewportProperties):
        (WebKit::WebView::pageDidRequestScroll):
        (WebKit::WebView::didRenderFrame):
        (WebKit::WebView::pageTransitionViewportReady):
        * UIProcess/efl/WebView.h:
        (WebKit):
        (WebView):
        (WebKit::WebView::pageRef):
        (WebKit::WebView::page):
        (WebKit::WebView::canScrollView):

2013-02-15  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] Restore URL Scheme Delegates after QtWebProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=108808

        When the QtWebProcess crashes, the registered URL Scheme
        Delegates are not properly restored over IPC in the newly
        launched process instance.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::didRelaunchProcess):
        (QQuickWebViewPrivate::updateSchemeDelegates):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

2013-02-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Simplify hitTestResultAtPoint and nodesFromRect APIs
        https://bugs.webkit.org/show_bug.cgi?id=95720

        Reviewed by Julien Chaffraix and Maciej Stachowiak.

        Update calls to new API and update exported symbols.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        (WebKit::InjectedBundleNavigationAction::InjectedBundleNavigationAction):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::handleContextMenuEvent):
        (WebKit::WebPage::highlightPotentialActivation):
        (WebKit::WebPage::findZoomableAreaForPoint):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):

2013-02-14  Huang Dongsung  <luxtella@company100.net>

        [WK2] Rename from scrollOffset to scrollDelta in WebChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=109885

        Reviewed by Simon Fraser.

        Chrome sends a scroll delta to WebChromeClient but WebChromeClient names it
        scrollOffset. So this patch corrects this misnaming.

        In addition, all subclasses of LayerTreeHost don't use the misnamed
        scrollOffset in scrollNonCompositedContents(), so this patch removes the
        scrollOffset argument.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scroll):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::scrollNonCompositedContents):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scroll):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::scrollNonCompositedContents):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        (LayerTreeHostMac):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::scrollNonCompositedContents):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::scroll):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scroll):

2013-02-14  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13161700> REGRESSION: Safari is unable to make SSL connections
        when running from recovery partition

        Reviewed by Sam Weinig.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:
        Re-added /private/var/db/mds/system rules lost in r141445.

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

        Add WKContextIsPlugInUpdateAvailable
        https://bugs.webkit.org/show_bug.cgi?id=109862
        <rdar://problem/13173140>

        Reviewed by Sam Weinig.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm: Renamed from Source/WebKit2/UIProcess/API/C/mac/WKContextPrivateMac.cpp.
        (WKContextGetProcessSuppressionEnabled):
        (WKContextSetProcessSuppressionEnabled):
        (WKContextIsPlugInUpdateAvailable):
        * WebKit2.xcodeproj/project.pbxproj:

2013-02-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Errors when building WebKit2 with Clang
        https://bugs.webkit.org/show_bug.cgi?id=109603

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (setWindowFrame): Cast the position parameters to the integer type when constructing the GdkRectangle.
        * UIProcess/Authentication/WebCredential.cpp: Add an empty implementation of the newly specified destructor.
        * UIProcess/Authentication/WebCredential.h: Work around the incomplete WebCertificateInfo type errors thrown in the inline
        RefPtr destructor of the m_certificateInfo class member by defining a destructor in the class.
        * WebProcess/WebCoreSupport/WebEditorClient.h: The GTK-specific methods are not virtual and as such cannot be overriden.
        The OVERRIDE keywords are thus unnecessary.

2013-02-14  David Kilzer  <ddkilzer@apple.com>

        [Mac] Clean up WARNING_CFLAGS
        <http://webkit.org/b/109747>
        <rdar://problem/13208373>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Use
        GCC_WARN_64_TO_32_BIT_CONVERSION to enable and disable
        -Wshorten-64-to-32 rather than WARNING_CFLAGS.

2013-02-14  Sam Weinig  <sam@webkit.org>

        Add conversions between ObjC and C DOM wrappers
        <rdar://problem/13205468>
        https://bugs.webkit.org/show_bug.cgi?id=109851

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp:
        (WKBundleRangeHandleCreate):
        * WebProcess/InjectedBundle/API/c/WKBundleRangeHandlePrivate.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode _copyBundleNodeHandleRef]):
        * WebProcess/InjectedBundle/API/mac/WKDOMNodePrivate.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange _copyBundleRangeHandleRef]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRangePrivate.h: Added.
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h:
        (InjectedBundleRangeHandle):

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

        Remove StringPairVector
        https://bugs.webkit.org/show_bug.cgi?id=109778

        Reviewed by Ryosuke Niwa.

        Our message generation scripts can handle nested template parameter types now,
        so we no longer need to use StringPairVector.

        * Shared/StringPairVector.h: Removed.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willSubmitForm):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):

2013-02-13  Dean Jackson  <dino@apple.com>

        PlugIn Autostart should expire in 30 days, not half a day
        https://bugs.webkit.org/show_bug.cgi?id=109767

        Reviewed by Brian Weinstein.

        We forgot to multiply by 60 seconds in a minute.

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:

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

        Message generation should handle nested templates
        https://bugs.webkit.org/show_bug.cgi?id=109771

        Reviewed by Ryosuke Niwa.

        Make it possible to have nested class template types as message parameters and
        correctly gather all the needed headers and argument coder headers.

        * Scripts/webkit2/messages.py:
        (class_template_headers):
        Recursively figure out the types and template headers needed for a given type.

        (argument_coder_headers_for_type):
        (headers_for_type):
        Call class_template_headers.

        * Scripts/webkit2/messages_unittest.py:
        (CoreIPC):
        * Scripts/webkit2/parser.py:
        (split_parameters_string):
        (parse_parameters_string):

2013-02-13  David Farler  <dfarler@apple.com>

        Make WebKit2 Derived Sources work with SDK identifiers too
        https://bugs.webkit.org/show_bug.cgi?id=109763

        Reviewed by David Kilzer.

        * WebKit2.xcodeproj/project.pbxproj: Pass SDKROOT=${SDKROOT} to DerivedSources.make

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

        One more buildfix for !ENABLE(PLUGIN_PROCESS) platforms.

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

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

        Unreviewed Qt-Mac and Qt-Win buildfix after r142768.

        * WebProcess/WebProcess.h:
        (WebKit):

2013-02-13  Adam Barth  <abarth@webkit.org>

        Remove bogus ASSERT in WebFrameProxy::didStartProvisionalLoad
        https://bugs.webkit.org/show_bug.cgi?id=109733

        Reviewed by Sam Weinig.

        After http://trac.webkit.org/changeset/142555, this ASSERT is
        triggering on these tests:

        fast/dom/window-load-crash.html
        fast/frames/seamless/seamless-hyperlink-named.html
        fast/frames/seamless/seamless-hyperlink.html

        The ASSERT appears to be bogus. This patch removes it.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad):

2013-02-13  Sam Weinig  <sam@webkit.org>

        Consolidate main functions in WebKit2 now that they are all identical
        https://bugs.webkit.org/show_bug.cgi?id=109748

        Reviewed by Anders Carlsson.

        - Consolidates all the LegacyProcess main functions into ChildProcessMain.mm
        - Consolidates all the XPCService main functions into XPCServiceMain.mm and XPCServiceMain.Development.mm
        - Rename existing ChildProcessMain.h/mm to ChildProcessEntryPoint.h/mm to match the XPCService ones.
        - Switch LegacyProcess to use the "entry point in the plist" idiom, instead of hard coding each one, again
          matching the XPCService.

        * Configurations/BaseLegacyProcess.xcconfig: Add base configuration to hold common legacy process options.
        * Configurations/BaseXPCService.xcconfig:
        * Configurations/NetworkProcess.xcconfig:
        * Configurations/OfflineStorageProcess.xcconfig:
        * Configurations/PluginProcess.xcconfig:
        * Configurations/SharedWorkerProcess.xcconfig:
        * Configurations/WebContentProcess.xcconfig: Renamed form  WebProcess.xcconfig.
        * NetworkProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMain.mm:
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMainBootstrapper.cpp: Removed.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/NetworkServiceMain.Development.mm: Removed.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/NetworkServiceMain.mm: Removed.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/OfflineStorageProcessMain.mm:
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/OfflineStorageProcessMainBootstrapper.cpp: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService.Development/OfflineStorageServiceMain.Development.mm: Removed.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService/OfflineStorageServiceMain.mm: Removed.
        * PluginProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMainBootstrapper.cpp: Removed.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/PluginService.64.Main.mm: Removed.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/PluginService.Development.Main.mm: Removed.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.h: 
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessEntryPoint.mm: 
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.h: Removed.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.mm: Replaced.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMainBootstrapper.h: Removed.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h: Removed.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.h: Removed.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/SharedWorkerProcessMain.mm:
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/SharedWorkerProcessMainBootstrapper.cpp: Removed.
        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMainBootstrapper.cpp: Removed.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebContentServiceMain.Development.mm: Removed.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/WebContentServiceMain.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2013-02-13  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Stop using WebString in ewk_cookie_manager, ewk_form_submission_request and ewk_text_checker
        https://bugs.webkit.org/show_bug.cgi?id=108794

        Reviewed by Alexey Proskuryakov.

        Stop using WebString in ewk_cookie_manager, ewk_form_submission_request
        and ewk_text_checker as it is internal C++ API. WKString and
        WKEinaSharedString are used instead.

        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp:
        (WKEinaSharedString::leakString): Add leakString() method to
        WKEinaSharedString so that we can conveniently convert a WKString to a
        Eina shared string and take ownership of it.
        * UIProcess/API/cpp/efl/WKEinaSharedString.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (EwkFormSubmissionRequest::copyFieldValue):
        (ewk_form_submission_request_field_names_get):
        (ewk_form_submission_request_field_value_get):
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (EwkFormSubmissionRequest):
        * UIProcess/API/efl/ewk_text_checker.cpp:
        (checkSpellingOfString):
        (guessesForWord):
        (learnWord):
        (ignoreWord):
        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:
        (TEST_F): Add API test for new WKEinaSharedString::leakString() method.

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

        Remove Connection::QueueClient
        https://bugs.webkit.org/show_bug.cgi?id=109744

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::connectionDidClose):
        * Platform/CoreIPC/Connection.h:
        (Connection):

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

        Try to fix the Lion build.

        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):

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

        Remove support for the DispatchOnConnectionQueue message attribute
        https://bugs.webkit.org/show_bug.cgi?id=109743

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC):
        * Scripts/webkit2/messages.py:
        (handler_function):
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:

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

        StorageManager should be a WorkQueueMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=109741

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::processWillOpenConnection):
        (WebKit::StorageManager::processWillCloseConnection):
        (WebKit::StorageManager::createStorageArea):
        (WebKit::StorageManager::destroyStorageArea):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/Storage/StorageManager.messages.in:

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

        EventDispatcher should be a WorkQueueMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=109736

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::create):
        (WebKit):
        (WebKit::EventDispatcher::EventDispatcher):
        (WebKit::EventDispatcher::initializeConnection):
        (WebKit::EventDispatcher::wheelEvent):
        (WebKit::EventDispatcher::gestureEvent):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:
        (WebKit):
        (WebKit::WebProcess::eventDispatcher):
        (WebProcess):

2013-02-13  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed build fix after r142768.

        r142768 broke the EFL WK2 build due to wrong member initialization
        order in the WebProcess constructor initialization list.

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

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

        Make PluginProcessConnectionManager a WorkQueueMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=109727

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::create):
        (WebKit):
        (WebKit::PluginProcessConnectionManager::PluginProcessConnectionManager):
        (WebKit::PluginProcessConnectionManager::initializeConnection):
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        (PluginProcessConnectionManager):
        * WebProcess/Plugins/PluginProcessConnectionManager.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::pluginProcessConnectionManager):
        * WebProcess/WebProcess.h:
        (WebKit):
        (WebProcess):

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

        Make SecItemShimProxy be a WorkQueueMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=109719

        Reviewed by Sam Weinig.

        This adds a WantsConnection message attribute to be used for messages whose handlers
        should take the connection the message was delivered to.
        
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        Add new handleMessage overload.
        
        * Scripts/webkit2/messages.py:
        (async_message_statement):
        (generate_message_handler):
        Handle the WantsMessage attribute.

        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::shared):
        Use dispatch_once and adoptRef.

        (WebKit::SecItemShimProxy::SecItemShimProxy):
        Initialize the queue.

        (WebKit::SecItemShimProxy::initializeConnection):
        Add the proxy as a work queue message receiver.

        (WebKit::SecItemShimProxy::secItemRequest):
        This no longer needs to call out to a dispatch queue, it's already on a queue.

        * UIProcess/mac/SecItemShimProxy.messages.in:
        This doesn't need to be a legacy receiver. Also, add the WantsConnection message.

2013-02-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142736.
        http://trac.webkit.org/changeset/142736
        https://bugs.webkit.org/show_bug.cgi?id=109716

        Broke ABI, nightly builds crash on launch (Requested by ap on
        #webkit).

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2013-02-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2][EFL] Cleanup of graphics related code in EwkView
        https://bugs.webkit.org/show_bug.cgi?id=109377

        Reviewed by Anders Carlsson.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):

            Initialize the evasGL dependencies here and
            set m_isAccelerated to false if this fails.

            Set the coordinated graphics scene as active
            when using fixed layout.

        (EwkView::setSize):

            Add a method to set the size and user-viewport
            transform from the outside. The idea is moving
            this to our pure WK C API in the future.

        (EwkView::transformFromScene):
        (EwkView::transformToScene):

            Update the transform methods to use the user-
            viewport transform.

        (EwkView::paintToCurrentGLContext):
        (EwkView::paintToCairoSurface):

            Add methods to paint to either the current GL context
            or to a given cairo_surface_t (for software fallback
            cases).

        (EwkView::displayTimerFired):

            Clean up and use the two above methods.

        (EwkView::scheduleUpdateDisplay):

            Use the new size() methods instead of using the 
            smart-object data directly.

        (EwkView::createGLSurface):

            Make this method use size() to query the surface size
            and avoid creating the context (done in ctor now).
            Also avoid using the smart-object data directly.

        (EwkView::enterAcceleratedCompositingMode):
        (EwkView::exitAcceleratedCompositingMode):

            Turn on/off the use of the coord. graphics scene.

        (EwkView::handleEvasObjectCalculate):

            Use the new setSize and setUserViewportTransform.

        (EwkView::takeSnapshot):
        * UIProcess/API/efl/EwkView.h:
        (WebCore):
        (EwkView):
        (EwkView::size):
        (EwkView::setUserViewportTransform):
        (EwkView::userViewportTransform):

            Add the new method definitions and rename isHardwareAccelerated
            to isAccelerated which fits better with the naming in WebCore.

2013-02-13  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Introduce WKViewClient C API
        https://bugs.webkit.org/show_bug.cgi?id=109559

        Reviewed by Anders Carlsson.

        This patch introduces the WKViewClient C API for EFL's WKView. The purpose of
        this new C API is to eventually remove the interdependency between EFL's
        PageClient and EwkView. When completed, PageClient should only interact with
        WebView and not be aware of EwkView so that we have a clean separation between
        internal WebKit2 classes and our EFL Ewk API implementation.

        This patch is only a first step towards this goal as there is a lot of work
        to do to achieve complete separation between EwkView and PageClient. The purpose
        of this patch is to introduce the needed architecture which will later be
        extended by introducing new WKViewClient callbacks.

        * PlatformEfl.cmake: Add new ViewClientEfl.cpp and WebViewClient.cpp to EFL's CMake
        configuration.
        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewSetViewClient):
        * UIProcess/API/C/efl/WKView.h: Introduce new WKViewClient C API.
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView): Initialize ViewClientEfl.
        * UIProcess/API/efl/EwkView.h: Add new ViewClientEfl member.
        (WebKit):
        (EwkView):
        * UIProcess/API/efl/EwkViewCallbacks.h: Update ContentsSizeChanged smart callback to
        accept a WKSize in parameter instead of an IntRect.
        * UIProcess/efl/PageClientBase.cpp: Start calling WKViewClient callbacks instead of
        interacting directly with EwkView to avoid violating API layering.
        (WebKit::PageClientBase::view):
        (WebKit::PageClientBase::setViewNeedsDisplay):
        * UIProcess/efl/PageClientBase.h:
        (WebKit):
        (PageClientBase):
        * UIProcess/efl/PageClientDefaultImpl.cpp: Start calling WKViewClient callbacks instead of
        interacting directly with EwkView to avoid violating API layering.
        (WebKit::PageClientDefaultImpl::didChangeContentsSize):
        * UIProcess/efl/PageClientLegacyImpl.cpp: Start calling WKViewClient callbacks instead of
        interacting directly with EwkView to avoid violating API layering.
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit):
        (WebKit::ViewClientEfl::toEwkView):
        (WebKit::ViewClientEfl::viewNeedsDisplay):
        (WebKit::ViewClientEfl::didChangeContentsSize):
        (WebKit::ViewClientEfl::ViewClientEfl):
        (WebKit::ViewClientEfl::~ViewClientEfl):
        * UIProcess/efl/ViewClientEfl.h: Introduce new ViewClientEfl which handles WKViewClient callbacks
        and interacts with EwkView.
        (WebKit):
        (ViewClientEfl):
        (WebKit::ViewClientEfl::create):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::initializeClient):
        (WebKit):
        (WebKit::WebView::setViewNeedsDisplay):
        (WebKit::WebView::didChangeContentsSize):
        * UIProcess/efl/WebView.h: Add new WebViewClient member and corresponding methods to interact
        with it.
        (WebView):
        * UIProcess/efl/WebViewClient.cpp:
        (WebKit):
        (WebKit::WebViewClient::viewNeedsDisplay):
        (WebKit::WebViewClient::didChangeContentsSize):
        * UIProcess/efl/WebViewClient.h: Add new WebViewClient APIClient for WKViewClient.
        (WebCore):
        (WebKit):

2013-02-13  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL][WTR] Regression(r141836): WTR crashes on exit
        https://bugs.webkit.org/show_bug.cgi?id=109456

        Reviewed by Anders Carlsson.

        WebView destructor now considers the situation if its WebPageProxy
        instance had been closed from outside the class (explicitly
        by client code).

        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::~WebView):

2013-02-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Remove web intents callbacks
        https://bugs.webkit.org/show_bug.cgi?id=109654

        Reviewed by Benjamin Poulain.

        Web intents was removed by r142549.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/qt/QtBuiltinBundlePage.cpp:
        (WebKit::QtBuiltinBundlePage::QtBuiltinBundlePage):

2013-02-12  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [WK2] Page reloading will crash UIProcess after WebProcess was killed
        https://bugs.webkit.org/show_bug.cgi?id=109305

        Reviewed by Benjamin Poulain.

        Re-initialize the pointer to a WebInspectorProxy object before calling
        initializeWebPage().

        When the WebProcess crashes, WebPageProxy::processDidCrash() will
        set WebInspectorProxy pointer to null, which later is accessed by
        initializeWebPage(). This patch avoids a crash scenario where
        calls into a null pointer would be made.

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

2013-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Enable PAGE_VISIBILITY_API
        https://bugs.webkit.org/show_bug.cgi?id=109399

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2013-02-12  Brady Eidson  <beidson@apple.com>

        Update a comment in NetworkProcess to be more accurate.

        Rubberstamped by Sam Weinig.

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

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

        SecItemShim should be a WorkQueueMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=109636

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        Add a helper function for dispatching a work queue message receiver message.

        (CoreIPC::Connection::processIncomingMessage):
        Check if there are any work queue message receivers registered for this message.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::shared):
        Use dispatch_once instead of the AtomicallyInitializedStatic macro.

        (WebKit::SecItemShim::SecItemShim):
        Initialize the queue.

        (WebKit::SecItemShim::secItemResponse):
        Remove the connection parameter.

        (WebKit::SecItemShim::initializeConnection):
        Register the shim object as a work queue message receiver.

        * Shared/mac/SecItemShim.h:
        Inherit from WorkQueueMessageReceiver.

        * Shared/mac/SecItemShim.messages.in:
        Remove LegacyReceiver and DispatchOnConnectionQueue.

2013-02-12  Sam Weinig  <sam@webkit.org>

        Make Plug-in XPC services "join existing sessions"
        <rdar://problem/13196448>

        Reviewed by Mark Rowe.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist:

2013-02-12  Sam Weinig  <sam@webkit.org>

        Add skeleton of the OfflineStorageProcess
        https://bugs.webkit.org/show_bug.cgi?id=109615

        Reviewed by Anders Carlsson.

        This adds the skeleton of a new process to contain Database and Local Storage
        backends in (hence, offline storage). We're adding a new process, rather than
        using the Network or UIProcesses, to allow us to tightly sandbox these activities
        away from networking and full filesystem access.

        * Configurations/OfflineStorageProcess.xcconfig: Added.
        * Configurations/OfflineStorageService.Development.xcconfig: Added.
        * Configurations/OfflineStorageService.xcconfig: Added.
        * DerivedSources.make:
        * OfflineStorageProcess: Added.
        * OfflineStorageProcess/EntryPoint: Added.
        * OfflineStorageProcess/EntryPoint/mac: Added.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess: Added.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/Info.plist: Added.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/OfflineStorageProcessMain.mm: Added.
        * OfflineStorageProcess/EntryPoint/mac/LegacyProcess/OfflineStorageProcessMainBootstrapper.cpp: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService.Development: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService.Development/Info.plist: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService.Development/OfflineStorageServiceMain.Development.mm: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService/Info.plist: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageService/OfflineStorageServiceMain.mm: Added.
        * OfflineStorageProcess/EntryPoint/mac/XPCService/OfflineStorageServiceEntryPoint.mm: Added.
        * OfflineStorageProcess/OfflineStorageProcess.cpp: Added.
        * OfflineStorageProcess/OfflineStorageProcess.h: Added.
        * OfflineStorageProcess/OfflineStorageProcess.messages.in: Added.
        * OfflineStorageProcess/mac: Added.
        * OfflineStorageProcess/mac/OfflineStorageProcessMac.mm: Added.
        (WebKit::OfflineStorageProcess::initializeProcessName):
        (WebKit::OfflineStorageProcess::initializeSandbox):
        * OfflineStorageProcess/mac/com.apple.WebKit.OfflineStorage.sb: Added.
        * Shared/OfflineStorage: Added.
        * Shared/OfflineStorage/OfflineStorageProcessCreationParameters.cpp: Added.
        * Shared/OfflineStorage/OfflineStorageProcessCreationParameters.h: Added.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        Added OfflineStorageProcessCreationParameters.

        * WebKit2.xcodeproj/project.pbxproj:

2013-02-12  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Fix build warning after r142579
        https://bugs.webkit.org/show_bug.cgi?id=109547

        Reviewed by Alexey Proskuryakov.

        Use UNUSED_PARAM macro to fix -Wunused-parameter build warning.

        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):

2013-02-12  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Reenable ewk_auth_request API tests
        https://bugs.webkit.org/show_bug.cgi?id=108451

        Reviewed by Benjamin Poulain.

        ewk_auth_request API tests were temporarily disabled after
        the C API for resource loading was removed from WebKit2.
        This patches updates the tests so that they no longer rely
        on the resource loading events and renables them.

        This patch also corrects the naming of the static variables
        in the test to follow more closely the WebKit coding style.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp:
        (serverCallback):
        (TEST_F):
        (onLoadFinished):

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

        Introduce a WorkQueueMessageReceiver class as a replacement for QueueClient
        https://bugs.webkit.org/show_bug.cgi?id=109612

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::addWorkQueueMessageReceiver):
        (CoreIPC):
        (CoreIPC::Connection::removeWorkQueueMessageReceiver):
        (CoreIPC::Connection::addWorkQueueMessageReceiverOnConnectionWorkQueue):
        (CoreIPC::Connection::removeWorkQueueMessageReceiverOnConnectionWorkQueue):
        * Platform/CoreIPC/Connection.h:
        (Connection):

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

        Typo fix after r142663.

        * GNUmakefile.list.am:

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

        [WK2] Unreviewed trivial buildfix after r142630 and r142651.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):

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

        Change the queue client base class to be private everywhere
        https://bugs.webkit.org/show_bug.cgi?id=109604

        Reviewed by Andreas Kling.

        Move connection queue client registration inside of the respective queue client classes.

        Also, it's too late to add queue clients in ChildProcessProxy::didFinishLaunching, so do this in
        ChildProcessProxy::connectionWillOpen instead.
        
        Finally, assert that queue clients are only being added and removed from the client thread.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeConnection):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::addQueueClient):
        (CoreIPC::Connection::removeQueueClient):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::initializeConnection):
        (WebKit):
        * Shared/mac/SecItemShim.h:
        (SecItemShim):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::connectionWillOpen):
        (WebKit):
        (WebKit::NetworkProcessProxy::connectionWillClose):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::initializeConnection):
        (WebKit):
        * UIProcess/mac/SecItemShimProxy.h:
        (SecItemShimProxy):
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::initializeConnection):
        (WebKit):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        (PluginProcessConnectionManager):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::initializeConnection):
        (WebKit):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):

2013-02-12  Brady Eidson  <beidson@apple.com>

        Add WKContext API to retrieve basic network process statistics
        https://bugs.webkit.org/show_bug.cgi?id=109329

        Reviewed by Sam Weinig.

        This patch adds a WKContextGetStatisticsWithOptions which allows the client to ask for
        certain types of statistics.

        It also expands the "get statistics" callback mechanism to allow for a statistics request 
        to be answered by multiple child processes.

        That mechanism still has some rough edges but will eventually allow for getting statistics
        from multiple web processes, as well.

        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::pendingRequestCount):
        (WebKit::HostRecord::activeLoadCount):
        * NetworkProcess/HostRecord.h:

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::getNetworkProcessStatistics):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::hostsPendingCount):
        (WebKit::NetworkResourceLoadScheduler::loadsPendingCount):
        (WebKit::NetworkResourceLoadScheduler::hostsActiveCount):
        (WebKit::NetworkResourceLoadScheduler::loadsActiveCount):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        * Shared/Authentication/AuthenticationManager.h:
        (WebKit::AuthenticationManager::outstandingAuthenticationChallengeCount):
        * Shared/Downloads/DownloadManager.h:

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetStatistics):
        (WKContextGetStatisticsWithOptions):
        * UIProcess/API/C/WKContext.h:

        * UIProcess/StatisticsRequest.cpp: Added.
        (WebKit::StatisticsRequest::StatisticsRequest):
        (WebKit::StatisticsRequest::~StatisticsRequest):
        (WebKit::StatisticsRequest::addOutstandingRequest):
        (WebKit::addToDictionaryFromHashMap):
        (WebKit::createDictionaryFromHashMap):
        (WebKit::StatisticsRequest::completedRequest):
        * UIProcess/StatisticsRequest.h: Added.
        (WebKit::StatisticsRequest::create):

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::networkingProcessConnection):
        (WebKit::WebContext::getStatistics):
        (WebKit::WebContext::requestWebContentStatistics):
        (WebKit::WebContext::requestNetworkingStatistics):
        (WebKit::WebContext::didGetStatistics):
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:

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

        * WebKit2.xcodeproj/project.pbxproj:

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

        Build fix.

        Add back the files to the Xcode project that were removed in r142580.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:

2013-02-12  Jessie Berlin  <jberlin@apple.com>

        Build fix after r142540 and r142518

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::didReceivePluginProcessConnectionManagerMessageOnConnectionWorkQueue):
        This function was added to the header in r142518 but not implemented in that revision.
        It wasn't a problem until r142540 started using it.
        Add a stub implementation for it.

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

        Make PluginProcessProxy a ChildProcessProxy.
        https://bugs.webkit.org/show_bug.cgi?id=109513

        Reviewed by Anders Carlsson.

        * Shared/ChildProcessProxy.h: Inherit from ThreadSafeRefCounted.
        * UIProcess/Network/NetworkProcessProxy.h: Don't inherit from RefCounted.
        * UIProcess/WebProcessProxy.h: Don't inherit from ThreadSafeRefCounted
        * UIProcess/Plugins/PluginProcessProxy.h: Don't inherit from RefCounted, do inherit from ChildProcessProxy

        Rely on ChildProcessProxy for process launcher management and launch options:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        (WebKit::PluginProcessProxy::getLaunchOptions):
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        (WebKit::PluginProcessProxy::getSitesWithData):
        (WebKit::PluginProcessProxy::clearSiteData):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        (WebKit::PluginProcessProxy::getPluginProcessSerialNumber):

2013-02-11  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13196331> NetworkProcess deny mach-lookup com.apple.PowerManagement.control

        Reviewed by Sam Weinig.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:

2013-02-11  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Make CoordinatedGraphicsScene not know contents size.
        https://bugs.webkit.org/show_bug.cgi?id=108922

        Reviewed by Noam Rosenthal.
        Signed off for WebKit2 by Benjamin Poulain.

        Currently, CoordinatedGraphicsScene has two methods to know contents
        size: setContentsSize() and setVisibleContentsRect(). Contents size is
        used when adjusting a scroll position, but adjustment is not needed
        because EFL and Qt platform code (currently PageViewportController)
        already adjusts a scroll position, and it is natural for each platform
        to be in charge of adjusting. So this patch makes CoordinatedGraphicsScene
        not know contents size.

        In addition, now DrawingAreaProxy::coordinatedLayerTreeHostProxy() is only used
        to get CoordinatedGraphicsScene.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::updateSize):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::setSize):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::setVisibleContentsRect):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):

2013-02-11  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: remove the DidChangeScrollPosition message.
        https://bugs.webkit.org/show_bug.cgi?id=108051

        Reviewed by Noam Rosenthal.
        Signed off for WebKit2 by Benjamin Poulain.

        Currently, we use the DidChangeScrollPosition message to send the scroll
        position that WebCore used in this frame to UI Process. We had to have
        some member variables for the DidChangeScrollPosition message.
        However, we can send a scroll position via the DidRenderFrame message,
        because CoordinatedGraphicsScene::m_renderedContentsScrollPosition is
        updated at the moment of flushing. So we can remove the
        DidChangeScrollPosition message and some redundant member variables.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::didRenderFrame):
        (WebKit):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
          Remove the DidChangeScrollPosition message.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
          Send a scroll position via the DidChangeScrollPosition message.
        (WebKit::CoordinatedLayerTreeHost::syncLayerState):
          Don't send a scroll position because flushPendingLayerChanges() does
          that. In addition, it is weird to check if we must send a scroll
          position at the moment of sending the SyncLayerState message of every
          layers.
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-02-11  Ryosuke Niwa  <rniwa@webkit.org>

        Disable delete button controller on non-Mac ports and delete EditorClient::shouldShowDeleteInterface
        https://bugs.webkit.org/show_bug.cgi?id=109534

        Reviewed by Anders Carlsson.

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

2013-02-11  Jae Hyun Park  <jae.park@company100.net>

        [EFL] Build fix
        https://bugs.webkit.org/show_bug.cgi?id=109518

        Reviewed by Laszlo Gombos.

        Fix EFL build by including PluginProcessConnectionManager.messages.in in
        CMakeLists.txt

        * CMakeLists.txt:

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

        Fix build.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebProcess.cpp:

2013-02-11  Seulgi Kim  <seulgikim@company100.net>

        [GTK] Build fix.
        https://bugs.webkit.org/show_bug.cgi?id=109516

        Reviewed by Csaba Osztrogonác.

        PluginProcessConnectionManagerMessages are omitted from messages list.

        * GNUmakefile.list.am:

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

        [WK2] setMinimumLayoutWidth should bail if there's no WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=109512
        <rdar://problem/13093627>

        Reviewed by Anders Carlsson.

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

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

        PluginProcessConnectionManager should be a QueueClient
        https://bugs.webkit.org/show_bug.cgi?id=109496

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::didReceiveMessageOnConnectionWorkQueue):
        (WebKit):
        (WebKit::PluginProcessConnectionManager::didCloseOnConnectionWorkQueue):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        (PluginProcessConnectionManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:
        (WebProcess):

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

        Unreviewed WK2 buildfix after r142518.

        * DerivedSources.pri:

2013-02-11  Gavin Barraclough  <barraclough@apple.com>

        PluginProcess should quit immediately if idle in response to low-memory notifications
        https://bugs.webkit.org/show_bug.cgi?id=109103
        <rdar://problem/12679827>

        Reviewed by Brady Eidson.

        PluginProcess now installs a MemoryPressureHandler for the process, providing
        a custom callback which will call terminate if appropriate (if the plugin is not
        currently in use).

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::lowMemoryHandler):
            - Custom callback to terminate if appropriate.
        (WebKit::PluginProcess::initializeProcess):
            - Install the MemoryPressureHandler.
        (WebKit::PluginProcess::shouldTerminate):
            - This method now also needs to be callable in situations where it might return false.
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
            - Added declaration for lowMemoryHandler.

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

        Move the PluginProcessCrashed message to PluginProcessConnectionManager
        https://bugs.webkit.org/show_bug.cgi?id=109493

        Reviewed by Andreas Kling.

        This is in preparation for making PluginProcessConnectionManager a connection queue client.

        * DerivedSources.make:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didClose):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed):
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        (PluginProcessConnectionManager):
        * WebProcess/Plugins/PluginProcessConnectionManager.messages.in: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessageOnConnectionWorkQueue):
        (WebKit::WebProcess::webResourceLoadScheduler):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2013-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Kill TestRunner::setMinimumTimerInterval; implement the feature with InternalSettings
        https://bugs.webkit.org/show_bug.cgi?id=109349

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2013-02-11  Dean Jackson  <dino@apple.com>

        Snapshotted plug-in should use shadow root
        https://bugs.webkit.org/show_bug.cgi?id=108284

        Reviewed by Simon Fraser.

        Take three of this commit - after rollout in r142400 and r142405.
        We no longer have any need for plugInStartLabelImage.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Remove plugInStartLabelImage.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.

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

        The plug-in process connection manager doesn't need to be heap allocated
        https://bugs.webkit.org/show_bug.cgi?id=109479

        Reviewed by Andreas Kling.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::pluginProcessConnectionManager):
        (WebKit::WebProcess::pluginProcessCrashed):
        * WebProcess/WebProcess.h:
        (WebKit):
        (WebProcess):

2013-02-11  Tony Chang  <tony@chromium.org>

        Move setFrameFlatteningEnabled from layoutTestController to window.internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=87149

        Reviewed by Simon Fraser.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Add setFrameFlatteningEnabled to the list of overridable values.

2013-02-11  Claudio Saavedra  <csaavedra@igalia.com>

        [WK2][Notifications] Missing early return in populateCopyOfNotificationPermissions
        https://bugs.webkit.org/show_bug.cgi?id=108459

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::populateCopyOfNotificationPermissions):
        Providers might return 0 and we will end up with a null-pointer dereference.
        Early check against this.

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

        Make the Plug-in XPCService build work even when building in Xcode
        <rdar://problem/13011186>
        https://bugs.webkit.org/show_bug.cgi?id=109392

        Reviewed by Anders Carlsson.

        * Configurations/DebugRelease.xcconfig:
        Add a DEBUG_OR_RELEASE variable to test against.
        * Configurations/PluginService.32.xcconfig:
        * Configurations/PluginService.64.xcconfig:
        In non-production builds, don't link against WebKit2, so that we don't get warnings about WebKit2.framework
        not containing the right architectures. This is ok, as these services are not used in non-production builds.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/NetworkServiceMain.Development.mm:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info.plist:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/NetworkServiceMain.mm:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/PluginService.32.Main.mm:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/PluginService.64.Main.mm:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/PluginService.Development.Main.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebContentServiceMain.Development.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/WebContentServiceMain.mm:
        Switch off the the old idiom of defining a macro for the initializer function, and instead set
        it in the Info.plist, so the XPCServiceBootstrapper can grab it.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:
        (WebKit::XPCServiceEventHandler):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.h:
        (WebKit::XPCServiceEventHandler):
        Get the entry point from the bundle, rather than the macro. This is not only a bit less gross,
        but also allows us to build without having linked against WebKit2.framework.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        Re-enable using XPC for plug-ins.

        * WebKit2.xcodeproj/project.pbxproj:
        Update project.

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

        Add back code that was accidentally removed when moving plug-in enumeration back to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=109379

        Reviewed by Andreas Kling.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPlugins):

2013-02-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r142347.
        http://trac.webkit.org/changeset/142347
        https://bugs.webkit.org/show_bug.cgi?id=108273

        Because a depending change r142343 was rolled out.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelTitle):
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelSubtitle):

2013-02-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r142343.
        http://trac.webkit.org/changeset/142343
        https://bugs.webkit.org/show_bug.cgi?id=108284

        It might make inspector/profiler/selector-profiler-url.html
        crashy.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelImage):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::plugInStartLabelImage):
        (WebKit):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

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

        [WebKit2][Gtk] Remove the fullscreen manager proxy message receiver upon invalidating
        https://bugs.webkit.org/show_bug.cgi?id=109352

        Reviewed by Sam Weinig.

        As added for the Mac port in r142160 due to the changes in the same revision, remove
        the fullscreen manager proxy as a message receiver. Also fixes a failing unit test.

        * UIProcess/gtk/WebFullScreenManagerProxyGtk.cpp:
        (WebKit::WebFullScreenManagerProxy::invalidate):

2013-02-10  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [WK2] Fix build on PLUGIN_ARCHITECTURE(UNSUPPORTED) after r142314
        https://bugs.webkit.org/show_bug.cgi?id=109364

        Reviewed by Simon Hausmann.

        void NetscapePlugin::platformPreInitialize() is need to be added to NetscapePluginNone.cpp.

        * WebProcess/Plugins/Netscape/NetscapePluginNone.cpp:
        (WebKit::NetscapePlugin::platformPreInitialize):
        (WebKit):

2013-02-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137328.
        http://trac.webkit.org/changeset/137328
        https://bugs.webkit.org/show_bug.cgi?id=109367

        causes memory usage to balloon if connection queue is filling
        faster than sending (Requested by kling on #webkit).

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::grow):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (CoreIPC::ArgumentEncoder::buffer):
        (ArgumentEncoder):

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

        Fix ASSERT when the Web Content Process crashes
        https://bugs.webkit.org/show_bug.cgi?id=109346

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        We need to remove ourselves as a message receiver before calling out to the client, as
        the client might want to re-add us (as Safari does).

2013-02-08  Benjamin Poulain  <bpoulain@apple.com>

        Move workerThreadCount from TestRunner to WebCore Internals
        https://bugs.webkit.org/show_bug.cgi?id=109239

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/WebPage/WebFrame.cpp: Remove a useless #include.

2013-02-08  Dean Jackson  <dino@apple.com>

        Remove use of plugInStartLabelImage
        https://bugs.webkit.org/show_bug.cgi?id=108273

        Reviewed by Simon Fraser.

        Remove any use of plugInStartLabelImage. While there, implement plugInStartLabelTitle
        and plugInStartLabelSubtitle to return the values from the client.
        implement them.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Remove callback and entry from client structure.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Remove plugInStartLabelImage.
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelTitle): Ask the client bundle for value.
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelSubtitle): Ditto.

2013-02-08  Dean Jackson  <dino@apple.com>

        Snapshotted plug-in should use shadow root
        https://bugs.webkit.org/show_bug.cgi?id=108284

        Reviewed by Simon Fraser.

        Take two of this commit! We no longer have any need for plugInStartLabelImage.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Remove plugInStartLabelImage.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.

2013-02-08  Dean Jackson  <dino@apple.com>

        Rolling out r142333 and r142337 which broke Mac Release builds.

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

        Move plug-in enumeration back to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=109337
        <rdar://problem/12015046>

        Reviewed by Andreas Kling.

        Plug-in enumeration was moved to a separate work queue to improve responsiveness, but
        doing so lead to crashes when WebKit1 would enumerate plug-ins on the main thread at the same time.
        Bug <rdar://problem/13185819> tracks fixing the responsiveness issue by spawning a plug-in process
        and have it do the enumeration.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromCarbonResources):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::connectionWillClose):
        (WebKit::WebProcessProxy::getPlugins):
        * UIProcess/WebProcessProxy.h:
        (WebCore):
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit):
        (WebKit::WebPlatformStrategies::populatePluginCache):
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2013-02-08  Dean Jackson  <dino@apple.com>

        Snapshotted plug-in should use shadow root
        https://bugs.webkit.org/show_bug.cgi?id=108284

        Reviewed by Simon Fraser.

        We no longer have any need for plugInStartLabelImage.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Remove plugInStartLabelImage.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Ditto.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Ditto.

2013-02-08  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [WK2] Fix the build on !Mac after r142314.
        https://bugs.webkit.org/show_bug.cgi?id=109327

        Reviewed by Benjamin Poulain.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPreInitialize): Add a stub for
        the newly-added function.

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

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

        Work around a bug in Flash where NSException objects can be released too early
        https://bugs.webkit.org/show_bug.cgi?id=109242
        <rdar://problem/13003470>

        Reviewed by Darin Adler.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::determineQuirks):
        Set the new plug-in quirk.

        * Shared/Plugins/PluginQuirks.h:
        Add a new plug-in quirk.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::initialize):
        Call platformPreInitialize.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        Add platformPreInitialize.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::NSException_release):
        Add new empty function.

        (WebKit::NetscapePlugin::platformPreInitialize):
        Patch -[NSException release] to be a no-op.

2013-02-08  Dean Jackson  <dino@apple.com>

        Do not register autostart for plugins from file:// (or nowhere)
        https://bugs.webkit.org/show_bug.cgi?id=108271

        Reviewed by Tim Horton.

        If the pageOrigin is the empty string don't add
        it to the auto-start origin list for snapshotting.

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

2013-02-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r142212.
        http://trac.webkit.org/changeset/142212
        https://bugs.webkit.org/show_bug.cgi?id=109255

        Causes ASSERT(!m_installed) on launch (Requested by smfr on
        #webkit).

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):
        (WebKit::PluginProcess::shouldTerminate):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2013-02-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Remove dead code after r142169
        https://bugs.webkit.org/show_bug.cgi?id=109251

        Reviewed by Benjamin Poulain.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):

2013-02-06  Gavin Barraclough  <barraclough@apple.com>

        PluginProcess should quit immediately if idle in response to low-memory notifications
        https://bugs.webkit.org/show_bug.cgi?id=109103
        <rdar://problem/12679827>

        Reviewed by Darin Adler.

        PluginProcess now initializes a MemoryPressureHandler for the process, providing
        a custom callback which will call terminate if appropriate (if the plugin is not
        currently in use).

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::lowMemoryHandler):
            - Custom callback to terminate if appropriate.
        (WebKit::PluginProcess::initializeProcess):
            - Initialize the MemoryPressureHandler.
        (WebKit::PluginProcess::shouldTerminate):
            - This method now also needs to be callable in situations where it might return false.
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
            - Added declaration for lowMemoryHandler.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
            - MemoryPressureHandler::install is now called via MemoryPressureHandler::initialize.

2013-02-07  KwangYong Choi  <ky0.choi@samsung.com>

        Fix build warning after r142017
        https://bugs.webkit.org/show_bug.cgi?id=109119

        Reviewed by Alexey Proskuryakov.

        Use UNUSED_PARAM macro to fix -Wunused-parameter build warning.

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

2013-02-07  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Cleanup command-line defines
        https://bugs.webkit.org/show_bug.cgi?id=109213

        Reviewed by Xan Lopez.

        * GNUmakefile.am:  Remove references to flags that are now
        provided by autotoolsconfig.h.

2013-02-07  Benjamin Poulain  <bpoulain@apple.com>

        Move pauseAnimation/pauseTransition from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109107

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):

2013-02-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Removal of non coordinated graphics code path from WK2 EFL
        https://bugs.webkit.org/show_bug.cgi?id=109165

        Reviewed by Anders Carlsson.

        Removed non coordinated graphics code path from WK2 EFL as it was not used by
        anyone and caused a lot of preprocessor macros in the code making it less readable.

        * UIProcess/API/efl/EvasGLContext.cpp:
        * UIProcess/API/efl/EvasGLContext.h:
        (WebKit::EvasGLContext::context):
        * UIProcess/API/efl/EvasGLSurface.cpp:
        * UIProcess/API/efl/EvasGLSurface.h:
        (WebKit::EvasGLSurface::surface):

            Removed also 'inline' and 'const' keywords from functions declaration,
            as both EvasGLContext::context() and EvasGLSurface::surface()
            are defined inside their classes and return mutable pointer.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::transformFromScene):
        (EwkView::transformToScreen):
        (EwkView::coordinatedGraphicsScene):
        (EwkView::displayTimerFired):
        (EwkView::scheduleUpdateDisplay): Renamed from EwkView::update().
        (EwkView::exitAcceleratedCompositingMode):
        (EwkView::handleEvasObjectCalculate):
        (EwkView::takeSnapshot):
        * UIProcess/API/efl/EwkView.h:
        (WebCore):
        (EwkView):
        * UIProcess/API/efl/SnapshotImageGL.cpp:
        (getImageSurfaceFromFrameBuffer):
        * UIProcess/API/efl/SnapshotImageGL.h:
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::setViewNeedsDisplay):
        (WebKit::PageClientBase::updateAcceleratedCompositingMode):
        * UIProcess/efl/PageClientBase.h:
        (PageClientBase):
        * UIProcess/efl/PageClientDefaultImpl.cpp:
        (WebKit::PageClientDefaultImpl::didCommitLoad):
        (WebKit::PageClientDefaultImpl::updateViewportSize):
        (WebKit::PageClientDefaultImpl::didChangeViewportProperties):
        (WebKit::PageClientDefaultImpl::didChangeContentsSize):
        (WebKit::PageClientDefaultImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientDefaultImpl.h:
        (PageClientDefaultImpl):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::didCommitLoad):
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        (WebKit::PageClientLegacyImpl::didChangeViewportProperties):
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        (WebKit::PageClientLegacyImpl::pageDidRequestScroll):
        (WebKit::PageClientLegacyImpl::didRenderFrame):
        (WebKit::PageClientLegacyImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientLegacyImpl.h:
        (PageClientLegacyImpl):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (PageLoadClientEfl):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):

2013-02-06  Sam Weinig  <sam@webkit.org>

        Make WebPageProxy and sub-objects MessageReceivers
        https://bugs.webkit.org/show_bug.cgi?id=108785

        Reviewed by Anders Carlsson.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::~CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::~DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::contentsRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::WebFullScreenManagerProxy):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebFullScreenManagerProxy):
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::invalidate):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::inspector):
        (WebKit::WebPageProxy::fullScreenManager):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
        (WebKit::WebFullScreenManagerProxy::invalidate):

2013-02-07  Zan Dobersek  <zdobersek@igalia.com>

        [Autotools] Remove uses of Automake FARSTREAM_(CFLAGS|LIBS) variables, USE_FARSTREAM conditional
        https://bugs.webkit.org/show_bug.cgi?id=109198

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Remove the FARSTREAM_(CFLAGS|LIBS) variables, they're
        not set to anything.

2013-02-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2][EFL] Add WKView methods related to background drawing
        https://bugs.webkit.org/show_bug.cgi?id=109159

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewSetDrawsBackground):
        (WKViewGetDrawsBackground):
        (WKViewSetDrawsTransparentBackground):
        (WKViewGetDrawsTransparentBackground):
         * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setDrawsBackground):
        (WebKit):
        (WebKit::WebView::drawsBackground):
        (WebKit::WebView::setDrawsTransparentBackground):
        (WebKit::WebView::drawsTransparentBackground):
        * UIProcess/efl/WebView.h:
        (WebView):
       * UIProcess/API/C/efl/WKView.h:

            New methods added

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::displayTimerFired):
        (EwkView::handleEvasObjectColorSet):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_draws_page_background_set):

            Remove the unneeded m_setDrawsBackground and replace
            it with the WKView setting.

2013-02-07  Christophe Dumez  <dchris@gmail.com>

        [EFL][WK2] EWK2UnitTestBase.ewk_view_page_contents_get API test is sometimes failing
        https://bugs.webkit.org/show_bug.cgi?id=108634

        Reviewed by Alexey Proskuryakov.

        Use more robust data validation in EWK2UnitTestBase.ewk_view_page_contents_get
        so that the test passes consistently. The issue was that the header before the
        data includes the current date. Depending on the date, the data may start at a
        different index in the returned string. Instead of hardcoding the data start
        index in the test, we now use String::contains().

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

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142141.
        http://trac.webkit.org/changeset/142141
        https://bugs.webkit.org/show_bug.cgi?id=108990

        Reland r142112, will update Chromium expectations and create a
        Chromium bug instead for the crash.

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

2013-02-07  Gavin Peters  <gavinp@chromium.org>

        Unreviewed, rolling out r142112.
        http://trac.webkit.org/changeset/142112
        https://bugs.webkit.org/show_bug.cgi?id=108990

        The new test scrollingcoordinator/non-fast-scrollable-region-transformed- iframe.html crashes on Lion.

        See http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=scrollingcoordinator%2Fnon-fast-scrollable-region-transformed-iframe.html

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::updateOffsetFromViewportForSelf):
        (WebKit):
        (WebKit::updateOffsetFromViewportForLayer):
        (WebKit::CoordinatedLayerTreeHost::syncFixedLayers):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):

2013-02-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [CoordinatedGraphics] Use ScrollingCoordinator to track fixed layers
        https://bugs.webkit.org/show_bug.cgi?id=108990

        Reviewed by Noam Rosenthal.
        Signed off for WebKit2 by Simon Fraser.

        WebCore keeps ScrollingCoordinator up-to-date about whether layers are fixed or not, so we
        don't need to traverse the tree every frame to get this information.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: remove
        syncFixedLayers() and its helper functions. Those were used to identify the fixed layers
        and are not needed anymore.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl): enable the scrolling coordinator usage for
        Coordinated Graphics.

2013-02-07  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Fold QtWebPageLoadClient into QQuickWebViewPrivate and move to C API.
        https://bugs.webkit.org/show_bug.cgi?id=108473

        Reviewed by Simon Hausmann.
        Signed off for WebKit2 by Benjamin Poulain.

        This patch removes the QtWebPageLoadClient and moves the functionality into the
        QQuickWebViewPrivate as most callback methods are calling the private webview
        indirectly anyway.

        The patch also moves as much of the functionality to the C API as is possible with
        the current C API.

        * Target.pri:
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewPrivate::didStartProvisionalLoadForFrame):
        (QQuickWebViewPrivate::didReceiveServerRedirectForProvisionalLoadForFrame):
        (QQuickWebViewPrivate::didFailLoad):
        (QQuickWebViewPrivate::didCommitLoadForFrame):
        (QQuickWebViewPrivate::didFinishLoadForFrame):
        (QQuickWebViewPrivate::didSameDocumentNavigationForFrame):
        (QQuickWebViewPrivate::didReceiveTitleForFrame):
        (QQuickWebViewPrivate::didStartProgress):
        (QQuickWebViewPrivate::didChangeProgress):
        (QQuickWebViewPrivate::didFinishProgress):
        (QQuickWebViewPrivate::didChangeBackForwardList):
        (QQuickWebViewPrivate::setTransparentBackground):
        (QQuickWebViewPrivate::transparentBackground):
        (QQuickWebViewPrivate::loadProgressDidChange):
        * UIProcess/API/qt/qquickwebview_p.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (WebKit):
        (QQuickWebViewPrivate):
        * UIProcess/qt/QtWebError.cpp:
        (WebKit::QtWebError::url):
        * UIProcess/qt/QtWebPageLoadClient.cpp: Removed.
        * UIProcess/qt/QtWebPageLoadClient.h: Removed.

2013-02-05  Eunmi Lee  <eunmi15.lee@samsung.com> and Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Kenneth Rohde Christiansen, signed-off by Benjamin Poulain.

        Initialize and shutdown the EFL libraries in the ewk_main.cpp for
        UIProcess and WebProcessMainEfl.cpp for WebProcess.

        This allows us to shut down the libraries in a proper way, since
        RunLoop persist until the process exits.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2013-02-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::processDidClose):
        m_process can't be initialized nullptr yet. Use 0 instead of nullptr.

2013-02-07  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt][WK2] Fold QtWebPageFindClient into QQuickWebViewPrivate
        https://bugs.webkit.org/show_bug.cgi?id=108920

        Reviewed by Jocelyn Turcotte, signed off for WK2 by Benjamin.

        Employ the pattern suggested by Jocelyn to simply implement the C
        callbacks directly using static functions.

        * Target.pri:
        * UIProcess/API/qt/qquickwebview.cpp:
        (toQQuickWebViewPrivate):
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewPrivate::didFindString):
        (QQuickWebViewPrivate::didFailToFindString):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/qt/QtWebPageFindClient.cpp: Removed.
        * UIProcess/qt/QtWebPageFindClient.h: Removed.

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

        Make CustomProtocolManagerProxy a MessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=108787

        Reviewed by Anders Carlsson.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::addMessageReceiver):
        (WebKit::ChildProcessProxy::removeMessageReceiver):
        (WebKit::ChildProcessProxy::dispatchMessage):
        (WebKit::ChildProcessProxy::dispatchSyncMessage):
        * Shared/ChildProcessProxy.h:
        Sink the MessageReceiverMap down into the ChildProcessProxy.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::DownloadProxyMap):
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit::DownloadProxyMap::downloadFinished):
        (WebKit::DownloadProxyMap::processDidClose):
        * UIProcess/Downloads/DownloadProxyMap.h:
        Pass the ChildProcessProxy rather than the MessageReceiverMap to the constructor.

        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.messages.in:
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::CustomProtocolManagerProxy):
        Convert to a MessageReceiver.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::createDownloadProxy):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        Remove direct chaining to CustomProtocolManagerProxy.

2013-02-06  Enrica Casucci  <enrica@apple.com>

        ASSERT(!m_findPageOverlay) in FindController.cpp after r140769.
        https://bugs.webkit.org/show_bug.cgi?id=109105.

        Reviewed by Tim Horton.

        In r140769 we changed the way the overlay is destroyed,
        therefore the assert is no longer valid and should be removed.

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

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

        Dispatch storage manager messages to the storage work queue
        https://bugs.webkit.org/show_bug.cgi?id=109099

        Reviewed by Andreas Kling.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::didReceiveMessageOnConnectionWorkQueue):
        (WebKit::StorageManager::dispatchMessageOnStorageManagerQueue):
        (WebKit):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):

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

        Pass the document source URL to the pluginLoadPolicy callback
        https://bugs.webkit.org/show_bug.cgi?id=109084
        <rdar://problem/13154516>

        Reviewed by Andreas Kling.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::pluginLoadPolicy):
        * UIProcess/WebUIClient.h:
        (WebUIClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        (WebKit::WebPage::canPluginHandleResponse):

2013-02-06  Alexey Proskuryakov  <ap@apple.com>

        Get rid of unneeded writeable preferences.

        Reviewed by Anders Carlsson.

        com.apple.HIToolbox.plist and com.apple.WebProcess.plist were made writeable very
        early in WebKit2 development, before we moved a lot of functionality to UI process.
        They don't appear to be needed any more.

        Note that we do not even need to allow reading for com.apple.WebProcess.plist -
        it's read at process initialization before we enter the sandbox, and services
        have a different plist anyway.

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

2013-02-06  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Assertion failure on MiniBrowser exit
        https://bugs.webkit.org/show_bug.cgi?id=108932

        Reviewed by Anders Carlsson.

        WorkQueue is now refcounted after r141497, so increase ref
        count when a new job is scheduled and unref it when it finishes.

        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::performWork):
        (WorkQueue::performTimerWork):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):

2013-02-06  Simon Hausmann  <simon.hausmann@digia.com>, Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [WK2][Win] Fix build after MessageID.h related changes and after r141619.
        https://bugs.webkit.org/show_bug.cgi?id=108612

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/WorkQueue.h:
        (WorkQueue::WorkItemWin::queue):
        (WorkItemWin):
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Platform/win/WorkQueueWin.cpp:
        (WorkQueue::handleCallback):
        (WorkQueue::performWorkOnRegisteredWorkThread):

2013-02-06  Mike West  <mkwst@chromium.org>

        Add an ENABLE_NOSNIFF feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=109029

        Reviewed by Jochen Eisinger.

        This new flag will control the behavior of 'X-Content-Type-Options: nosniff'
        when processing script and other resource types.

        * Configurations/FeatureDefines.xcconfig:

2013-02-06  Marja Hölttä  <marja@chromium.org>

        Take referrer policy into account when clearing the referrer header
        https://bugs.webkit.org/show_bug.cgi?id=86000

        Reviewed by Alexey Proskuryakov.

        The referrer should only be cleared when doing a https -> http redirect,
        if the policy is "default". Otherwise the referrer should be left intact.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start):
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        * NetworkProcess/SchedulableLoader.h:
        (WebKit::SchedulableLoader::shouldClearReferrerOnHTTPSToHTTPRedirect):
        (SchedulableLoader):
        * NetworkProcess/SyncNetworkResourceLoader.cpp:
        (WebKit::SyncNetworkResourceLoader::start):
        * NetworkProcess/mac/RemoteNetworkingContext.h:
        (WebKit::RemoteNetworkingContext::create):
        (RemoteNetworkingContext):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::shouldClearReferrerOnHTTPSToHTTPRedirect):
        (WebKit):
        (WebKit::RemoteNetworkingContext::RemoteNetworkingContext):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::shouldClearReferrerOnHTTPSToHTTPRedirect):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleSubresourceLoad):
        (WebKit::WebResourceLoadScheduler::schedulePluginStreamLoad):
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/Network/WebResourceLoadScheduler.h:
        (WebResourceLoadScheduler):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):

2013-02-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Encapsulate Ewk View evas smart object code inside EwkView class
        https://bugs.webkit.org/show_bug.cgi?id=108062

        Reviewed by Kenneth Rohde Christiansen.

        The Ewk View implementation is encapsulated within EwkView class.
        Besides multiple refactoring of Ewk View evas smart object code was made.

        * UIProcess/API/C/efl/WKView.cpp:
        (createWKView): 

            Aux function to share WKView creation implementation.

        * UIProcess/API/efl/EwkView.cpp:
        (smartDataChanged):
        (defaultSmartClassInstance):
        (toSmartData):
        (EwkView::initSmartClassInterface):
        (EwkView::toEvasObject):
        (EwkView::smartData):

            Renamed and moved here from ewk_view.

        (EwkViewEventHandler):
        (EwkViewEventHandler::subscribe):
        (EwkViewEventHandler::unsubscribe):
        (::handleEvent):

            Added a new template class to encapsulate Ewk View Evas events handling.

        (EwkView::EwkView):
        (EwkView::~EwkView):

            Constructor and desctructor are private.

        (EwkView::createEvasObject):

            Added factory function for ewk view evas objects creation.

        (EwkView::handleEvasObjectAdd):
        (EwkView::handleEvasObjectDelete):
        (EwkView::handleEvasObjectResize):
        (EwkView::handleEvasObjectMove):
        (EwkView::handleEvasObjectCalculate):
        (EwkView::handleEvasObjectShow):
        (EwkView::handleEvasObjectHide):
        (EwkView::handleEvasObjectColorSet):

            Evas_Smart_Class interface callbacks moved into the EwkView class.

        (EwkView::handleEwkViewFocusIn):
        (EwkView::handleEwkViewFocusOut):
        (EwkView::handleEwkViewMouseWheel):
        (EwkView::handleEwkViewMouseDown):
        (EwkView::handleEwkViewMouseUp):
        (EwkView::handleEwkViewMouseMove):
        (EwkView::handleEwkViewKeyDown):
        (EwkView::handleEwkViewKeyUp):

            Ewk_View_Smart_Class interface callback moved into the EwkView class.

        (EwkView::handleTouchDown):
        (EwkView::handleTouchUp):
        (EwkView::handleTouchMove):

            Renamed.

        (toEwkView): 

            Aux function to get the EwkView instance fromevas object.

        (isViewEvasObject):

            Aux function to check that given evas object is ewk view.

        * UIProcess/API/efl/EwkView.h:
        (EwkView::evasObject):
        (EwkView):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_smart_class_set):
        (ewk_view_smart_add):
        (ewk_view_add_with_context):
        (ewk_view_feed_touch_event):
        (Ewk_Page_Contents_Context):

        * UIProcess/API/efl/ewk_view_private.h: Removed.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewCreate):
        (WKViewCreateWithFixedLayout):
        (WKViewCreateSnapshot):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        (WebKit::ContextHistoryClientEfl::didPerformClientRedirect):
        (WebKit::ContextHistoryClientEfl::didPerformServerRedirect):
        (WebKit::ContextHistoryClientEfl::didUpdateHistoryTitle):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::processDidCrash):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::viewWidget):

             Updated due to changes in EwkView interface.

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

        [wk2] TiledCoreAnimationDrawingArea has one more layer in its CAContext when we're in the background
        https://bugs.webkit.org/show_bug.cgi?id=108992
        <rdar://problem/13087365>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea): Add storage for m_isInWindow.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateLayerHostingContext): Only set the root layer on our layer
        hosting context if we're in the window when swapping out contexts.
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Update m_isInWindow, and set the root layer
        of the layer hosting context (or unset it if we're out of the window).

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

        WebKit clients should be able to override loading of blocked plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=108968
        <rdar://problem/13154516>

        Reviewed by Sam Weinig.

        Replace the shouldInstantiatePlugin callback with a new pluginLoadPolicy which is called regardless
        of whether the plug-in is blocked or not. This lets clients override the plug-in load policy and
        force loading of blacklisted plug-ins (and vice versa).

        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath):
        * UIProcess/WebUIClient.cpp:
        (WebKit::toWKPluginLoadPolicy):
        (WebKit):
        (WebKit::toPluginModuleLoadPolicy):
        (WebKit::WebUIClient::pluginLoadPolicy):
        * UIProcess/WebUIClient.h:
        (WebUIClient):

2013-02-05  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt][WK2] Replace more uses of WebPageProxy with WKPage in QQuickWebView
        https://bugs.webkit.org/show_bug.cgi?id=108826

        Reviewed by Kenneth Rohde Christiansen and signed off for WK2 by
        Benjamin Poulain.

        This patch converts a few more usages of WebPageProxy to functions in
        the WKPage API.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewLegacyPrivate::zoomFactor):
        (QQuickWebViewLegacyPrivate::setZoomFactor):
        (QQuickWebViewExperimental::postMessage):
        (QQuickWebViewExperimental::userAgent):
        (QQuickWebViewExperimental::setUserAgent):
        (QQuickWebViewExperimental::evaluateJavaScript):
        (QQuickWebViewExperimental::findText):
        (QQuickWebView::goBack):
        (QQuickWebView::goForward):
        (QQuickWebView::stop):
        (QQuickWebView::reload):
        (QQuickWebView::setUrl):
        (QQuickWebView::canGoBack):
        (QQuickWebView::canGoForward):
        (QQuickWebView::loading):
        (QQuickWebView::title):
        (QQuickWebView::pageRef):
        (QQuickWebView::loadHtml):
        (QQuickWebView::runJavaScriptInMainFrame):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

2013-02-04  Gwang Yoon Hwang  <ryumiel@company100.net>

        Coordinated Graphics : disconnectCustomFilterProgram does not do anything.
        https://bugs.webkit.org/show_bug.cgi?id=108807

        Reviewed by Anders Carlsson.

        We need to add newly created WebCustomFilterProgramProxy to a hashset to
        disconnect when CoordinatedLayerTreeHost gets destructed.

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

2013-02-04  Benjamin Poulain  <bpoulain@apple.com>

        Kill suspendAnimation(), resumeAnimation() and numberOfActiveAnimations() from DRT/WTR; use Internals
        https://bugs.webkit.org/show_bug.cgi?id=108741

        Reviewed by Tony Chang.

        Suspending and resuming application has been useless for a one. Someone just
        "forgot" WebKit2.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):

2013-02-04  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] Implement runBeforeUnloadConfirmPanel on EFL
        https://bugs.webkit.org/show_bug.cgi?id=106979

        Reviewed by Benjamin Poulain.

        Implement runBeforeUnloadConfirmPanel() to support window.onbeforeunload.
        We can show confirmation window when beforeunload event is fired.

        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        (WebKit::PageUIClientEfl::runBeforeUnloadConfirmPanel):
        (WebKit):
        * UIProcess/efl/PageUIClientEfl.h:
        (PageUIClientEfl):

2013-02-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Introduce a WebView class as counterpart for WKViewRef
        https://bugs.webkit.org/show_bug.cgi?id=107931

        Reviewed by Anders Carlsson.

        This is just one step of the new plan for the EFL API.

        The plan is to move the public EFL-like API on top of the shared
        WK2 C API, plus a few EFL extensions (WKView class mostly).

        The EFL-like API can be seen as a convenience API which ties
        well into EFL and which makes it easy to add web experiences
        to existing and new EFL applications. It provides a smart object
        like API and a Evas_Object based view.

        For more advanced use cases, such as browser and runtime, it is
        possible to use the WK* C API, which is gives more flexibility
        while being more low level.

        The idea is that the WKView class will not depend on Evas_Object
        and X11 (future plan) unlike the current EFL-like API. This should
        make it possible to use it for cases where none of these are
        available.

        This patch introduces the WebView class which serves as our
        counterpart for the WKView class, and adds a few needed methods.

        The EwkView owns the WebView class (and will be constructing it
        in the near future when the EwkView class has been changed to
        handle all smart object related code)

        The clean up of the smart object related code as the proper
        construction of EwkView and WebView will be done in follow-up
        patches.

        * UIProcess/API/C/efl/WKAPICastEfl.h:
        (WebKit):

            The WKView API is not based on WebView and not Evas_Object*

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewCreate):
        (WKViewCreateWithFixedLayout):
        (WKViewInitialize):
        (WKViewGetPage):
        (WKViewSetThemePath):
        (WKViewSuspendActiveDOMObjectsAndAnimations):
        (WKViewResumeActiveDOMObjectsAndAnimations):
        (WKViewGetEvasObject):
        (WKViewCreateSnapshot):

            Add a few new WKView EFL C methods, and update existing
            methods to reflect that the WKViewRef is now a WebView*

            The construction methods will be rewritten when the smart
            object construction has been solved.

        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/efl/WebView.cpp: Added.
        (WebKit):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::initialize):
        (WebKit::WebView::setThemePath):
        (WebKit::WebView::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebView::resumeActiveDOMObjectsAndAnimations):
        * UIProcess/efl/WebView.h: Added.
        (WebKit):
        (WebView):
        (WebKit::WebView::pageRef):
        (WebKit::WebView::evasObject):
        (WebKit::WebView::page):
        (WebKit::WebView::type):

            Add a new WebKit::WebView class for EFL.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::~EwkView):
        (EwkView::wkPage):
        (EwkView::setThemePath):
        (EwkView::createGLSurface):

            Base methods on C API instead of internal API as much
            as currently possible.

        * UIProcess/API/efl/EwkView.h:
        (WebKit):
        (WebView):
        (EwkView):
        (EwkView::wkView):
        (EwkView::page):
        * UIProcess/API/efl/ewk_view.cpp:
        (createEwkView):
        (ewk_view_base_add):
        (ewk_view_smart_add):

            Modify to return the EwkView class for now.

        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

            Updated due to changed API.

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

        Set up the storage manager as a connection queue
        https://bugs.webkit.org/show_bug.cgi?id=108879

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::processWillOpenConnection):
        Add the storage manager as a connection queue client.

        (WebKit::StorageManager::processWillCloseConnection):
        Remove the storage manager.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processWillOpenConnection):
        Call the storage manager.

        (WebKit::WebContext::processWillCloseConnection):
        Call the storage manager.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        Call the context.

        (WebKit::WebProcessProxy::connectionWillClose):
        Call the context.

        (WebKit::WebProcessProxy::didFinishLaunching):
        Remove a comment.

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

        Send message when creating and destroying StorageAreaProxy objects
        https://bugs.webkit.org/show_bug.cgi?id=108874

        Reviewed by Sam Weinig.

        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::fromSecurityOrigin):
        * Shared/SecurityOriginData.h:
        (SecurityOriginData):
        Add helper function for creating a SecurityOriginData object given a WebCore::SecurityOrigin object.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::generateStorageAreaID):
        New function to create a unique storage area ID.

        (WebKit::StorageAreaProxy::StorageAreaProxy):
        Send a CreateStorageArea message.
        
        (WebKit::StorageAreaProxy::~StorageAreaProxy):
        Send a DestroyStorageArea message.

        (WebKit::StorageAreaProxy::contains):
        Remove this assertion for now, it fires too often.
        
        * WebProcess/Storage/StorageNamespaceProxy.h:
        (WebKit::StorageNamespaceProxy::storageNamespaceID):
        Add getter.

2013-02-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Use C API inside EwkView
        https://bugs.webkit.org/show_bug.cgi?id=108825

        Reviewed by Anders Carlsson.

        A straight-forward port towards the C API.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView): Use C API for common default preferences.
        (EwkView::wkPage): Make it const and remove useless comment.
        (EwkView::deviceScaleFactor):
        (EwkView::title):
        (EwkView::customTextEncodingName):
        (EwkView::setCustomTextEncodingName):
        (EwkView::informURLChange):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):

2013-02-04  Alexey Proskuryakov  <ap@apple.com>

        Remove an unnecessary sandbox rule.

        Reviewed by Sam Weinig.

        * WebProcess/com.apple.WebProcess.sb.in: We already have a file-read rule for
        /Library/Managed Preferences, no need for another rule for something inside it.

2013-02-04  Brady Eidson  <beidson@apple.com>

        WebProcess crashes handling repeated NetworkProcess crashes.
        <rdar://problem/13049867> and https://bugs.webkit.org/show_bug.cgi?id=108861

        Reviewed by Alexey Proskuryakov.

        - Rename the concept of "unschedulable loader" to "internally failed loader"
        - When the NetworkProcess crashes, add all outstanding ResourceLoaders into the unschedulable pile.
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        (WebKit::WebResourceLoadScheduler::scheduleInternallyFailedLoad):
        (WebKit::WebResourceLoadScheduler::internallyFailedLoadTimerFired):
        (WebKit::WebResourceLoadScheduler::remove): Also remove a non-helpful, out of date comment.
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
        * WebProcess/Network/WebResourceLoadScheduler.h:

        WebResourceLoader no longer responds to crashes directly, but now exposes its WebCore ResourceLoader:
        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.h:
        (WebKit::WebResourceLoader::resourceLoader):

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

        Update message generation to use the new queue client semantics
        https://bugs.webkit.org/show_bug.cgi?id=108865

        Reviewed by Andreas Kling.

        * Scripts/webkit2/messages.py:
        (connection_work_queue_message_statement):
        (async_message_statement):
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::didReceiveMessageOnConnectionWorkQueue):
        * Shared/mac/SecItemShim.h:
        (SecItemShim):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.h:
        (SecItemShimProxy):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebProcess.h:
        (WebProcess):

2013-02-04  Abhishek Arya  <inferno@chromium.org>

        Add ASSERT_WITH_SECURITY_IMPLICATION to detect out of bounds access
        https://bugs.webkit.org/show_bug.cgi?id=108668

        Reviewed by Eric Seidel.

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::operator[]):

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

        Change didReceiveMessageOnConnectionWorkQueue semantics
        https://bugs.webkit.org/show_bug.cgi?id=108859

        Reviewed by Sam Weinig.

        Change didReceiveMessageOnConnectionWorkQueue to take a reference to an
        OwnPtr<MessageDecoder>. This lets queue clients handle a message later, on a different
        work queue for example. Also, get rid of the didHandleMessage boolean, since taking ownership
        of the decoder implicitly means that the message was handled.
        
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/CoreIPC/Connection.h:
        (QueueClient):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::didReceiveMessageOnConnectionWorkQueue):
        * Shared/mac/SecItemShim.h:
        (SecItemShim):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageManager):
        (WebKit::StorageManager::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/Storage/StorageManager.h:
        (WebKit):
        (StorageManager):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.h:
        (SecItemShimProxy):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebProcess.h:
        (WebProcess):

2013-02-04  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12884778> Sandbox violation due to MediaAccessibility code trying to access ~/Library/Preferences/com.apple.mediaaccessibility.plist

        Reviewed by Sam Weinig.

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

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

        Add didCloseOnConnectionWorkQueue to Connection::QueueClient
        https://bugs.webkit.org/show_bug.cgi?id=108853

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::connectionDidClose):
        * Platform/CoreIPC/Connection.h:
        (QueueClient):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::didCloseOnConnectionWorkQueue):
        * Shared/mac/SecItemShim.h:
        (SecItemShim):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::didCloseOnConnectionWorkQueue):
        (WebKit):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didCloseOnConnectionWorkQueue):
        (WebKit):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didCloseOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.h:
        (SecItemShimProxy):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::didCloseOnConnectionWorkQueue):
        (WebKit):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didCloseOnConnectionWorkQueue):
        (WebKit):
        * WebProcess/WebProcess.h:
        (WebProcess):

2013-02-04  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ 'make dist' in preparation for the 1.11.5 release.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2013-02-04  Enrica Casucci  <enrica@apple.com>

        Add specific EditActions for Bold and Italic commands.
        https://bugs.webkit.org/show_bug.cgi?id=108842.
        <rdar://problem/13098252>

        Reviewed by Ryosuke Niwa.

        * UIProcess/WebEditCommandProxy.cpp:
        (WebKit::WebEditCommandProxy::nameForEditAction):

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

        Use a separate queue for the connection watchdog callback in the web process
        https://bugs.webkit.org/show_bug.cgi?id=108844

        Reviewed by Andreas Kling.

        Don't pass the connection work queue to the didCloseOnConnectionWorkQueue callback.
        Instead, create a new, temporary work queue where the exit call will be dispatched to.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::connectionDidClose):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):

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

        Allow TiledCoreAnimationDrawingArea overlay layers to become tiled
        https://bugs.webkit.org/show_bug.cgi?id=108729
        <rdar://problem/13047546>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea): Add didCommitChangesForLayer and storage for the
        current PlatformLayer corresponding to m_pageOverlayLayer.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers): Update the TileCache's visible rect.
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Forward exposed rect changes to the page overlay layer, if it's tiled.
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged): Forward scrollability changes to the page overlay layer, if it's tiled.
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer): Allow the page overlay layer to become tiled. Update its exposed rect and whether or not it respects the exposed rect if it's tiled upon creation.
        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer): If a GraphicsLayer's platform layer changes (because it switched to or from a tiled layer), reparent it. If it's switching to a tiled layer, update the exposed rect and whether or not it should respect the exposed rect.

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

        Use UNUSED_PARAM instead of C style comments.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createStorageArea):

2013-02-04  Christophe Dumez  <dchris@gmail.com>

        [EFL][WK2] Stop using libsoup in ewk_url_scheme_request
        https://bugs.webkit.org/show_bug.cgi?id=108816

        Reviewed by Anders Carlsson.

        As we are trying to minimize use of external dependencies in our WK2 EFL
        API implementation, we should stop using libsoup in
        ewk_url_scheme_request and use the WK2 C API instead.

        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (EwkUrlSchemeRequest::EwkUrlSchemeRequest):

2013-02-04  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Weird stripe at the end of the page
        https://bugs.webkit.org/show_bug.cgi?id=108820

        Reviewed by Noam Rosenthal.

        The page scroll bound was artificially enlarged by one causing the artifact appearance.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::boundContentsPositionAtScale):

2013-02-04  David Kilzer  <ddkilzer@apple.com>

        Sort WebKit2 Xcode project file

        * WebKit2.xcodeproj/project.pbxproj:

2013-02-04  Simon Hausmann  <simon.hausmann@digia.com>

        [WK2][Qt] Replace WebPageGroup usage for user scripts with WKPageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=108651

        Reviewed by Sam Weinig.

        It's straight-forward port towards the C API.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (readUserScript):
        (QQuickWebViewPrivate::updateUserScripts):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

2013-02-04  Balazs Kelemen  <kbalazs@webkit.org>

        [Soup] Wrap SoupSession by NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=108615

        Reviewed by Alexey Proskuryakov.

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

2013-02-03  David Kilzer  <ddkilzer@apple.com>

        Upstream ENABLE_PDFKIT_PLUGIN settting
        <http://webkit.org/b/108792>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig: Disable PDFKIT_PLUGIN
        on iOS since PDFKit is a Mac-only framework.

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

        Silently block one more directory needed for NSApplication initialization.

        Reviewed by Sam Weinig.

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

2013-02-03  KwangYong Choi  <ky0.choi@samsung.com>

        Fix build warning after r141648
        https://bugs.webkit.org/show_bug.cgi?id=108784

        Reviewed by Kentaro Hara.

        Fix -Wunused-parameter build warning.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createStorageArea):
        (WebKit::StorageManager::destroyStorageArea):

2013-02-03  Joanmarie Diggs  <jdiggs@igalia.com>

        [GTK] Make distcheck fails
        https://bugs.webkit.org/show_bug.cgi?id=108756

        Reviewed by Kentaro Hara.

        * GNUmakefile.list.am: Remove header files which no longer exist

2013-02-02  Sam Weinig  <sam@webkit.org>

        Remove more LegacyReceivers
        https://bugs.webkit.org/show_bug.cgi?id=108758

        Reviewed by Anders Carlsson.

        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.messages.in:
        * UIProcess/WebCookieManagerProxy.cpp:
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebCookieManagerProxy.messages.in:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.messages.in:
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (RemoteLayerTreeHost):
        * UIProcess/mac/RemoteLayerTreeHost.messages.in:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        (WebApplicationCacheManager):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.messages.in:
        * WebProcess/Cookies/WebCookieManager.cpp:
        * WebProcess/Cookies/WebCookieManager.h:
        (WebCookieManager):
        * WebProcess/Cookies/WebCookieManager.messages.in:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in:

2013-02-02  Sam Weinig  <sam@webkit.org>

        Convert CustomProtocolManagerProxy, CustomProtocolManager and AuthenticationManager to be non-LegacyReceivers
        https://bugs.webkit.org/show_bug.cgi?id=108757

        Reviewed by Anders Carlsson.

        * Shared/Authentication/AuthenticationManager.cpp:
        * Shared/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * Shared/Authentication/AuthenticationManager.messages.in:
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in:
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        (CustomProtocolManagerProxy):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.messages.in:
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:

2013-02-02  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_file_chooser_request
        https://bugs.webkit.org/show_bug.cgi?id=107811

        Reviewed by Sam Weinig.

        Use C API inside ewk_file_chooser_request instead of
        accessing the internal C++ classes directly, to
        avoid violating API layering.

        * UIProcess/API/efl/ewk_file_chooser_request.cpp:
        (EwkFileChooserRequest::EwkFileChooserRequest):
        (EwkFileChooserRequest::~EwkFileChooserRequest):
        (EwkFileChooserRequest::allowMultipleFiles):
        (EwkFileChooserRequest::acceptedMIMETypes):
        (EwkFileChooserRequest::cancel):
        (EwkFileChooserRequest::chooseFiles):
        (ewk_file_chooser_request_accepted_mimetypes_get):
        (ewk_file_chooser_request_files_choose):
        (ewk_file_chooser_request_file_choose):
        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
        (EwkFileChooserRequest::create):
        (EwkFileChooserRequest):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::runOpenPanel):

2013-02-02  Sam Weinig  <sam@webkit.org>

        Stop keeping a frame tree in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=81728

        Reviewed by Oliver Hunt.

        This patch removes the parent/child relationships of WebFrameProxys
        in the UIProcess

        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameCopyChildFrames):
        (WKFrameGetParentFrame):
        * UIProcess/API/C/WKFrame.h:
        Null out the implementations of WKFrameCopyChildFrames and WKFrameGetParentFrame,
        but keep them around as their symbols are still needed for nightlies.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy):
        (WebKit::WebFrameProxy::disconnect):
        * UIProcess/WebFrameProxy.h:
        Remove parent/child connections.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCreateSubframe):
        (WebKit::WebPageProxy::didRemoveFrameFromHierarchy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didSaveToPageCache):
        (WebKit::WebFrameLoaderClient::didRestoreFromPageCache):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createSubframe):
        Remove/Update messages that only served to update the parent/child connection.

2013-02-02  Sam Weinig  <sam@webkit.org>

        Make it possible to modify the connection from ChildProcessProxy subclasses.

        Reviewed by Anders Carlsson.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::ChildProcessProxy):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        (WebKit::ChildProcessProxy::clearConnection):
        (WebKit::ChildProcessProxy::connectionWillOpen):
        (WebKit::ChildProcessProxy::connectionWillClose):
        * Shared/ChildProcessProxy.h:
        (ChildProcessProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::connectionWillOpen):
        (WebKit::WebProcessProxy::connectionWillClose):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2013-02-02  David Kilzer  <ddkilzer@apple.com>

        Upstream iOS FeatureDefines
        <http://webkit.org/b/108753>

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:
        - ENABLE_DEVICE_ORIENTATION: Add iOS configurations.
        - ENABLE_PLUGIN_PROXY_FOR_VIDEO: Ditto.
        - FEATURE_DEFINES: Add ENABLE_PLUGIN_PROXY_FOR_VIDEO.  Add
          PLATFORM_NAME variant to reduce future merge conflicts. 

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

        [Qt][WK2] Unreviewed buildfix after r141648.

        * DerivedSources.pri:

2013-02-02  Zan Dobersek  <zdobersek@igalia.com>

        Follow-up to r141682. Adding build targets for the files that should be generated from the new message.in file.

        Unreviewed.

        * GNUmakefile.list.am:

2013-02-01  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r141648.

        * GNUmakefile.am: Add UIProcess/Storage to the list of paths that
        should be searched for *.messages.in files.

2013-02-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix after r141648

        Needs to add StorageManager.messages.in to CMakeLists.txt.

        * CMakeLists.txt:

2013-02-01  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for CustomProtocolManagerMac after r141658.

        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::supplementName): I accidentally typed "const" twice twice.

2013-02-01  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Use light supplement names instead of static AtomicStrings
        https://bugs.webkit.org/show_bug.cgi?id=108570

        Reviewed by Anders Carlsson.

        Since all the supplement names are just string literals and are all different,
        we can just use their pointer as the key in the supplement hashmaps.

        This is lighter and faster than using AtomicString. WebCore already moved to this
        in Supplementable.

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::addSupplement):
        (NetworkProcess):
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::supplementName):
        * Shared/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::supplementName):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::supplementName):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::supplementName):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::supplementName):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::supplementName):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::supplementName):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::supplementName):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::supplementName):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::supplementName):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::supplementName):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::supplementName):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        (WebApplicationCacheManager):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::supplementName):
        * WebProcess/Cookies/WebCookieManager.h:
        (WebCookieManager):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::supplementName):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::supplementName):
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        (WebMediaCacheManager):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::supplementName):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::supplementName):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        (WebResourceCacheManager):
        * WebProcess/Storage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::supplementName):
        * WebProcess/Storage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::supplementName):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::addSupplement):
        (WebProcess):

2013-02-01  Benjamin Poulain  <bpoulain@apple.com>

        Clean the String->AtomicString conversion for AnimationController::pauseAnimationAtTime
        https://bugs.webkit.org/show_bug.cgi?id=108558

        Reviewed by Dean Jackson.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFramePauseAnimationOnElementWithId):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::pauseAnimationOnElementWithId):
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):

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

        More work on UI side storage
        https://bugs.webkit.org/show_bug.cgi?id=108700

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        Add StorageManager.messages.in.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::didReceiveMessageOnConnectionWorkQueue):
        Call the right function.

        (WebKit::StorageManager::createStorageArea):
        (WebKit::StorageManager::destroyStorageArea):
        Add stubs.

        * UIProcess/Storage/StorageManager.messages.in: Added.
        Add new messages files.

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

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::~StorageAreaProxy):
        Add another FIXME.

        (WebKit::StorageAreaProxy::canAccessStorage):
        (WebKit::StorageAreaProxy::incrementAccessCount):
        (WebKit::StorageAreaProxy::decrementAccessCount):
        Implement these.

2013-02-01  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Gtk] [WK2] Fix build after r141619
        https://bugs.webkit.org/show_bug.cgi?id=108687

        Reviewed by Benjamin Poulain.

        Take a reference instead of a pointer for decoding functions.

        * Platform/gtk/SharedMemoryGtk.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (CoreIPC::decodeImage):
        (CoreIPC::decodeDataObject):
        (CoreIPC::::decode):
        (CoreIPC::decodeGKeyFile):
        (CoreIPC::decode):
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/gtk/LayerTreeContextGtk.cpp:
        (WebKit::LayerTreeContext::decode):

2013-02-01  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [EFL] [WK2] Fix build after r141619
        https://bugs.webkit.org/show_bug.cgi?id=108683

        Reviewed by Benjamin Poulain.

        Take a reference instead of a pointer for decoding functions.

        * Shared/WebBatteryStatus.cpp:
        (WebKit::WebBatteryStatus::Data::decode):
        * Shared/WebBatteryStatus.h:
        (Data):
        * Shared/WebNetworkInfo.cpp:
        (WebKit::WebNetworkInfo::Data::decode):
        * Shared/WebNetworkInfo.h:
        (Data):
        * Shared/cairo/LayerTreeContextCairo.cpp:
        (WebKit::LayerTreeContext::decode):
        * Shared/efl/LayerTreeContextEfl.cpp:
        (WebKit::LayerTreeContext::decode):
        * Shared/soup/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::decode):
        * Shared/soup/PlatformCertificateInfo.h:
        (PlatformCertificateInfo):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decodePlatformData):

2013-02-01  Brady Eidson  <beidson@apple.com>

        Clean up WebArchive loading with the NetworkProcess
        <rdar://problem/12695840> and https://bugs.webkit.org/show_bug.cgi?id=108673

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::servePendingRequestsForQueue):  Add new logging.
        (WebKit::HostRecord::servePendingRequests): Tweak existing logging.

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::servePendingRequests): Tweak existing logging.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Handle archive resource scheduling better,
          and add new logging to better explore archive loading behavior in the future.

2013-02-01  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

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

        Reviewed by Benjamin Poulain.

        Take a reference instead of a pointer for decoding functions.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::decode):
        (CoreIPC::decodeTimingFunction):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::Handle::decode):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        (Handle):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.h:
        (CoreIPC):
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::decode):
        * Shared/qt/PlatformCertificateInfo.h:
        (WebKit::PlatformCertificateInfo::decode):
        * Shared/qt/QtNetworkReplyData.cpp:
        (WebKit::QtNetworkReplyData::decode):
        * Shared/qt/QtNetworkReplyData.h:
        (QtNetworkReplyData):
        * Shared/qt/QtNetworkRequestData.cpp:
        (WebKit::QtNetworkRequestData::decode):
        * Shared/qt/QtNetworkRequestData.h:
        (QtNetworkRequestData):
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::decodePlatformData):

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

        Message decoding functions should take a MessageDecoder reference
        https://bugs.webkit.org/show_bug.cgi?id=108669

        Reviewed by Andreas Kling.

        Message encoding functions already take a reference instead of a pointer, so
        make the decoding functions take a reference as well.

        * Platform/CoreIPC/ArgumentCoder.h:
        (CoreIPC::ArgumentCoder::decode):
        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::decode):
        (CoreIPC::decodeStringText):
        * Platform/CoreIPC/ArgumentCoders.h:
        (CoreIPC::SimpleArgumentCoder::decode):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (CoreIPC::ArgumentDecoder::decode):
        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments0::decode):
        (CoreIPC::Arguments1::decode):
        (CoreIPC::Arguments2::decode):
        (CoreIPC::Arguments3::decode):
        (CoreIPC::Arguments4::decode):
        (CoreIPC::Arguments5::decode):
        (CoreIPC::Arguments6::decode):
        (CoreIPC::Arguments7::decode):
        (CoreIPC::Arguments8::decode):
        (CoreIPC::Arguments10::decode):
        * Platform/CoreIPC/Attachment.cpp:
        (CoreIPC::Attachment::decode):
        * Platform/CoreIPC/Attachment.h:
        (Attachment):
        * Platform/CoreIPC/DataReference.cpp:
        (CoreIPC::DataReference::decode):
        * Platform/CoreIPC/DataReference.h:
        (DataReference):
        * Platform/CoreIPC/StringReference.cpp:
        (CoreIPC::StringReference::decode):
        * Platform/CoreIPC/StringReference.h:
        (StringReference):
        * Platform/CoreIPC/mac/MachPort.h:
        (CoreIPC::MachPort::decode):
        * Platform/SharedMemory.h:
        (Handle):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::decode):
        * PluginProcess/PluginCreationParameters.h:
        (PluginCreationParameters):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        (DictionaryPopupInfo):
        * Shared/EditorState.cpp:
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (EditorState):
        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::decode):
        * Shared/FontInfo.h:
        (FontInfo):
        * Shared/LayerTreeContext.h:
        (LayerTreeContext):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (NetworkProcessCreationParameters):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (NetworkResourceLoadParameters):
        * Shared/OriginAndDatabases.cpp:
        (WebKit::OriginAndDatabases::decode):
        * Shared/OriginAndDatabases.h:
        (OriginAndDatabases):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        (PlatformPopupMenuData):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::decode):
        * Shared/Plugins/NPIdentifierData.h:
        (NPIdentifierData):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::decode):
        * Shared/Plugins/NPVariantData.h:
        (NPVariantData):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::decode):
        * Shared/PrintInfo.h:
        (PrintInfo):
        * Shared/SandboxExtension.h:
        (Handle):
        (HandleArray):
        (WebKit::SandboxExtension::Handle::decode):
        (WebKit::SandboxExtension::HandleArray::decode):
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::decode):
        * Shared/SecurityOriginData.h:
        (SecurityOriginData):
        * Shared/SessionState.cpp:
        (WebKit::SessionState::decode):
        * Shared/SessionState.h:
        (SessionState):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::decode):
        * Shared/ShareableBitmap.h:
        (Handle):
        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::Handle::decode):
        * Shared/ShareableResource.h:
        (Handle):
        * Shared/SharedWorkerProcessCreationParameters.cpp:
        (WebKit::SharedWorkerProcessCreationParameters::decode):
        * Shared/SharedWorkerProcessCreationParameters.h:
        (SharedWorkerProcessCreationParameters):
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::decode):
        * Shared/StatisticsData.h:
        (StatisticsData):
        * Shared/StringPairVector.h:
        (WebKit::StringPairVector::decode):
        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::decode):
        * Shared/UpdateInfo.h:
        (UpdateInfo):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::decode):
        * Shared/WebContextMenuItemData.h:
        (WebContextMenuItemData):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::decode):
        (CoreIPC::decodeImage):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::decode):
        * Shared/WebEvent.h:
        (WebEvent):
        (WebMouseEvent):
        (WebWheelEvent):
        (WebKeyboardEvent):
        (WebGestureEvent):
        (WebPlatformTouchPoint):
        (WebTouchEvent):
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::decode):
        * Shared/WebGeolocationPosition.h:
        (Data):
        * Shared/WebGestureEvent.cpp:
        (WebKit::WebGestureEvent::decode):
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (Data):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::decode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::decode):
        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::decode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        (WebPageGroupData):
        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::decode):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::decode):
        * Shared/WebPopupItem.h:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::decode):
        * Shared/WebPreferencesStore.h:
        (WebPreferencesStore):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::decode):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::decode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        * Shared/cf/ArgumentCodersCF.h:
        (CoreIPC):
        * Shared/mac/ArgumentCodersMac.h:
        (CoreIPC):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::decode):
        * Shared/mac/AttributedString.h:
        (AttributedString):
        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::decode):
        * Shared/mac/ColorSpaceData.h:
        (ColorSpaceData):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::decode):
        * Shared/mac/LayerTreeContextMac.mm:
        (WebKit::LayerTreeContext::decode):
        * Shared/mac/ObjCObjectGraphCoders.h:
        (WebContextObjCObjectGraphDecoder):
        (InjectedBundleObjCObjectGraphDecoder):
        * Shared/mac/ObjCObjectGraphCoders.mm:
        (WebKit::ObjCObjectGraphDecoder::baseDecode):
        (WebKit::WebContextObjCObjectGraphDecoderImpl::decode):
        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):
        (WebKit::WebContextObjCObjectGraphDecoder::decode):
        (WebKit::InjectedBundleObjCObjectGraphDecoder::decode):
        * Shared/mac/PlatformCertificateInfo.h:
        (PlatformCertificateInfo):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::decode):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (LayerProperties):
        (RemoteLayerTreeTransaction):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::decode):
        (WebKit::SandboxExtension::HandleArray::decode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::decode):
        * Shared/mac/SecItemRequestData.h:
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::decode):
        * Shared/mac/SecItemResponseData.h:
        (SecItemResponseData):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decodePlatformData):
        (CoreIPC::::decode):
        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageDecoder::decode):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::decode):
        * WebProcess/Plugins/Plugin.h:
        (Parameters):

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

        [GTK] Adapt WorkQueueGtk to the latest changes in WebKit2 after r141497
        https://bugs.webkit.org/show_bug.cgi?id=108607

        Reviewed by Anders Carlsson.

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::executeEventSource): Remove the is valid
        work queue check.
        (WorkQueue::EventSource): WorkQueue is now refcounted, so keep a
        reference when a new job is scheduled and unref it when it
        finishes.

2013-02-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141319.
        http://trac.webkit.org/changeset/141319
        https://bugs.webkit.org/show_bug.cgi?id=108629

        This patch is causing the UIProcess to hang on GTK port when
        loading plugins (Requested by chris-qBT_laptop on #webkit).

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2013-02-01  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] EwkContext should be based on C WK2 API
        https://bugs.webkit.org/show_bug.cgi?id=107666

        Reviewed by Andreas Kling.

        EwkContext should be based on C WK2 API so that API layering is not violated.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::create):
        (EwkContext::cookieManager):
        (EwkContext::ensureFaviconDatabase):
        (EwkContext::setFaviconDatabaseDirectoryPath):
        (EwkContext::addVisitedLink):
        (EwkContext::setCacheModel):
        (EwkContext::cacheModel):
        (EwkContext::setAdditionalPluginPath):
        (EwkContext::clearResourceCache):
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):

2013-02-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_auth_request
        https://bugs.webkit.org/show_bug.cgi?id=107806

        Reviewed by Andreas Kling.

        Use C API inside ewk_auth_request instead of accessing C++ internal
        classes directly, to avoid violating layering.

        * UIProcess/API/efl/ewk_auth_request.cpp:
        (EwkAuthRequest::EwkAuthRequest):
        (EwkAuthRequest::suggestedUsername):
        (EwkAuthRequest::realm):
        (EwkAuthRequest::host):
        (EwkAuthRequest::continueWithoutCredential):
        (EwkAuthRequest::authenticate):
        (EwkAuthRequest::isRetrying):
        (ewk_auth_request_authenticate):
        * UIProcess/API/efl/ewk_auth_request_private.h:
        (EwkAuthRequest::create):
        (EwkAuthRequest):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveAuthenticationChallengeInFrame):

2013-02-01  Seulgi Kim  <seulgikim@company100.net>

        [Gtk][WK2] Fix build after recent WebKit2 changes
        https://bugs.webkit.org/show_bug.cgi?id=108588

        Reviewed by Andreas Kling.

        Don't remove WorkQueue during execution.
        Following the logic on https://bugs.webkit.org/show_bug.cgi?id=108544

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::EventSource::~EventSource):
        (WorkQueue::EventSource::executeEventSource):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):
        (WorkQueue::dispatchOnTermination):

2013-02-01  Alexis Menard  <alexis@webkit.org>

        Enable unprefixed CSS transitions by default.
        https://bugs.webkit.org/show_bug.cgi?id=108216

        Reviewed by Dean Jackson.

        Rename the flag CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED which will be used later to 
        guard the unprefixing work for CSS Transforms and animations.

        * Configurations/FeatureDefines.xcconfig:

2013-02-01  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics : Sort Target.pri and class declarations in alphabetical order.
        https://bugs.webkit.org/show_bug.cgi?id=108590

        Reviewed by Noam Rosenthal.

        Sort class declarations in alphabetical order.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):

2013-02-01  Gwang Yoon Hwang  <ryumiel@company100.net>

        [EFL][WK2] MiniBrowser segfaults on loading google.com
        https://bugs.webkit.org/show_bug.cgi?id=108597

        Reviewed by Andreas Kling.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::processMessage):
        oolMessageBody should be properly initialized before it is used.

        This patch also adds omitted break statement.

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

        [Qt] Add MessageFlags.h in Target.pri
        https://bugs.webkit.org/show_bug.cgi?id=108583

        Reviewed by Kentaro Hara.

        Since MessageDecoder and MessageEncoder include MessageFlags.h, it
        should be included in Target.pri.

        * Target.pri:

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

        Coordinated Graphics : Move CoordinatedGraphics related files to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=108149

        Reviewed by Noam Rosenthal.

        This patch moves Coordinated Graphics related code to WebCore. To
        implement Threaded Coordinated Graphics, most of Coordianted Graphics
        code should be shared. Therefore, they should reside in WebCore instead of
        WebKit2.

        When moving to WebCore, two renamings have been done.

        1. Rename LayerTreeRenderer to CoordinatedGraphicsScene.

        2. Rename WebCustomFilterProgram and WebCustomFilterOperation to
        CoordinatedCustomFilterProgram and CoordinatedCustomFilterOperation,
        respectively.

        No new tests, covered by existing tests.

        * CMakeLists.txt:
        * Scripts/webkit2/messages.py:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h:
        * Target.pri:
        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/qt/qquickwebpage.cpp:
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        * UIProcess/API/qt/raw/qrawwebview_p.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * UIProcess/efl/PageClientBase.cpp:
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        * UIProcess/qt/QtWebPageSGNode.cpp:
        * UIProcess/qt/QtWebPageSGNode.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-01-31  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt][WK2] Another attempt to fix build after recent WebKit2 changes
        https://bugs.webkit.org/show_bug.cgi?id=108548

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::processMessage): Change Deque to Vector and do similar
        logic as on patch for https://bugs.webkit.org/show_bug.cgi?id=108517
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::setShouldCloseConnectionOnProcessTermination):
        * Platform/qt/WorkQueueQt.cpp: Reflect changes on Qt WorkQueue to increase ref
        count when the execution is started and decrease it when the work item is deleted,
        following the logic on https://bugs.webkit.org/show_bug.cgi?id=108544
        (WorkQueue::WorkItemQt::~WorkItemQt):
        (WorkQueue::WorkItemQt::execute):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath): This function was moved from WebProcessProxy but
        mac specific code was not protected properly: https://bugs.webkit.org/show_bug.cgi?id=108407

2013-01-31  Changhun Kang  <temoochin@company100.net>

        Rename from parentOrHost* to parentOrShadowHost* in Node.h.
        https://bugs.webkit.org/show_bug.cgi?id=108308

        Reviewed by Dimitri Glazkov.

2013-01-31  Anders Carlsson  <andersca@apple.com>

        StorageManager should be ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=108553

        Reviewed by Beth Dakin.

        It's likely we'd want to have the storage manager outlive its context at times, so make it
        reference counted.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::create):
        (WebKit):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebContext.h:
        (WebContext):

2013-01-31  Anders Carlsson  <andersca@apple.com>

        WorkQueue should be a ref-counted class
        https://bugs.webkit.org/show_bug.cgi?id=108544

        Reviewed by Sam Weinig.

        Make WorkQueue a ref-counted class that's implicitly ref()'d when dispatching a function to it, and then
        implicitly deref()'d when the function is done executing. This matches the behavior of dispatch queues,
        and ensures that the WorkQueue object won't go away while dispatched functions are running.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        (CoreIPC::Connection::~Connection):
        (CoreIPC::Connection::addQueueClient):
        (CoreIPC::Connection::removeQueueClient):
        (CoreIPC::Connection::invalidate):
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):
        (CoreIPC::Connection::connectionDidClose):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::createDataAvailableSource):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::initializeDeadNameSource):
        * Platform/WorkQueue.cpp:
        (WorkQueue::create):
        (WorkQueue::WorkQueue):
        (WorkQueue::~WorkQueue):
        * Platform/WorkQueue.h:
        (WorkQueue):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):
        * Shared/ChildProcess.cpp:
        (WebKit::didCloseOnConnectionWorkQueue):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::processLauncherWorkQueue):
        (WebKit::ProcessLauncher::ProcessLauncher):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::pluginWorkQueue):
        (WebKit::WebProcessProxy::getPlugins):

2013-01-31  Rafael Brandao  <rafael.lobo@openbossa.org>

        [Qt][WK2] Fix build after removal of MessageID.h
        https://bugs.webkit.org/show_bug.cgi?id=108534

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::MessageInfo::MessageInfo):
        (CoreIPC::MessageInfo::setMessageBodyIsOutOfLine):
        (CoreIPC::MessageInfo::isMessageBodyIsOutOfLine):
        (MessageInfo):
        (CoreIPC::Connection::processMessage):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Target.pri:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        * UIProcess/DrawingAreaProxy.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        * WebProcess/soup/WebSoupRequestManager.cpp:

2013-01-31  Brady Eidson  <beidson@apple.com>

        Assertion failure in WebResourceLoadScheduler::remove when loading .webarchives
        <rdar://problem/12888145> and https://bugs.webkit.org/show_bug.cgi?id=108520

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Even if it isn't to be scheduled with the
          NetworkProcess, still add this ResourceLoader to the scheduler's records.

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial Unix build fix.

        Use Vector<> instead of Deque<> when iterating
        over m_attachments in the USE(UNIX_DOMAIN_SOCKETS)
        case.

        * Platform/CoreIPC/ArgumentDecoder.cpp:

2013-01-30  Brian Weinstein  <bweinstein@apple.com>

        Add a call to the page UI client to determine if a plug-in should load
        https://bugs.webkit.org/show_bug.cgi?id=108407
        <rdar://problem/13066332>

        Reviewed by Anders Carlsson.

        This patch adds a client call to the WKPageUIClient to be called to determine
        whether or not a plug-in should load.

        * UIProcess/API/C/WKPage.h: Add shouldLoadPlugin.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getPluginPath): Moved from WebProcessProxy, and added a call to
            m_uiClient.shouldInstantiatePlugin.
        * UIProcess/WebPageProxy.h:
        * UIProcss/WebPageProxy.messages.in: Moved GetPluginPath from WebProcessProxy to WebPageProxy.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginPath): Moved to WebPageProxy.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebUIClient.cpp:
        (WebKit::WebUIClient::shouldInstantiatePlugin): Return that we should load the plug-in if
            the client function isn't defined, and call the function if it is.
        * UIProcess/WebUIClient.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Add an entry for the new
            client function.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Send the message to the WebPageProxy, not the WebProcessProxy.
        (WebKit::WebPage::canPluginHandleResponse): Made a member function, so it can call sendSync, and
            send the message to the WebPageProxy, not the WebProcessProxy.
        * WebProcess/WebPage/WebPage.h:

2013-01-31  Anders Carlsson  <andersca@apple.com>

        Use a Vector for IPC attachments
        https://bugs.webkit.org/show_bug.cgi?id=108517

        Reviewed by Sam Weinig.

        We don't need to use a Deque for attachments - we can just deserialize the attachments backwards instead.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::create):
        (CoreIPC::ArgumentDecoder::ArgumentDecoder):
        (CoreIPC::ArgumentDecoder::removeAttachment):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (ArgumentDecoder):
        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::create):
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (MessageDecoder):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::createMessageDecoder):

2013-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Disable ENABLE_FULLSCREEN_API on iOS
        https://bugs.webkit.org/show_bug.cgi?id=108250

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2013-01-31  Enrica Casucci  <enrica@apple.com>

        WebKit2: provide new bundle APIs to allow bundle clients to be notified of pasteboard access.
        https://bugs.webkit.org/show_bug.cgi?id=108396.
        <rdar://problem/12920461>

        Reviewed by Alexey Proskuryakov.

        This patch adds new bundle client API to receive notifications
        relative the pasteboard activity. There are 2 new API added to
        InjectedBundleEditorClient, to receive notification before and
        after the pasteboard content is added and one API to provide
        additional content to add to the pasteboard.
        In order to create content to add to the pasteboard, WKWebArchiveRef
        and WKWebArchiveResourcesRef have been added to the set of API level
        object.
        This work is a joint effort with Sam Weinig who contributed the
        support for WKWebArchiveRef, WKWebArchiveResourcesRef and related
        files. Sam is the author of the first chunk of changes listed below.
        
        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKSharedAPICast.h:
        * Shared/API/c/mac/WKWebArchive.cpp: Added.
        (WKWebArchiveGetTypeID):
        (WKWebArchiveCreate):
        (WKWebArchiveCreateWithData):
        (WKWebArchiveCreateFromRange):
        (WKWebArchiveCopyMainResource):
        (WKWebArchiveCopySubresources):
        (WKWebArchiveCopySubframeArchives):
        (WKWebArchiveCopyData):
        * Shared/API/c/mac/WKWebArchive.h: Added.
        * Shared/API/c/mac/WKWebArchiveResource.cpp: Added.
        (WKWebArchiveResourceGetTypeID):
        (WKWebArchiveResourceCreate):
        (WKWebArchiveResourceCopyData):
        (WKWebArchiveResourceCopyURL):
        (WKWebArchiveResourceCopyMIMEType):
        (WKWebArchiveResourceCopyTextEncoding):
        * Shared/API/c/mac/WKWebArchiveResource.h: Added.
        * Shared/APIObject.h:
        * Shared/WebArchive.cpp: Added.
        (WebKit::WebArchive::create):
        (WebKit::WebArchive::WebArchive):
        (WebKit::WebArchive::~WebArchive):
        (WebKit::WebArchive::mainResource):
        (WebKit::WebArchive::subresources):
        (WebKit::WebArchive::subframeArchives):
        (WebKit::releaseCFData):
        (WebKit::WebArchive::data):
        (WebKit::WebArchive::coreLegacyWebArchive):
        * Shared/WebArchive.h: Added.
        (WebKit::WebArchive::type):
        * Shared/WebArchiveResource.cpp: Added.
        (WebKit::WebArchiveResource::create):
        (WebKit::WebArchiveResource::WebArchiveResource):
        (WebKit::WebArchiveResource::~WebArchiveResource):
        (WebKit::releaseCFData):
        (WebKit::WebArchiveResource::data):
        (WebKit::WebArchiveResource::URL):
        (WebKit::WebArchiveResource::MIMEType):
        (WebKit::WebArchiveResource::textEncoding):
        (WebKit::WebArchiveResource::coreArchiveResource):
        * Shared/WebArchiveResource.h: Added.
        (WebKit::WebArchiveResource::type):
        * WebKit2.xcodeproj/project.pbxproj:
        
        * Shared/APIClientTraits.cpp: Added versioning to InjectedBundlePageEditorClient.
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp:
        (WebKit::InjectedBundlePageEditorClient::willWriteToPasteboard): Added.
        (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange): Added.
        (WebKit::InjectedBundlePageEditorClient::didWriteToPasteboard): Added.
        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::didWriteSelectionToPasteboard):
        (WebKit::WebEditorClient::willWriteSelectionToPasteboard):
        (WebKit::WebEditorClient::getClientPasteboardDataForRange):
        * WebProcess/WebCoreSupport/WebEditorClient.h:

2013-01-31  Anders Carlsson  <andersca@apple.com>

        Remove MessageID.h
        https://bugs.webkit.org/show_bug.cgi?id=108516

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::sendOutgoingMessages):
        (CoreIPC::Connection::dispatchSyncMessage):
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC):
        (Connection):
        * Platform/CoreIPC/MessageID.h: Removed.
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::Connection::receiveSourceEventHandler):
        * Shared/CoreIPCSupport/WebConnectionMessageKinds.h: Removed.
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * UIProcess/DrawingAreaProxy.h:
        (CoreIPC):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        * UIProcess/WebApplicationCacheManagerProxy.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebFrameProxy.h:
        (CoreIPC):
        * UIProcess/WebFullScreenManagerProxy.h:
        (CoreIPC):
        * UIProcess/WebIconDatabase.h:
        (CoreIPC):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        (CoreIPC):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        * WebProcess/FullScreen/WebFullScreenManager.h:
        (CoreIPC):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (CoreIPC):
        * WebProcess/WebPage/DrawingArea.h:
        (CoreIPC):
        * WebProcess/WebPage/LayerTreeHost.h:
        (CoreIPC):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (CoreIPC):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (CoreIPC):

2013-01-31  Mike West  <mkwst@chromium.org>

        Cleanup: Use ScriptExecutionContext::topOrigin when relevant.
        https://bugs.webkit.org/show_bug.cgi?id=108476

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::storageBlockingStateChanged):
        (WebKit::PluginView::isPrivateBrowsingEnabled):

2013-01-31  Anders Carlsson  <andersca@apple.com>

        Get rid of IncomingMessage
        https://bugs.webkit.org/show_bug.cgi?id=108514

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (Connection::SyncMessageState):
        (ConnectionAndIncomingMessage):
        (CoreIPC::Connection::SyncMessageState::~SyncMessageState):
        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        (CoreIPC::Connection::SyncMessageState::dispatchMessages):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::enqueueIncomingMessage):
        (CoreIPC::Connection::dispatchMessage):
        (CoreIPC::Connection::dispatchOneMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):

2013-01-31  Patrick Gansterer  <paroga@webkit.org>

        Remove PLATFORM(WIN_CAIRO) from NetscapePluginX11.cpp
        https://bugs.webkit.org/show_bug.cgi?id=108439

        Reviewed by Brent Fulgham.

        PLATFORM(WIN_CAIRO) is Windows only, where no X11 exists.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed build fix: Remove Web Intents files from
        the Qt build system.

        * Target.pri:

2013-01-31  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix.
        Removing build targets for Web Intents files that were removed in r141448.

        * GNUmakefile.list.am:

2013-01-31  Anders Carlsson  <andersca@apple.com>

        Remove Web Intents code from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=108506

        Reviewed by Simon Fraser.

        Since nobody builds with Web Intents enabled anymore, and since the code is going to 
        be removed from WebCore, remove it from WebKit2.

        * Shared/API/c/WKBase.h:
        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIObject.h:
        * Shared/IntentData.cpp: Removed.
        * Shared/IntentData.h: Removed.
        * Shared/IntentServiceInfo.cpp: Removed.
        * Shared/IntentServiceInfo.h: Removed.
        * Shared/WebIntentServiceInfo.cpp: Removed.
        * Shared/WebIntentServiceInfo.h: Removed.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKIntentData.cpp: Removed.
        * UIProcess/API/C/WKIntentData.h: Removed.
        * UIProcess/API/C/WKIntentServiceInfo.cpp: Removed.
        * UIProcess/API/C/WKIntentServiceInfo.h: Removed.
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebIntentData.cpp: Removed.
        * UIProcess/WebIntentData.h: Removed.
        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/WebLoaderClient.h:
        (WebKit):
        (WebLoaderClient):
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit):
        * WebProcess/InjectedBundle/API/c/WKBundleIntent.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleIntent.h: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundleIntentRequest.h: Removed.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundleIntent.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundleIntentRequest.cpp: Removed.
        * WebProcess/InjectedBundle/InjectedBundleIntentRequest.h: Removed.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        (WebKit):
        (InjectedBundlePageLoaderClient):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebFrame.h:
        (WebCore):
        (WebKit):
        (WebFrame):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebCore):
        (WebKit):
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        (WebCore):
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2013-01-31  Brady Eidson  <beidson@apple.com>

        Lack of a log level string should not obliterate compiled in logging channel state.
        https://bugs.webkit.org/show_bug.cgi?id=108502

        Reviewed by Alexey Proskuryakov and Sam Weinig.

        * Platform/mac/Logging.mac.mm:
        (WebKit::initializeLogChannel): If there's no log level string, leave the channel state alone.

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

        WebProcess sandbox profile overhaul.

        Reviewed by Sam Weinig.

        Moves some rules together by susbystem for easier maintenance.

        Addresses <rdar://problem/9276393>, <rdar://problem/10844321>, <rdar://problem/12408537>,
        <rdar://problem/12558524>.

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

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial build fix: Pre C++11 the use of
        >> in nested templates is ambiguous in the grammar and
        requires the insertion of a space here. Since these files are
        not Mac specific we don't require C++11 yet and a space
        fixes the build.

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Shared/ChildProcessProxy.h:
        (ChildProcessProxy):

2013-01-31  Christophe Dumez  <dchris@gmail.com>

        [EFL] Disable Web Intents
        https://bugs.webkit.org/show_bug.cgi?id=108457

        Reviewed by Alexey Proskuryakov.

        Remove code related to Web Intents from EFL
        WebKit2.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/ewk_intent.cpp: Removed.
        * UIProcess/API/efl/ewk_intent.h: Removed.
        * UIProcess/API/efl/ewk_intent_private.h: Removed.
        * UIProcess/API/efl/ewk_intent_service.cpp: Removed.
        * UIProcess/API/efl/ewk_intent_service.h: Removed.
        * UIProcess/API/efl/ewk_intent_service_private.h: Removed.
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/resources/intent-request.html: Removed.
        * UIProcess/API/efl/tests/resources/intent-service.html: Removed.
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp: Removed.
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (PageLoadClientEfl):

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

        <rdar://problem/12695827> PPT: Make loading file URLs work with a sandboxed NetworkProcess

        Address review comments.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2013-01-31  Anders Carlsson  <andersca@apple.com>

        Stop using OutgoingMessage
        https://bugs.webkit.org/show_bug.cgi?id=108495

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendOutgoingMessages):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::~ChildProcessProxy):
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * Shared/ChildProcessProxy.h:
        (ChildProcessProxy):

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Make it possible to compile WebKit2 Qt related files without access to internal WK2 C++ API
        https://bugs.webkit.org/show_bug.cgi?id=108472

        Reviewed by Andreas Kling.

        Add a new module to the qmake build system that represents the part of the WebKit2 Qt integration
        that doesn't depend on WebKit2 internals.

        Changed qwebnavigationhistory.cpp to not use any internal headers and compile it as part of the
        internals-free module.

        * Target.pri:
        * UIProcess/API/qt/qwebnavigationhistory.cpp:
        * WebKit2.pro:
        * WebKit2QML.pri: Added.

2013-01-31  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial build fix: Add missing virtual destructor to
        LayerTreeRendererClient. Otherwise the build with -Werror breaks, which
        complains (rightly so) that we're deleting a sub-class where the super class
        doesn't have a virtual destructor.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit::LayerTreeRendererClient::~LayerTreeRendererClient):

2013-01-31  Seulgi Kim  <seulgikim@company100.net>

        Coordinated Graphics: view the debug border/repaint count of the non composited layer.
        https://bugs.webkit.org/show_bug.cgi?id=108401

        Reviewed by Noam Rosenthal.

        Make non-compositing layer draw debug border and show repaint counter
        accroding to settings.

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

2013-01-31  Paweł Forysiuk  <tuxator@o2.pl>

        InjectedBundle is being built even with --disable-webkit2
        https://bugs.webkit.org/show_bug.cgi?id=108364

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Wrap Injected bundle with ENABLE_WEBKIT2 condition

2013-01-31  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] RequestManagerClientEfl, DownloadManagerEfl and ContextHistoryClientEfl should be based on C API
        https://bugs.webkit.org/show_bug.cgi?id=107685

        Reviewed by Benjamin Poulain.

        RequestManagerClientEfl, DownloadManagerEfl and ContextHistoryClientEfl
        should be based on C API so that API layering is not violated.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::ContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::~ContextHistoryClientEfl):
        * UIProcess/efl/ContextHistoryClientEfl.h:
        (WebKit::ContextHistoryClientEfl::create):
        (ContextHistoryClientEfl):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        (WebKit::DownloadManagerEfl::~DownloadManagerEfl):
        * UIProcess/efl/DownloadManagerEfl.h:
        (WebKit::DownloadManagerEfl::create):
        (DownloadManagerEfl):
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):
        * UIProcess/efl/RequestManagerClientEfl.h:
        (WebKit::RequestManagerClientEfl::create):
        (RequestManagerClientEfl):

2013-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141110.
        http://trac.webkit.org/changeset/141110
        https://bugs.webkit.org/show_bug.cgi?id=108349

        This patch broke WK2-EFL unit tests (Requested by grzegorz on
        #webkit).

        * UIProcess/efl/TextCheckerEfl.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:

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

        Coordinated Graphics : Remove WebCoordinatedSurface dependency from CoordinatedSurface
        https://bugs.webkit.org/show_bug.cgi?id=108259

        Reviewed by Noam Rosenthal.

        This is a preparation patch for Threaded Coordinated Graphics.

        WebCoordinatedSurface dependency should be removed from
        CoordinatedSurface so as to share CoordinatedSurface between
        WebCoordinatedSurface and CoordinatedSurface of WebKit1, which will be
        implemented for Threaded Coordinated Graphics.

        This patch introduces CoordinatedSurface::Factory, which is a function
        pointer that creates CoordinatedSurfaces. CoordinatedLayerTreeHost sets
        static CoordinatedSurface::Factory member variable. Classes that use
        CoordinatedSurface, which are CoordinatedImageBacking and UpdateAtlas,
        create CoordinatedSurfaces by calling CoordinatedSurface::create, which
        will call the function set by CoordinatedLayerTreeHost.

        This way, we can remove the WebCoordinatedSurface dependency from
        CoordinatedSurface and be able to share the code in Threaded Coordinated
        Graphics.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedSurface.cpp: Added.
        (WebKit):
        (WebKit::CoordinatedSurface::setFactory):
        (WebKit::CoordinatedSurface::create):
        * Shared/CoordinatedGraphics/CoordinatedSurface.h:
        (CoordinatedSurface):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        * Target.pri:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::createCoordinatedSurface):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2013-01-30  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix after http://trac.webkit.org/changeset/141372.

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

2013-01-30  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics : Remove CoordinatedLayerTreeHostProxy dependency from LayerTreeRenderer
        https://bugs.webkit.org/show_bug.cgi?id=108164

        Reviewed by Benjamin Poulain.

        This is a preparation patch for Threaded Coordinated Graphics.

        LayerTreeRenderer should not depend on CoordinatedLayerTreeHostProxy so that it
        can be moved to WebCore.  This patch introduces LayerTreeRendererClient which
        is implemented in CoordinatedLayerTreeHostProxy. LayerTreeRenderer uses this
        client, instead of using CoordinatedLayerTreeHostProxy directly.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::animationFrameReady):
        (WebKit::LayerTreeRenderer::updateViewport):
        (WebKit::LayerTreeRenderer::renderNextFrame):
        (WebKit::LayerTreeRenderer::purgeBackingStores):
        (WebKit::LayerTreeRenderer::detach):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit):
        (LayerTreeRendererClient):
        (LayerTreeRenderer):

2013-01-30  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Should respond to three-finger tap for dictionary definitions
        https://bugs.webkit.org/show_bug.cgi?id=108418
        <rdar://problem/13121409>

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Add default implementation of performDictionaryLookupAtLocation.
        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add getSelectionForWordAtPoint and searchInDictionaryWithSelection.
        * WebProcess/Plugins/PDF/PDFPlugin.h: Add performDictionaryLookupAtLocation.
        * WebProcess/Plugins/PDF/PDFPlugin.mm: Grab a PDFSelection representing the word encompassing the given point, and
        throw up a dictionary popover.
        (WebKit::PDFPlugin::performDictionaryLookupAtLocation):
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:  Add default implementation of performDictionaryLookupAtLocation.
        * WebProcess/Plugins/Plugin.h:  Add performDictionaryLookupAtLocation.
        * WebProcess/Plugins/PluginProxy.h: Add default implementation of performDictionaryLookupAtLocation.
        * WebProcess/Plugins/PluginView.cpp: 
        (WebKit::PluginView::performDictionaryLookupAtLocation): Forward performDictionaryLookupAtLocation to the plugin.
        * WebProcess/Plugins/PluginView.h: Add performDictionaryLookupAtLocation.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation): Intercept performDictionaryLookupAtLocation, and give
        the main-frame plugin (if it exists) a chance to handle it.

2013-01-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Cleanup MessageID parameter after r141332
        https://bugs.webkit.org/show_bug.cgi?id=108419

        Unreviewed to fix build breaks.

        r141332 didn't remove MessageID parameter on some features.
        (battery, vibration, coordinate graphics, network info and so on)

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didReceiveCoordinatedLayerTreeHostProxyMessage):
        * UIProcess/WebBatteryManagerProxy.h:
        (WebBatteryManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/WebVibrationProxy.h:
        (WebVibrationProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * WebProcess/Battery/WebBatteryManager.h:
        (WebBatteryManager):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h:
        (WebNetworkInfoManager):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveCoordinatedLayerTreeHostMessage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/soup/WebSoupRequestManager.h:
        (WebSoupRequestManager):

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

        Remove MessageID from MessageSender
        https://bugs.webkit.org/show_bug.cgi?id=108413

        Reviewed by Andreas Kling.

        This is another step towards eliminating MessageID.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (NetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::dispatchSyncMessage):
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (QueueClient):
        (CoreIPC::Connection::waitForAndDispatchImmediately):
        * Platform/CoreIPC/MessageReceiver.h:
        (MessageReceiver):
        (CoreIPC::MessageReceiver::didReceiveSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveMessage):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):
        * Scripts/webkit2/messages.py:
        (forward_declarations_and_headers):
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveMessage):
        * Shared/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::sendMessage):
        * Shared/ChildProcessProxy.h:
        (ChildProcessProxy):
        (WebKit::ChildProcessProxy::send):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::didReceiveMessage):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage):
        * Shared/Plugins/NPRemoteObjectMap.h:
        (NPRemoteObjectMap):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::didReceiveMessage):
        * Shared/WebConnection.h:
        (WebConnection):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::didReceiveMessageOnConnectionWorkQueue):
        * Shared/mac/SecItemShim.h:
        (SecItemShim):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::didReceiveMessage):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveMessage):
        (WebKit::DownloadProxy::didReceiveSyncMessage):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didReceiveCoordinatedLayerTreeHostProxyMessage):
        * UIProcess/DrawingAreaProxy.h:
        (DrawingAreaProxy):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::didReceiveCoordinatedLayerTreeHostProxyMessage):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        (CustomProtocolManagerProxy):
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::didReceiveMessage):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didReceiveMessage):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        (WebKit::SharedWorkerProcessProxy::didReceiveMessage):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        (SharedWorkerProcessProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::didReceiveMessage):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::dispatchMessage):
        (WebKit::WebContext::dispatchSyncMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::didReceiveMessage):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::didReceiveMessage):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::didReceiveMessage):
        (WebKit::WebFullScreenManagerProxy::didReceiveSyncMessage):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebFullScreenManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (RemoteLayerTreeHost):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::didReceiveMessage):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.h:
        (SecItemShimProxy):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::didReceiveMessage):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        (WebApplicationCacheManager):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::didReceiveMessage):
        * WebProcess/Cookies/WebCookieManager.h:
        (WebCookieManager):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didReceiveMessage):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        (WebFullScreenManager):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        (WebIconDatabaseProxy):
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        (WebMediaCacheManager):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        (NetworkProcessConnection):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (PluginProcessConnection):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        (WebResourceCacheManager):
        * WebProcess/Storage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveCoordinatedLayerTreeHostMessage):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebPageGroupProxy):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebProcess.h:
        (WebProcess):

2013-01-30  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Update scrollbars if PDFLayerController's display mode changes
        https://bugs.webkit.org/show_bug.cgi?id=108412
        <rdar://problem/13002261>

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add pdfLayerController:didChangeDisplayMode:
        * WebProcess/Plugins/PDF/PDFPlugin.h: Add notifyDisplayModeChanged().
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate pdfLayerController:didChangeDisplayMode:]): Forward didChangeDisplayMode to notifyDisplayModeChanged.
        (WebKit::PDFPlugin::notifyDisplayModeChanged): Update content size and scrollbar size when display mode changes.

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

        <rdar://problem/12695827> PPT: Make loading file URLs work with a sandboxed NetworkProcess

        Reviewed by Sam Weinig.

        * DerivedSources.make: Preprocess a .sb.in file to build the profile.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        Don't prevent entering the sandbox. Override sandbox path, because service
        gets a differnt one by default.

        * WebKit2.xcodeproj/project.pbxproj:
        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: Added.

2013-01-30  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: LayerTreeRenderer manages the surface of UpdateAtlas.
        https://bugs.webkit.org/show_bug.cgi?id=107224

        Reviewed by Benjamin Poulain.

        Currently, CoordinatedLayerTreeHostProxy manages the surface of UpdateAtlas, but
        all other resources are managed by LayerTreeRenderer. This patch matches the
        surface of UpdateAtlas to other resources.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::updateTileForLayer):
        (WebKit::CoordinatedLayerTreeHostProxy::createUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHostProxy::removeUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHostProxy::purgeBackingStores):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::updateTile):
        (WebKit::LayerTreeRenderer::createUpdateAtlas):
        (WebKit):
        (WebKit::LayerTreeRenderer::removeUpdateAtlas):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (TileUpdate):
        (WebKit::LayerTreeRenderer::TileUpdate::TileUpdate):
        (LayerTreeRenderer):

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

        Remove MessageID parameter from generated message receivers
        https://bugs.webkit.org/show_bug.cgi?id=108379

        Reviewed by Beth Dakin.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (NetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * PluginProcess/PluginControllerProxy.h:
        (PluginControllerProxy):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveMessage):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):
        * Scripts/webkit2/messages.py:
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::didReceiveMessage):
        * Shared/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (WebKit::CustomProtocolManager::didReceiveMessage):
        * Shared/Plugins/NPObjectMessageReceiver.h:
        (NPObjectMessageReceiver):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::didReceiveSyncMessage):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::didReceiveMessage):
        * Shared/WebConnection.h:
        (WebConnection):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::didReceiveMessageOnConnectionWorkQueue):
        * Shared/mac/SecItemShim.h:
        (SecItemShim):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::didReceiveMessage):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveMessage):
        (WebKit::DownloadProxy::didReceiveSyncMessage):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):
        * UIProcess/DrawingAreaProxy.h:
        (DrawingAreaProxy):
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        (CustomProtocolManagerProxy):
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::didReceiveMessage):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didReceiveMessage):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        (WebKit::SharedWorkerProcessProxy::didReceiveMessage):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        (SharedWorkerProcessProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::didReceiveMessage):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::didReceiveMessage):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::didReceiveMessage):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::didReceiveMessage):
        (WebKit::WebFullScreenManagerProxy::didReceiveSyncMessage):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebFullScreenManagerProxy):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (RemoteLayerTreeHost):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::didReceiveMessage):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.h:
        (SecItemShimProxy):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::didReceiveMessage):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        (WebApplicationCacheManager):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::didReceiveMessage):
        * WebProcess/Cookies/WebCookieManager.h:
        (WebCookieManager):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::didReceiveMessage):
        * WebProcess/FullScreen/WebFullScreenManager.h:
        (WebFullScreenManager):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        * WebProcess/Network/WebResourceLoader.h:
        (WebResourceLoader):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (PluginProcessConnection):
        * WebProcess/Plugins/PluginProxy.h:
        (PluginProxy):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::didReceiveMessage):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebPage/EventDispatcher.h:
        (EventDispatcher):
        * WebProcess/WebPage/WebInspector.h:
        (WebInspector):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebProcess.h:
        (WebProcess):

2013-01-30  Christophe Dumez  <dchris@gmail.com>

        [WK2][UNIX] g_spawn_sync() generates warning in PluginProcessProxy::scanPlugin()
        https://bugs.webkit.org/show_bug.cgi?id=108371

        Reviewed by Martin Robinson.

        g_spawn_sync() was sometimes displaying a warning about the SIGCHLD
        signal disposition not being set to SIG_DFL, despite the fix in r133755.
        The reason was that the code was only setting the disposition to SIG_DFL
        if the previous disposition was SIG_IGN.

        In this patch, we set the SIGCHLD signal disposition to SIG_DFL, no
        matter what its previous disposition was. Also, the signal disposition
        is now restored to its previous state after the call to g_spawn_sync()
        to avoid side effects. Finally, we now use SIGCHLD instead of SIDCLD
        since this is the more compatible POSIX name.

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::spawnProcessSync):
        (WebKit):
        (WebKit::PluginProcessProxy::scanPlugin):

2013-01-30  Huang Dongsung  <luxtella@company100.net>

        [EFL][Qt][WK2] We should consider a page scale factor in WebCore instead of our own scale factor.
        https://bugs.webkit.org/show_bug.cgi?id=105978

        Reviewed by Simon Fraser.

        Currently, PageViewportController sends a page scale factor to Coordinated
        Graphics System regardless of the page scale factor in WebCore. This patch makes
        Coordinated Graphics System use the page scale factor in WebCore to match other
        ports.

        When it is needed to change a page scale, PageViewportController sends the scale
        to Page in Web Process via WebPageProxy::scalePage. When the page scale in
        WebCore is changed, CoordinatedGraphicsLayer gets notified via
        deviceOrPageScaleFactorChanged callback. CoordinatedGraphicsLayer uses the page
        scale factor like previous our own scale factor.

        We set true to applyDeviceScaleFactorInCompositor and
        ApplyPageScaleFactorInCompositor in Settings like chromium, because
        TiledBackingStore that is a backing store of each GraphicsLayer applies the
        scale to our raster graphics engines instead of applying the scale to the local
        transform of each render object.

        Thank Kenneth Rohde Christiansen for implementing the base patch of this patch.

        No new tests. Covered by existing tests.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::setSize):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::setVisibleContentsRect):
            Does not receive a pageScaleFactor argument because
            PageViewportController sends a page scale factor to Page.
            However, this method still receives a scroll position because we
            enable delegates scrolling.
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::applyScaleAfterRenderingContents):
        (WebKit::PageViewportController::applyPositionAfterRenderingContents):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::deviceOrPageScaleFactorChanged):
        (WebCore::CoordinatedGraphicsLayer::effectiveContentsScale):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::deviceScaleFactor):
        (WebKit):
        (WebKit::CoordinatedLayerTreeHost::pageScaleFactor):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):

2013-01-30  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt] Fix Win build after r141177
        https://bugs.webkit.org/show_bug.cgi?id=108325

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::sendOutgoingMessage):

2013-01-30  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        REGRESSION (r141051): Broke plugin support on non-Mac WebKit2 Ports
        https://bugs.webkit.org/show_bug.cgi?id=108182

        Reviewed by Sam Weinig.

        Send the plugin path to the PluginProcess as a parameter.

        * PluginProcess/qt/PluginProcessMainQt.cpp:
        (WebKit::PluginProcessMain):
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):

2013-01-30  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_window_features
        https://bugs.webkit.org/show_bug.cgi?id=107924

        Reviewed by Sam Weinig.

        Use C API inside ewk_window_features instead of accessing
        internal C++ classes directly, to avoid violating API
        layering.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::createNewPage):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/API/efl/ewk_window_features.cpp:
        (EwkWindowFeatures::EwkWindowFeatures):
        (getWindowFeatureValue):
        (EwkWindowFeatures::getWindowFeatureBoolValue):
        (EwkWindowFeatures::getWindowFeatureDoubleValue):
        (ewk_window_features_geometry_get):
        * UIProcess/API/efl/ewk_window_features_private.h:
        (EwkWindowFeatures::create):
        (EwkWindowFeatures::geometry):
        (EwkWindowFeatures::setGeometry):
        (EwkWindowFeatures):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::createNewPage):

2013-01-30  Zeno Albisser  <zeno@webkit.org>

        [Qt] Fix Qt/Mac build after r141024 and r141037
        https://bugs.webkit.org/show_bug.cgi?id=108318

        Reviewed by Kentaro Hara.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformInvalidate):
            Replace nullptr with 0 to allow compiling without C++11 support.

2013-01-30  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][Qt][WebGL] Avoid deleting an uncreated canvas.
        https://bugs.webkit.org/show_bug.cgi?id=106878

        Reviewed by Benjamin Poulain.

        setContentsToCanvas is responsible for marking canvas for creation or deletion.
        The issue here is that the canvas is marked for deletion even though it has not
        been created. This causes an assert in LayerTreeRenderer::destroyCanvas.
        This patch adds a seperate check to ensure that CoordinatedGraphicsLayer
        tries to issue a request for canvas deletion only after request for canvas
        creation has been handled.

        New test: fast/canvas/webgl/canvas-resize-crash.html

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsToCanvas):
        (WebCore::CoordinatedGraphicsLayer::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::createCanvasIfNeeded):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::fixedToViewport):

2013-01-30  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp: Include GraphicsLayerTextureMapper.h
        as a forwarding header from WebCore.

2013-01-30  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove m_pendingSyncBackingStores in LayerTreeRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=107099

        Reviewed by Noam Rosenthal.

        Instead of queuing the setting of backing stores in LayerTreeRenderer,
        and then setting them directly to TextureMapperLayer, we allow
        GraphicsLayerTextureMapper's existing queuing mechanism to handle that.
        Instead of a m_pendingSyncBackingStores queue, we have a m_backingStores
        queue which can be applied much more easily to the layer tree.

        In addition, LayerTreeRenderer::purgeGLResources() does not call
        TextureMapperLayer::clearBackingStoresRecursive() because
        TextureMapperLayer will be destructed soon.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::deleteLayer):
        (WebKit::LayerTreeRenderer::createBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::removeBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::resetBackingStoreSizeToLayerSize):
        (WebKit::LayerTreeRenderer::createTile):
        (WebKit::LayerTreeRenderer::removeTile):
        (WebKit::LayerTreeRenderer::updateTile):
        (WebKit::LayerTreeRenderer::commitPendingBackingStoreOperations):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Update the expected generated message results
        https://bugs.webkit.org/show_bug.cgi?id=108293

        Reviewed by Beth Dakin.

        * Scripts/webkit2/messages.py:
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:

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

        Replace unnecessary ArgumentDecoder member functions with decode overloads
        https://bugs.webkit.org/show_bug.cgi?id=102013

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::decode):
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeVariableLengthByteArray):
        (CoreIPC::ArgumentDecoder::decode):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (ArgumentDecoder):
        (CoreIPC::ArgumentDecoder::decodeEnum):
        (CoreIPC):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::decode):
        (CoreIPC::decodeTimingFunction):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::decode):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::decode):
        * Shared/mac/ObjCObjectGraphCoders.mm:
        (WebKit::ObjCObjectGraphDecoder::baseDecode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::decode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::decode):
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/qt/QtNetworkReplyData.cpp:
        (WebKit::QtNetworkReplyData::decode):
        * WebProcess/WebPage/DecoderAdapter.cpp:
        (WebKit::DecoderAdapter::decodeBool):
        (WebKit::DecoderAdapter::decodeUInt16):
        (WebKit::DecoderAdapter::decodeUInt32):
        (WebKit::DecoderAdapter::decodeUInt64):
        (WebKit::DecoderAdapter::decodeInt32):
        (WebKit::DecoderAdapter::decodeInt64):
        (WebKit::DecoderAdapter::decodeFloat):
        (WebKit::DecoderAdapter::decodeDouble):

2013-01-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Adjust missing MessageID removals to fix build breaks
        https://bugs.webkit.org/show_bug.cgi?id=108276

        Unreviewed to fix build breaks.

        Some MessageID removals wasn't adjusted into ConnectionUnix.cpp and coordinated graphics.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::MessageInfo::MessageInfo):
        (CoreIPC::MessageInfo::setMessageBodyIsOutOfLine):
        (CoreIPC::MessageInfo::isMessageBodyIsOutOfLine):
        (CoreIPC::Connection::processMessage):
        (CoreIPC::Connection::sendOutgoingMessage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/WebProcessProxy.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):

2013-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140983.
        http://trac.webkit.org/changeset/140983
        https://bugs.webkit.org/show_bug.cgi?id=108277

        Unfortunately, this API has one last client (Requested by
        abarth on #webkit).

        * Configurations/FeatureDefines.xcconfig:

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Remove MessageID parameter from Connection::sendMessage
        https://bugs.webkit.org/show_bug.cgi?id=108269

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendSyncReply):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendMessage):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Stop generating the message kind enum
        https://bugs.webkit.org/show_bug.cgi?id=108258

        Reviewed by Beth Dakin.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        (CoreIPC::Connection::waitForAndDispatchImmediately):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        * Scripts/webkit2/messages.py:
        (surround_in_condition):
        (message_to_struct_declaration):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Scripts/webkit2/model.py:
        (Message.__init__):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::send):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):

2013-01-29  Kiran Muppala  <cmuppala@apple.com>

        Fix erroneous semicolon causing build failure: if statement has empty body [-Werror,-Wempty-body]
        https://bugs.webkit.org/show_bug.cgi?id=108241

        Reviewed by Anders Carlsson.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addExistingWebPage): Remove erroneous
        semicolon following the if condition.

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Remove almost everything from MessageID
        https://bugs.webkit.org/show_bug.cgi?id=108244

        Reviewed by Beth Dakin.

        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::MessageID):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC):
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createMessageDecoder):
        (CoreIPC::Connection::receiveSourceEventHandler):

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Get rid of MessageID::is()
        https://bugs.webkit.org/show_bug.cgi?id=108234

        Reviewed by Beth Dakin.

        Add explicit message receiver name equality checks instead of using MessageID::is.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        * Platform/CoreIPC/MessageID.h:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):
        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        (WebKit::WebProcessProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveSyncMessage):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::didReceiveMessageOnConnectionWorkQueue):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceiveMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::didReceiveMessageOnConnectionWorkQueue):

2012-11-28  Jer Noble  <jer.noble@apple.com>

        Allow clients to ask for the WebView/WKView placeholder view when in full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=103558
        <rdar://problem/12763112>

        Reviewed by Benjamin Poulain.

        Clients may want to behave differently when their WebView/WKView has been swapped out by a placeholder
        view when in full screen mode.  Add a simple accessor for the existing placeholder view to
        WKFullScreenWindowController and WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView fullScreenPlaceholderView]): Added simple accessor.
        * UIProcess/API/mac/WKViewPrivate.h:
        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController webViewPlaceholder]): Added simple accessor.

2013-01-29  Huang Dongsung  <luxtella@company100.net>

        [WK2] Call LayerTreeHost::deviceOrPageScaleFactorChanged() when a device or page scale factor is changed.
        https://bugs.webkit.org/show_bug.cgi?id=107802

        Reviewed by Simon Fraser.

        Currently, LayerTreeHostMac and *GTK call deviceOrPageScaleFactorChanged()
        of the non compositing GraphicsLayer when a device scale factor is changed.

        There are two problems.
        1. We don't notify LayerTreeHost when a page scale factor is changed.
        2. When using TiledCoreAnimationDrawingAreaProxy, LayerTreeHostMac does
        not receive the device scale factor changed callback.

        So this patch changes three points.
        1. Rename from deviceScaleFactorDidChange() to deviceOrPageScaleFactorChanged()
        in LayerTreeHost.
        2. WebPage::setDeviceScaleFactor() calls LayerTreeHost::deviceScaleFactorDidChange()
        because of dealing with TiledCoreAnimationDrawingAreaProxy.
        3. WebPage::pageScaleFactor() calls LayerTreeHost::deviceScaleFactorDidChange()
        to call deviceOrPageScaleFactorChanged() of the non compositing GraphicsLayer.

        Unfortunately, I couldn't think of a way to test this in an automated fashion.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updateBackingStoreState):
            Don't call LayerTreeHost::deviceScaleFactorDidChange() because this
            method calls WebPage::setDeviceScaleFactor() and then
            LayerTreeHost::deviceScaleFactorDidChange() is called.
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePage):
        (WebKit::WebPage::setDeviceScaleFactor):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::deviceOrPageScaleFactorChanged):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        (LayerTreeHostMac):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::deviceOrPageScaleFactorChanged):

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Get rid of MessageID::get()
        https://bugs.webkit.org/show_bug.cgi?id=108235

        Reviewed by Beth Dakin.

        Just check for the message receiver name and message name explicitly instead.

        * Platform/CoreIPC/MessageID.h:
        (CoreIPC::MessageID::is):
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        (WebContextLegacyMessage::messageReceiverName):
        (WebContextLegacyMessage):
        (WebContextLegacyMessage::postMessageMessageName):
        (WebContextLegacyMessage::postSynchronousMessageMessageName):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):

2013-01-29  Kiran Muppala  <cmuppala@apple.com>

        Add support for enabling process suppression in WebProcesses with no visible pages
        https://bugs.webkit.org/show_bug.cgi?id=108054

        Reviewed by Anders Carlsson.

        Provide a preference to enable process suppression in WebProcesses with
        no visible pages even if the application is not completely occluded.
        This provides more opportunities for process suppression to take effect.

        Replace the messaging of application occlusion status from UI process to
        ChildProcesses with messages that indicate the current required process
        suppression state.  WebProcessProxy should determine if the process is
        eligible for process suppression based on both application occlusion
        and page visibility.  When either of these parameters changes,
        the proxy should message the child process of the updated process
        suppression state.

        * NetworkProcess/NetworkProcess.messages.in: Rename
        SetApplicationIsOccluded to SetProcessSuppressionEnabled.
        * PluginProcess/PluginProcess.messages.in: Ditto.
        * Shared/ChildProcess.h: 
        (WebKit::ChildProcess::processSuppressionEnabled): Rename
        applicationIsOccluded.
        * Shared/WebPreferencesStore.h: Add a new preference
        pageVisibilityBasedProcessSuppressionEnabled, to enabled/disable
        process suppression of WebProcesses when all pages are hidden.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setProcessSuppressionEnabled): Rename
        setApplicationIsOccluded.
        (WebKit::ChildProcess::platformInitialize): Replace call to
        setApplicationIsOccluded with setProcessSuppressionEnabled.
        * SharedWorkerProcess/SharedWorkerProcess.messages.in: Rename
        SetApplicationIsOccluded to SetProcessSuppressionEnabled.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPageVisibilityBasedProcessSuppressionEnabled):
        (WKPreferencesGetPageVisibilityBasedProcessSuppressionEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching): Use setter
        to update process suppression state instead of messaging directly.
        Use WebContext::canEnableProcessSuppressionForNetworkProcess() helper
        method to determine if process suppression should be enabled.
        * UIProcess/Network/NetworkProcessProxy.h: Rename
        setApplicationIsOccluded to setProcessSuppresionEnabled.
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::setProcessSuppressionEnabled): Ditto.
        * UIProcess/Plugins/PluginProcessManager.h: Ditto.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Use setter
        to update process suppression state instead of messaging directly.
        Use WebContext::canEnableProcessSuppressionForGlobalChildProcesses()
        helper method to determine if process suppression should be enabled.
        * UIProcess/Plugins/PluginProcessProxy.h: Rename
        setApplicationIsOccluded to setProcessSuppresionEnabled.
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::setProcessSuppressionEnabled): Ditto.
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::setProcessSuppressionEnabled): Ditto.
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h: Ditto.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        (WebKit::SharedWorkerProcessProxy::didFinishLaunching): Use setter
        to update process suppression state instead of messaging directly.
        Use WebContext::canEnableProcessSuppressionForGlobalChildProcesses()
        helper method to determine if process suppression should be enabled.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h: Rename
        setApplicationIsOccluded to setProcessSuppresionEnabled.
        * UIProcess/SharedWorkers/mac/SharedWorkerProcessManagerMac.mm:
        (WebKit::SharedWorkerProcessManager::setProcessSuppressionEnabled):
        Ditto.
        * UIProcess/SharedWorkers/mac/SharedWorkerProcessProxyMac.mm:
        (WebKit::SharedWorkerProcessProxy::setProcessSuppressionEnabled): Ditto.
        * UIProcess/WebContext.h: Replace applicationIsOccluded() getter with
        helper methods to determine if a child process can have process
        suppression enabled.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange): Notify WebProcessProxy of
        page visibility change.
        (WebKit::WebPageProxy::preferencesDidChange): Notify WebProcessProxy of
        change in preferences.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Initialize member variable
        tracking process suppression state to false.
        (WebKit::WebProcessProxy::createWebPage): Update set of pages which can
        be process suppressed and the resulting process suppression state for
        the child process.
        (WebKit::WebProcessProxy::addExistingWebPage): Ditto.
        (WebKit::WebProcessProxy::removeWebPage): Ditto.
        (WebKit::WebProcessProxy::pageVisibilityChanged): Ditto.
        (WebKit::WebProcessProxy::pagePreferencesChanged): Ditto.
        (WebKit::WebProcessProxy::didFinishLaunching): Call
        updateProcessSuppressionState().
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::updateProcessSuppressionStateOfGlobalChildProcesses): Use new
        helper method canEnableProcessSuppressionForGlobalChildProcesses() to
        determine if process suppression should be enabled.
        (WebKit::applicationOcclusionStateChanged): Update renamed methods
        and variables.
        (WebKit::enableOcclusionNotifications): Move OmitProcessSuppression
        user default check into canEnableProcessSuppression methods.
        (WebKit::omitProcessSuppression):
        (WebKit::WebContext::updateProcessSuppressionStateOfChildProcesses):
        Use new helper method canEnableProcessSuppressionForNetworkProcess() to
        determine if process suppression should be enabled for NetworkProcess.
        Let WebProcess update process suppression state based on application
        occlusion state and page visibility.
        (WebKit::WebContext::canEnableProcessSuppressionForNetworkProcess):
        (WebKit::WebContext::canEnableProcessSuppressionForWebProcess):
        (WebKit::WebContext::canEnableProcessSuppressionForGlobalChildProcesses):
        (WebKit::WebContext::processSuppressionEnabledChanged): Reevaluate if
        process suppression is enabled for all contexts and update process
        suppression state of global child processes.
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::pageIsProcessSuppressible):
        (WebKit::WebProcessProxy::allPagesAreProcessSuppressible):
        (WebKit::WebProcessProxy::updateProcessSuppressionState):
        * WebProcess/WebProcess.messages.in:

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Start using the message flag in MessageEncoder/MessageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=108227

        Reviewed by Beth Dakin.

        Stop using the flags in MessageID and store the flags directly in the message instead.
        This is another step towards eliminating MessageID.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        (CoreIPC::Connection::dispatchSyncMessage):
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        (CoreIPC::MessageDecoder::isSyncMessage):
        (CoreIPC):
        (CoreIPC::MessageDecoder::shouldDispatchMessageWhenWaitingForSyncReply):
        * Platform/CoreIPC/MessageDecoder.h:
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC):
        (CoreIPC::MessageEncoder::MessageEncoder):
        (CoreIPC::MessageEncoder::~MessageEncoder):
        (CoreIPC::MessageEncoder::setIsSyncMessage):
        (CoreIPC::MessageEncoder::setShouldDispatchMessageWhenWaitingForSyncReply):
        * Platform/CoreIPC/MessageEncoder.h:
        (MessageEncoder):
        * Platform/CoreIPC/MessageFlags.h: Copied from Source/WebKit2/Platform/CoreIPC/MessageEncoder.h.
        (CoreIPC):
        * Platform/CoreIPC/MessageID.h:
        * WebKit2.xcodeproj/project.pbxproj:

2013-01-29  Anders Carlsson  <andersca@apple.com>

        Encode/decode message send flags in the message
        https://bugs.webkit.org/show_bug.cgi?id=108208

        Reviewed by Beth Dakin.

        This is another step towards getting rid of MessageID.

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::decodeUInt8):
        (CoreIPC):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (ArgumentDecoder):
        (CoreIPC::ArgumentDecoder::decode):
        (CoreIPC):
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encode):
        (CoreIPC):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC::MessageDecoder::messageSendFlags):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC):
        (CoreIPC::MessageEncoder::MessageEncoder):
        (CoreIPC::MessageEncoder::~MessageEncoder):
        (CoreIPC::MessageEncoder::setMessageSendFlags):
        * Platform/CoreIPC/MessageEncoder.h:
        (MessageEncoder):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (CoreIPC):

2013-01-29  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Missing build flags when building with Harfbuzz
        https://bugs.webkit.org/show_bug.cgi?id=108174

        Reviewed by Martin Robinson.

        Add FREETYPE_CFLAGS and FREETYPE_LIBS to makefiles so -lharfbuzz
        parameter will be added to linking lines when needed.

        * GNUmakefile.am: Added FREETYPE_CFLAGS and FREETYPE_LIBS.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Ditto.

2013-01-29  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Unified text checker implementation.
        https://bugs.webkit.org/show_bug.cgi?id=107682

        Reviewed by Anders Carlsson.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit):
        (WebKit::TextChecker::checkTextOfParagraph):
        Allow to check spelling for multiple words,
        their misspelling location and length are saved to the vector.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        (WebKit::WebEditorClient::checkTextOfParagraph):
        (WebKit):
        As spelling implementation is exposed to UIProcess,
        send a meesage to UIProcess to call TextChecker::checkTextOfParagraph.

2013-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to prefetch DNS of a given hostname to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=99695

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_prefetch_dns): Public method to resolve the
        domain name in advance for the given hostname.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
        webkit_web_context_prefetch_dns.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        (webkitWebExtensionDidReceiveMessage): Parse PrefetchDNS message
        and call WebCore::prefetchDNS() with the given hostname.
        (didReceiveMessage): Call webkitWebExtensionDidReceiveMessage().
        (webkitWebExtensionCreate): Add implementation for
        didReceiveMessage callback.

2013-01-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement resources API using injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=107457

        Reviewed by Sam Weinig.

        The ResourceLoaderClient was removed from the UI process in
        r140285, and most of the GTK+ API depends on resources. This patch
        implements the same API using the ResourceLoaderClient from
        injected bundle. It fixes the resources unit tests, as well as
        other 14 unit tests that are timing out because they depend on
        resource API.

        * GNUmakefile.list.am: Add new files to compilation.
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode): Add support for encoding
        WebURLResponse and WebError objects in user messages.
        (WebKit::UserMessageDecoder::baseDecode): Add support for decoding
        WebURLResponse and WebError objects from user messages.
        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp: Added.
        (didReceiveWebViewMessageFromInjectedBundle): Handle messages sent
        to the WebView. For now it hanldes all the sresource loader client
        messages.
        (didReceiveMessageFromInjectedBundle): Handle messages received
        from injected bundle.
        (attachInjectedBundleClientToContext): Initialize the injected
        bundle client.
        * UIProcess/API/gtk/WebKitInjectedBundleClient.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate): Add a HashMap to map page IDs to
        WebKitWebViews.
        (createDefaultWebContext): Call
        attachInjectedBundleClientToContext() to intialize the injected
        bundle client.
        (webkitWebContextCreatePageForWebView): Use
        webkitWebViewBaseCreateWebPage() to create and initialize a new
        WebPageProxy and map the newly created page with the given
        WebKitWebView.
        (webkitWebContextWebViewDestroyed): Called when the given
        WebKitWebView is being destroyed to remove it from the views map.
        (webkitWebContextGetWebViewForPage): Returns the WebKitWebView
        associated to the given page ID.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Use
        webkitWebContextCreatePageForWebView() instead of
        webkitWebViewBaseCreateWebPage() directly.
        (webkitWebViewDispose): Call webkitWebContextWebViewDestroyed() to
        notify the context.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (didInitiateLoadForResource): Send a message to the UI process
        with the callback parameters encoded.
        (willSendRequestForFrame): Ditto.
        (didReceiveResponseForResource): Ditto.
        (didReceiveContentLengthForResource): Ditto.
        (didFinishLoadForResource): Ditto.
        (didFailLoadForResource): Ditto.
        (webkitWebPageCreate): Initialize the
        WKBundlePageResourceLoadClient.

2013-01-29  Laszlo Gombos  <l.gombos@samsung.com>

        [Qt] Remove misspelled ENABLE(SPEECH_INPUT) guard
        https://bugs.webkit.org/show_bug.cgi?id=105683

        Reviewed by Simon Hausmann.

        The ENABLE(SPEECH_INPUT) guard is only used in one location
        in the source tree and as such it is always 0.

        I believe that this guard is a left over and is not needed any more
        as the code guarded is not guarded anywhere else.

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Unreviewed build fix after r141024.
        Adding new files to the build.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2013-01-29  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2] Fix unused parameter build warning
        https://bugs.webkit.org/show_bug.cgi?id=108156

        Reviewed by Kentaro Hara.

        Comment out the unused parameters to fix the build warnings.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PluginProxy.h:

2013-01-28  Jae Hyun Park  <jae.park@company100.net>

        [Qt] Build fix
        https://bugs.webkit.org/show_bug.cgi?id=108142

        Reviewed by Gyuyoung Kim.

        Build fix. Though StorageManager was added to WK2 in r141024,
        it is not added to Target.pri for qt port.

        * Target.pri:

2013-01-28  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor code related to debug border and repaint count.
        https://bugs.webkit.org/show_bug.cgi?id=107910

        Reviewed by Noam Rosenthal.

        There are two big changes:
        1. CoordinatedGraphicsLayer sends debugging visuals to UI Process.
        2. When updating a backing store, increment a repaint count.

        In addition, we don't use QT_WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS
        environment. EFL, GTK and QT will use WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS
        after http://webkit.org/b/107198.

        * Shared/CoordinatedGraphics/CoordinatedLayerInfo.h:
        (WebKit::CoordinatedLayerInfo::CoordinatedLayerInfo):
        (CoordinatedLayerInfo):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::removeAllTiles):
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintTilesToTextureMapper):
        (WebKit::CoordinatedBackingStore::adjustedTransformForRect):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit):
        (WebKit::CoordinatedBackingStore::drawBorder):
            Override TextureMapperPlatformLayer::drawBorder() to draw the border
            for each tile.
        (WebKit::CoordinatedBackingStore::drawRepaintCounter):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (WebKit::CoordinatedBackingStoreTile::CoordinatedBackingStoreTile):
        (CoordinatedBackingStoreTile):
        (CoordinatedBackingStore):
        (WebKit::CoordinatedBackingStore::rect):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::setLayerRepaintCount):
        (WebKit):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerRepaintCount):
        (WebKit):
        (WebKit::LayerTreeRenderer::setLayerState):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setShowDebugBorder):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::setShowRepaintCounter):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::setDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaintEnd):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setLayerRepaintCount):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

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

        Remove support from ArgumentEncoder for deprecated encode functions
        https://bugs.webkit.org/show_bug.cgi?id=108155

        Reviewed by Dan Bernstein.

        * Platform/CoreIPC/ArgumentEncoder.h:
        (CoreIPC::ArgumentEncoder::encode):

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

        Disable default use of the Plug-in XPCService until we can
        figure out how to deal with the 32-bit one.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):

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

        Plug-ins should initialize their sandbox at creation time
        https://bugs.webkit.org/show_bug.cgi?id=108098

        Reviewed by Anders Carlsson.

        Add the ability to add string key/value pairs to process creation parameters
        to allow the plugin process to get passed the plugin path which in turn allows
        the plugin to initialize its sandbox at the correct time.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/NetworkServiceMain.Development.mm:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/NetworkServiceMain.mm:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (NetworkServiceInitializer):
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (WebKit::PluginProcessMainDelegate::getExtraData):
        (PluginProcessMainDelegate):
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/PluginService.32.Main.mm:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/PluginService.64.Main.mm:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/PluginService.Development.Main.mm:
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (WebKit):
        (PluginServiceInitializerDelegate):
        (WebKit::PluginServiceInitializerDelegate::PluginServiceInitializerDelegate):
        (WebKit::PluginServiceInitializerDelegate::getExtraData):
        (PluginServiceInitializer):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):
        (WebKit::PluginProcess::initializePluginProcess):
        (WebKit::PluginProcess::initializeProcessName):
        (WebKit::PluginProcess::initializeSandbox):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        (WebKit::PluginProcess::platformInitializeProcess):
        (WebKit::PluginProcess::initializeProcessName):
        (WebKit::PluginProcess::initializeSandbox):
        * Shared/ChildProcess.h:
        (ChildProcessInitializationParameters):
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.h:
        (ChildProcessMainDelegate):
        (WebKit::ChildProcessMain):
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.mm:
        (WebKit::ChildProcessMainDelegate::getExtraData):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:
        (WebKit::XPCServiceEventHandler):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.h:
        (WebKit::XPCServiceEventHandler):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h: Added.
        (XPCServiceInitializerDelegate):
        (WebKit::XPCServiceInitializerDelegate::XPCServiceInitializerDelegate):
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm: Added.
        (WebKit::XPCServiceInitializerDelegate::~XPCServiceInitializerDelegate):
        (WebKit::XPCServiceInitializerDelegate::getConnectionIdentifier):
        (WebKit::XPCServiceInitializerDelegate::getClientIdentifier):
        (WebKit::XPCServiceInitializerDelegate::getClientProcessName):
        (WebKit::XPCServiceInitializerDelegate::getExtraData):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):
        * UIProcess/Launcher/ProcessLauncher.h:
        (LaunchOptions):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        (WebKit::connectToReExecService):
        (WebKit::createService):
        (WebKit::createProcess):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebContentServiceMain.Development.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/WebContentServiceMain.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

2013-01-28  Kiran Muppala  <cmuppala@apple.com>

        Add window occlusion criteria to determine page visibility on Mac
        https://bugs.webkit.org/show_bug.cgi?id=107494

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewVisible): Add window occlusion check.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]): Remove self from the all views vector.
        (-[WKView addWindowObserversForWindow:]): Register observer for
        NSWindowWillOrderOffScreenNotification.
        (-[WKView removeWindowObservers]): Unregister observer for
        NSWindowWillOrderOffScreenNotification.
        (-[WKView viewWillMoveToWindow:]): Disable occlusion notifications.
        (-[WKView viewDidMoveToWindow]): Enable occlusion notifications.
        (-[WKView _windowWillOrderOffScreen:]): Disable occlusion notifications.
        (-[WKView _windowDidOrderOnScreen:]): Enable occlusion notifications.
        This notification ensures that occlusion notifications are registered
        correctly even if the NSWindow object is assigned a window number after
        the viewDidMoveToWindow notification has been received.  This occurs
        for instance during application launch.
        (-[WKView _setIsWindowOccluded:]):
        (-[WKView _enableWindowOcclusionNotifications]):
        (-[WKView _disableWindowOcclusionNotifications]):
        (windowBecameVisible):
        (windowBecameOccluded):
        (+[WKView _registerWindowOcclusionNotificationHandlers]):
        (+[WKView _unregisterWindowOcclusionNotificationHandlers]):
        (+[WKView _allViews]):
        (-[WKView _isWindowOccluded]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Add
        self to the all views vector.
        * UIProcess/API/mac/WKViewInternal.h:

2013-01-28  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Enable debug borders and repaint counter via Settings.
        https://bugs.webkit.org/show_bug.cgi?id=107198

        Reviewed by Benjamin Poulain.

        Currently, if the environment variable WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS
        is set to 1, only CoordinatedBacking shows debug borders and repaint counter.

        This patch makes the environment variable change Settings.

        In addition, Qt uses WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS instead of
        QT_WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS from now.

        After Bug 105787, all backing stores and platform layers in TextureMapper can
        show debug borders and repaint counter.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):

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

        Move Mach port handling from WorkQueue to Connection
        https://bugs.webkit.org/show_bug.cgi?id=108140

        Reviewed by Sam Weinig.

        Instead of having WorkQueue know about Mach port sources, just fold that
        functionality directly into Connection. This lets us get rid of the generic source
        handling from WorkQueue.

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::createDataAvailableSource):
        (CoreIPC):
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::initializeDeadNameSource):
        * Platform/WorkQueue.h:
        (WorkQueue::dispatchQueue):
        (WorkQueue):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::platformInvalidate):

2013-01-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add StorageManager class to cmake ports

        Unreviewed build fix. Though StorageManager was added to WK2 in r141024,
        it is not added to cmake ports(EFL).

        * CMakeLists.txt:
        * PlatformEfl.cmake:

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

        <rdar://problem/13098777>
        Add (allow mach-lookup (global-name "com.apple.tccd.system"))

        Reviewed by Maciej Stachowiak.

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

2013-01-28  Brady Eidson  <beidson@apple.com>

        WebKit2 should notify the client if the NetworkProcess crashes.
        <rdar://problem/13090513> and https://bugs.webkit.org/show_bug.cgi?id=108126

        Reviewed by Sam Weinig.

        Add new client callback to the ContextClient:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::networkProcessDidCrash):
        * UIProcess/WebContextClient.h:

        Call out to the client when the NetworkProcess crashes:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::networkProcessCrashed):
        * UIProcess/WebContext.h:

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):

2013-01-28  Pratik Solanki  <psolanki@apple.com>

        PLATFORM(IOS) should come before __MAC_OS_X_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=108101

        Reviewed by Benjamin Poulain.

        Since iOS does not define __MAC_OS_X_VERSION_MIN_REQUIRED, any usage of
        __MAC_OS_X_VERSION_MIN_REQUIRED should be after a PLATFORM(IOS) check.

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

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

        Add StorageManager class
        https://bugs.webkit.org/show_bug.cgi?id=108127

        Reviewed by Sam Weinig.

        The StorageManager will be in charge of handling access to local and session storage
        in the UI process.

        * UIProcess/Storage/StorageManager.cpp: Added.
        * UIProcess/Storage/StorageManager.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

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

        More work on UI side local storage
        https://bugs.webkit.org/show_bug.cgi?id=108119

        Reviewed by Beth Dakin.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/StorageNamespaceProxy.cpp:
        (WebKit::StorageNamespaceProxy::createSessionStorageNamespace):
        Rename create to createSessionStorageNamespace and make it take a WebPage.

        (WebKit::StorageNamespaceProxy::StorageNamespaceProxy):
        Add WebPage parameter.
    
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::sessionStorageNamespace):
        Add an #ifdef for enabling UI side storage.
        
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::page):
        Call new WebPage::fromCorePage helper.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::fromCorePage):
        Add new function for getting a WebPage from a WebCore::Page.

2013-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Improve PageVisibility API with enums
        https://bugs.webkit.org/show_bug.cgi?id=107364

        Reviewed by Sam Weinig.

        * Shared/API/c/WKPageVisibilityTypes.h: Added.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toPageVisibilityState):
        Create an enum for page visibility APIs and a conversion function
        for the WK2 values to WebCore values.

        * Target.pri:
        * GNUmakefile.list.am:
        * WebKit2.xcodeproj/project.pbxproj:
        Add WKPageVisibilityTypes.h to the build as a private export.

        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetVisibilityState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setVisibilityState):
        UIProcess API to set visibility state. WebPageProxy already
        had m_visibilityState, so update that when setter is used.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        Remove the old SPI for WebKitTestRunner. Tests now use the C API.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setVisibilityState):
        * WebProcess/WebPage/WebPage.messages.in:
        Update the existing WebPage API to use uint32_t, which matches
        other enum message types.

2013-01-28  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_download_job
        https://bugs.webkit.org/show_bug.cgi?id=107810

        Reviewed by Anders Carlsson.

        Use C API inside ewk_download_job instead of accessing internal C++
        classes directly, to avoid violating API layering.

        * UIProcess/API/C/WKDownload.cpp:
        (WKDownloadGetID): Add C API to get the download ID as we need it to
        support our public API and it seems like a useful addition.
        * UIProcess/API/C/WKDownload.h:
        * UIProcess/API/efl/ewk_download_job.cpp:
        (EwkDownloadJob::EwkDownloadJob):
        (EwkDownloadJob::id):
        (EwkDownloadJob::request):
        (EwkDownloadJob::cancel):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (EwkDownloadJob::create):
        (EwkDownloadJob):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didReceiveResponse):
        (WebKit::DownloadManagerEfl::didCreateDestination):
        (WebKit::DownloadManagerEfl::didReceiveData):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::registerDownloadJob): Rename
        registerDownload() to registerDownloadJob() for consistency with
        unregisterDownloadJob().
        (WebKit::DownloadManagerEfl::ewkDownloadJob): Rename downloadJob() to
        ewkDownloadJob() for clarity since it returns a EwkDownload object.
        Also take a WKDownloadRef in argument instead of an identifier since
        all the callers have a WKDownloadRef and it makes their code simpler.
        Finally, make the getter non-const since it returns a non-const pointer.
        (WebKit::DownloadManagerEfl::unregisterDownloadJob): Take a
        WKDownloadRef in argument instead of an identifier since all the
        callers have a WKDownloadRef and it makes their code simpler.
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::handleDownloadRequest):

2013-01-28  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: getMainResourceDataOfFrame should return PDFPlugin's data so that Save... works
        https://bugs.webkit.org/show_bug.cgi?id=108060
        <rdar://problem/13075454>

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Implement getResourceData.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Implement getResourceData, returning the accumulated
        data if it exists and has finished loading.
        (WebKit::SimplePDFPlugin::getResourceData):
        * WebProcess/Plugins/Plugin.h: Add getResourceData, which hands out a raw pointer/size pair
        to the plugin's "main resource" data.
        * WebProcess/Plugins/PluginProxy.h: Implement getResourceData.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::getResourceData): Forward getResourceData through to the plugin.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getMainResourceDataOfFrame): If the requested frame is backed by a PluginDocument,
        attempt to ask the PluginView for its resource data.

2013-01-28  Tim Horton  <timothy_horton@apple.com>

        [wk2] WKView's intrinsicContentSize should only report a flexible width if the content width is less than the minimum width
        https://bugs.webkit.org/show_bug.cgi?id=108056

        Reviewed by Simon Fraser.

        We're currently reporting a flexible width if the intrinsic
        content size is less than *or equal* to the minimum layout
        width. This is wrong and causes ping-ponging between flexible
        and inflexible width in cases where autolayout fits our
        view to exactly the intrinsic content size. It should be strictly
        less than instead.

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

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

        Add StorageStrategy member functions to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=108105

        Reviewed by Tim Horton.

        Add default implementations that just chain up to the base class for now.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::localStorageNamespace):
        (WebKit::WebPlatformStrategies::sessionStorageNamespace):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2013-01-28  Adam Barth  <abarth@webkit.org>

        Remove webkitNotifications.createHTMLNotification
        https://bugs.webkit.org/show_bug.cgi?id=107598

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2013-01-28  Andy Estes  <aestes@apple.com>

        Fix non-fat builds by excluding PluginService.32 as a target dependency for WebKit2.

        * WebKit2.xcodeproj/project.pbxproj:

2013-01-28  Renata Hodovan  <reni@webkit.org>

        [Qt][Win][WK2] Build fix after r140957.

        Rubber-stamped by Csaba Osztrogonác.

        <sys/wait.h> is only needed and available on linux therefore it's moved into an ifdef block.

        * WebProcess/qt/WebProcessMainQt.cpp:

2013-01-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Use C API inside ewk_url_response
        https://bugs.webkit.org/show_bug.cgi?id=107826

        Reviewed by Andreas Kling.

        * Shared/API/c/WKURLResponse.cpp:
        (WKURLResponseGetExpectedContentsLength):
        * Shared/API/c/WKURLResponse.h:

            Add new WK2 C API to get the expected contents length.

        * UIProcess/API/efl/ewk_url_response.cpp:
        (EwkUrlResponse::EwkUrlResponse):
        (EwkUrlResponse::httpStatusCode):
        (EwkUrlResponse::contentLength):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (EwkUrlResponse::create):
        (EwkUrlResponse):

            Change the methods to not call WebCore methods.

2013-01-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2][EFL] Remove unneeded private methods
        https://bugs.webkit.org/show_bug.cgi?id=107693

        Reviewed by Andreas Kling.

        Care has been taken to verify that the wrappers can
        never be null when called.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::createGLSurface):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):

2013-01-28  Renata Hodovan  <reni@webkit.org>

        [WK2] Putting QtWebProcess into a chrooted sandbox
        https://bugs.webkit.org/show_bug.cgi?id=90005

        Reviewed by Anders Carlsson and Zoltan Herczeg.

        This new feature makes possible to run WebProcess inside a chroot. In this case UIProcess calls the
        internal SandboxProcess binary what makes up an environment for WebProcess inside the sandbox and runs the WebProcess.
        SandboxProcess first creates two needed device files (random and urandom), mounts filesystems (proc and shared memory),
        then links run-time dependencies of WebProcess. After this, SandboxProcess moves to a new pid namespace (cloning with
        CLONE_NEWPID flag). Then after an other cloning (with CLONE_FS flag) we share our filesystem with our children. This is
        needed because we want to call chroot() function from here and jail our child (WebProcess) too. This will be performed
        when WebProcess sends a request for it via an socketpair. If sandboxing is done, SandboxProcess exits.
        Since chroot() system call needs sudoer rights SandboxProcess binary should have set its suid flag. However we can reduce
        its capabilites. First we restrict the capabilities of the process and the number of its possible resources. Furthermore
        we fallback to the nobody or the real user.

        * Configurations/FeatureDefines.xcconfig:
        * SandboxProcess.pro: Added.
        * Shared/linux/SandboxProcess/SandboxEnvironmentLinux.cpp: Added.
        (launchChangeRootHelper):
        (setEnvironmentVariablesForChangeRootHelper):
        (prepareAndStartChangeRootHelper):
        (setCapabilities):
        (dropPrivileges):
        (fileExists):
        (directoryPermissions):
        (createDirectory):
        (createDirectoryPath):
        (createDeviceFiles):
        (mountFileSystems):
        (linkFile):
        (linkDirectory):
        (collectRunTimeDependencies):
        (setupXauthorityForNobodyUser):
        (initSandbox):
        (restrictCapabilities):
        (moveToNewPidNamespace):
        (run):
        (main):
        * Shared/linux/SandboxProcess/SandboxEnvironmentLinux.h: Added.
        * Shared/linux/SandboxProcess/StringOperations.cpp: Added.
        (stringCopy):
        (stringConcat):
        (stringAppend):
        * Shared/linux/SandboxProcess/StringOperations.h: Added.
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * WebKit2.pri:
        * WebProcess.pro:
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit):
        (WebKit::chrootMe):
        (WebKit::WebProcessMainQt):

2013-01-28  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Rely more on C API in ewk_favicon_database
        https://bugs.webkit.org/show_bug.cgi?id=108035

        Reviewed by Benjamin Poulain.

        Rely less on internal C++ API in ewk_favicon_database and use C API
        instead of avoid breaking API layering.

        * PlatformEfl.cmake:
        * UIProcess/API/C/cairo/WKIconDatabaseCairo.cpp: Added.
        (WKIconDatabaseTryGetCairoSurfaceForURL): Add C API for getting the
        favicon for a given page URL as a cairo_surface_t*.
        * UIProcess/API/C/cairo/WKIconDatabaseCairo.h: Added.
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::didChangeIconForPageURL):
        (EwkFaviconDatabase::getIconSurfaceSynchronously):
        (EwkFaviconDatabase::iconDataReadyForPageURL):

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

        Fix location of sandbox profiles in built products
        https://bugs.webkit.org/show_bug.cgi?id=108026

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj: Sandbox profiles go into WebKit2 framework resources.

2013-01-27  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Fixing atomicIncrement implementation for Windows by dropping support before XP SP2.
        https://bugs.webkit.org/show_bug.cgi?id=106740

        Reviewed by Benjamin Poulain.

        * config.h:

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

        Add support for launching WebKit2 plugins using XPC
        https://bugs.webkit.org/show_bug.cgi?id=108040

        Reviewed by Dan Bernstein.

        * Configurations/PluginService.32.xcconfig: Copied from Source/WebKit2/Configurations/WebContentService.xcconfig.
        * Configurations/PluginService.64.xcconfig: Copied from Source/WebKit2/Configurations/WebContentService.xcconfig.
        * Configurations/PluginService.Development.xcconfig: Copied from Source/WebKit2/Configurations/WebContentService.xcconfig.
        Add configurations.

        * PluginProcess/EntryPoint/mac/XPCService: Added.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32: Added.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/Info.plist: Copied from Source/WebKit2/NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info.plist.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32/PluginService.32.Main.mm: Copied from Source/WebKit2/NetworkProcess/EntryPoint/mac/XPCService/NetworkService/NetworkServiceMain.mm.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64: Added.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/Info.plist: Copied from Source/WebKit2/NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info.plist.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64/PluginService.64.Main.mm: Copied from Source/WebKit2/NetworkProcess/EntryPoint/mac/XPCService/NetworkService/NetworkServiceMain.mm.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development: Added.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist: Added.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/PluginService.Development.Main.mm: Added.
        (main):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm: Copied from Source/WebKit2/NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm.
        (initializePluginService):
        Add entry points.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        Add plugin process service names and move into correct #ifdef.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        Opt into xpc using the same rules as the WebProcess.

        * WebKit2.xcodeproj/project.pbxproj:
        Add files.

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

        Use shared ChildProcess code to enter plug-in sandbox.

        Reviewed by Sam Weinig.

        There is one known behavior change from this refactoring: getpwuid_r is used
        instead of NSHomeDirectory for home directory, mathcing other client processes.

        * PluginProcess/PluginProcess.cpp: (WebKit::PluginProcess::enterSandbox):
        * PluginProcess/PluginProcess.h:
        PluginProcess prevents ChildProcess attempt to enter the sandbox immediately on
        launch for now, because we don't have a sandbox profile directory path yet.
        It now keeps a copy of ChildProcessInitializationParameters, so that
        ChildProcess::initializeSandbox() could be called later.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess): Store a copy of ChildProcessInitializationParameters
        for later.
        (WebKit::loadSandboxProfile): Build a sandbox profile from a common prefix and
        a plugin-specific part.
        (WebKit::PluginProcess::platformInitializePluginProcess): We can enter the sandbox now.
        (WebKit::PluginProcess::enterSandbox): Prepare SandboxInitializationParameters,
        and call ChildProcess::initializeSandbox().

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox): Actually handle system directory suffix
        from parameters.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.h: Removed.
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm: Removed.

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

        Add support for running the networking process as an XPCService
        https://bugs.webkit.org/show_bug.cgi?id=108025

        Reviewed by Dan Bernstein.

        * Configurations/NetworkService.Development.xcconfig: Copied from Source/WebKit2/Configurations/WebContentService.Development.xcconfig.
        * Configurations/NetworkService.xcconfig: Copied from Source/WebKit2/Configurations/WebContentService.xcconfig.
        Add configurations.

        * NetworkProcess/EntryPoint/mac/XPCService: Added.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService: Added.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development: Added.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/Info.plist: Copied from Source/WebKit2/WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService.Development/NetworkServiceMain.Development.mm: Copied from Source/WebKit2/WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebContentServiceMain.Development.mm.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info.plist: Copied from Source/WebKit2/WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/NetworkServiceMain.mm: Copied from Source/WebKit2/WebProcess/EntryPoint/mac/XPCService/WebContentService/WebContentServiceMain.mm.
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm: Copied from Source/WebKit2/WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm.
        (initializeNetworkService):
        Add entry points.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::serviceName):
        (WebKit::connectToServiceForDevelopment):
        (WebKit::createServiceForDevelopment):
        (WebKit::createService):
        (WebKit::createProcess):
        (WebKit::ProcessLauncher::launchProcess):
        Rework service creation to work for arbitrary services.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        (WebKit::NetworkProcessProxy::platformGetLaunchOptions):
        Opt into xpc using the same rules as the WebProcess.

        * WebKit2.xcodeproj/project.pbxproj:
        Update files.

        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (initializeWebContentService):
        Fix the comment to refer to the shim correctly.

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

        Simplify environment creation in XPC service re-exec
        https://bugs.webkit.org/show_bug.cgi?id=108017

        Reviewed by Dan Bernstein.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:
        (WebKit::XPCServiceEventHandler):
        There is no need to copy these strings.

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

        Remove code for handling NetworkProcess authentication challenges in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=108003

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * WebKit2.xcodeproj/project.pbxproj:
        * NetworkProcess/NetworkResourceLoader.messages.in: Removed. We no longer have
        an messages to NetworkResourceLoader.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        There is no longer an identifier inside AuthenticationChallenge.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::didCancelAuthenticationChallenge):
        * NetworkProcess/NetworkResourceLoader.h:
        Removed code for receiving authentication responses from WebProcess. Removed
        m_currentAuthenticationChallenge - AuthenticationMAnager now keeps track of that.

        * WebProcess/Network/WebResourceLoader.cpp:
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        Removed code for handling authentication challenges. They are now sent directly to
        UI Process. The only thing WebProcess still does is decide whether is can authenticate
        against a particular authentication space.

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

        Fix the development build.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h:
        (WebKit::XPCServiceEventHandler):
        Use the right stringizer.

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

        Refactor XPCService initialization to make it easier to add more services
        https://bugs.webkit.org/show_bug.cgi?id=108015

        Reviewed by Dan Bernstein.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.Development.h: Added.
        (WebKit::XPCServiceEventHandler):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceBootstrapper.h: Added.
        (WebKit::XPCServiceEventHandler):
        Move bootstrapping to Shared (like we have for the legacy process). For now, we use
        a macro to define the actual initialization point function to use, in the future, we
        could consider alternatives, such as getting the function name from the bundle.

        * WebKit2.xcodeproj/project.pbxproj:
        Update files.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebContentServiceMain.Development.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/WebContentServiceMain.mm:
        Simplify to use the new XPCServiceBootstrapper.

        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm: Copied from Source/WebKit2/WebProcess/mac/WebProcessServiceEntryPoints.mm.
        (initializeWebContentService):
        * WebProcess/mac/WebProcessServiceEntryPoints.h: Removed.
        * WebProcess/mac/WebProcessServiceEntryPoints.mm: Removed.
        Move the entry point to where it belongs and extract the bootstrapping parts.

2013-01-26  Adenilson Cavalcanti  <cavalcantii@gmail.com>

        [Qt]Qt build fix
        https://bugs.webkit.org/show_bug.cgi?id=108013

        Changes on process initialization classes broke webkit building with Qt5. This
        patch fix it.

        Reviewed by Sam Weinig.

        * PluginProcess/qt/PluginProcessMainQt.cpp:

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

        Hoist command line parsing into ChildProcessMain
        https://bugs.webkit.org/show_bug.cgi?id=108010

        Reviewed by Dan Bernstein.

        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMain.mm:
        (NetworkProcessMain):
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (PluginProcessMain):
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.h:
        (WebKit::ChildProcessMain):
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/SharedWorkerProcessMain.mm:
        (SharedWorkerProcessMain):
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebContentProcessMain):

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

        Move LegacyProcess entry points into new EntryPoint directories
        https://bugs.webkit.org/show_bug.cgi?id=108008

        Reviewed by Anders Carlsson.

        Also refactors to remove the need for the overly general WebKitMain, by putting the
        framework lazy loading into a helper function each legacy process can call (in ChildProcessMainBootstrapper.h)

        * Configurations/NetworkProcess.xcconfig:
        * Configurations/PluginProcess.xcconfig:
        * Configurations/SharedWorkerProcess.xcconfig:
        * Configurations/WebProcess.xcconfig:
        * NetworkProcess/EntryPoint: Added.
        * NetworkProcess/EntryPoint/mac: Added.
        * NetworkProcess/EntryPoint/mac/LegacyProcess: Added.
        * NetworkProcess/EntryPoint/mac/LegacyProcess/Info.plist: Copied from Source/WebKit2/NetworkProcess/Info.plist.
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMain.mm: Copied from Source/WebKit2/NetworkProcess/mac/NetworkProcessMainMac.mm.
        (NetworkProcessMain):
        * NetworkProcess/EntryPoint/mac/LegacyProcess/NetworkProcessMainBootstrapper.cpp: Added.
        (main):
        * NetworkProcess/Info.plist: Removed.
        * NetworkProcess/NetworkProcessMain.h: Removed.
        * NetworkProcess/mac/NetworkProcessMainMac.mm: Removed.
        * PluginProcess/EntryPoint: Added.
        * PluginProcess/EntryPoint/mac: Added.
        * PluginProcess/EntryPoint/mac/LegacyProcess: Added.
        * PluginProcess/EntryPoint/mac/LegacyProcess/Info.plist: Copied from Source/WebKit2/PluginProcess/Info.plist.
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm: Copied from Source/WebKit2/PluginProcess/mac/PluginProcessMainMac.mm.
        (PluginProcessMain):
        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMainBootstrapper.cpp: Added.
        (main):
        * PluginProcess/Info.plist: Removed.
        * PluginProcess/PluginProcessMain.h: Removed.
        * PluginProcess/mac/PluginProcessMainMac.mm: Removed.
        * Shared/EntryPointUtilities: Added.
        * Shared/EntryPointUtilities/mac: Added.
        * Shared/EntryPointUtilities/mac/LegacyProcess: Added.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.h: Copied from Source/WebKit2/Shared/mac/ChildProcessMain.h.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.mm: Copied from Source/WebKit2/Shared/mac/ChildProcessMain.mm.
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMainBootstrapper.h: Added.
        (closeUnusedFileDescriptors):
        (getBootstrapMainFunction):
        * Shared/EntryPointUtilities/mac/XPCService: Added.
        * Shared/mac/ChildProcessMain.h: Removed.
        * Shared/mac/ChildProcessMain.mm: Removed.
        * SharedWorkerProcess/EntryPoint: Added.
        * SharedWorkerProcess/EntryPoint/mac: Added.
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess: Added.
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/Info.plist: Copied from Source/WebKit2/SharedWorkerProcess/Info.plist.
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/SharedWorkerProcessMain.mm: Copied from Source/WebKit2/SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm.
        (SharedWorkerProcessMain):
        * SharedWorkerProcess/EntryPoint/mac/LegacyProcess/SharedWorkerProcessMainBootstrapper.cpp: Added.
        (main):
        * SharedWorkerProcess/Info.plist: Removed.
        * SharedWorkerProcess/SharedWorkerProcessMain.h: Removed.
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist: Copied from Source/WebKit2/WebProcess/Info.plist.
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm: Copied from Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm.
        (WebKit::WebContentProcessMainDelegate::WebContentProcessMainDelegate):
        (WebKit):
        (WebContentProcessMain):
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMainBootstrapper.cpp: Added.
        (main):
        * WebProcess/Info.plist: Removed.
        * WebProcess/WebKitMain.cpp: Removed.
        * WebProcess/WebProcessMain.h: Removed.
        * WebProcess/mac/WebProcessMainMac.mm: Removed.
        * mac/MainMacProcess.cpp: Removed.

2013-01-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_database_manager and ewk_storage_manager
        https://bugs.webkit.org/show_bug.cgi?id=107920

        Reviewed by Benjamin Poulain.

        Use C API inside ewk_database_manager and ewk_storage_manager instead
        of accessing internal C++ classes directly, to avoid violating API
        layering.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::EwkDatabaseManager):
        (EwkDatabaseManager::getDatabaseOrigins):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        (EwkDatabaseManager::create):
        (EwkDatabaseManager):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (EwkStorageManager::EwkStorageManager):
        (EwkStorageManager::getStorageOrigins):
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (EwkStorageManager::create):
        (EwkStorageManager):

2013-01-25  Andreas Kling  <akling@apple.com>

        [Mac] Defer loading the Web Inspector bundle until it's necessary.
        <http://webkit.org/b/107999>
        <rdar://problem/13091861>

        Reviewed by Anders Carlsson.

        Don't instantiate an NSBundle for the Web Inspector before it's needed.
        1.51MB progression on Membuster3.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::WebInspector):
        * WebProcess/WebPage/WebInspector.h:
        (WebInspector):
        * WebProcess/WebPage/mac/WebInspectorMac.mm:
        (WebKit::WebInspector::setInspectorUsesWebKitUserInterface):
        (WebKit::WebInspector::localizedStringsURL):

2013-01-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Fix build break after r140891.

        Unreviewed build fix. SerializedScriptValue needs to use PassRefPtr in WK2 as well.

        * Shared/WebSerializedScriptValue.h:
        (WebKit::WebSerializedScriptValue::create):

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

        Don't crash when the WKBundlePageUIClient doesn't implement createPlugInExtraStyleSheet.

        Reviewed by Dean Jackson.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::plugInExtraStyleSheet): Check that createPlugInExtraStyleSheet
        is provided before calling it.

2013-01-25  Andy Estes  <aestes@apple.com>

        Wrap content filtering code in an object
        https://bugs.webkit.org/show_bug.cgi?id=107914

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Updated to reflect changes in WKSI.

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

        HTTP Authentication should be directly between the NetworkProcess and the UIProcess
        <rdar://problem/13074829> and https://bugs.webkit.org/show_bug.cgi?id=107974

        Reviewed by Alexey Proskuryakov.

        Some of this patch is refactoring to enable more flexibility in the authentication mechanism
        and the rest is actually implementing Network->UI process authentication.

        Expose the same AuthenticationManager to anyone in the NetworkProcess asking for it:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::authenticationManager):
        (WebKit::NetworkProcess::downloadsAuthenticationManager):
        * NetworkProcess/NetworkProcess.h:

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge): Instead of messaging to
          the WebProcess, tell the NetworkProcess AuthenticationManager.

        Add WebPageID and WebFrameID members to SchedulableLoader that they receive from 
        * NetworkProcess/SchedulableLoader.cpp:
        * NetworkProcess/SchedulableLoader.h:
        (WebKit::SchedulableLoader::webPageID):
        (WebKit::SchedulableLoader::webFrameID):

        Add a 3rd form of "didReceiveAuthenticationChallenge" for NetworkProcess use:
        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::mapChallengeToIdentifier):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::AuthenticationManager::tryUsePlatformCertificateInfoForChallenge): Remove a now obsolete comment

        Include the WebPage and WebFrame ID for the originator of this request in case it results in a challenge:
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::webPageID):
        (WebKit::NetworkResourceLoadParameters::webFrameID):

        Create a AuthenticationChallengeProxy pointing back to the NetworkProcess (instead of a WebProcess),
        and send the challenge to the appropriate WebPageProxy:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveAuthenticationChallenge):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.messages.in:

        Refactor didReceiveAuthenticationChallenge so an outsider can directly hand over an AuthenticationChallengeProxy:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):
        (WebKit::WebPageProxy::didReceiveAuthenticationChallengeProxy):
        * UIProcess/WebPageProxy.h:

        Add a global WebPageID -> WebPageProxy map so parties with an ID don't need to know which process it belongs to:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::globalPageMap):
        (WebKit::WebProcessProxy::webPage):
        (WebKit::WebProcessProxy::createWebPage):
        (WebKit::WebProcessProxy::addExistingWebPage):
        (WebKit::WebProcessProxy::removeWebPage):
        * UIProcess/WebProcessProxy.h:

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

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously): Pass 0 for WebFrameID and WebPageID since synchronous
          loads don't go through "normal" authentication channels and don't need them. Yet.

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

        <rdar://problem/13089261> Crash in WKSandboxExtensionGetSerializedFormat when opening Web Inspector

        Reviewed by Brady Eidson.

        * WebProcess/com.apple.WebProcess.sb.in: Should be able to issue extensions for
        Inspector files.

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

        Try to fix the debug build.

        * WebKit2.xcodeproj/project.pbxproj:

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

        Move the WebContentServices to WebProcess/EntryPoint/mac/XPCService/.

        Reviewed by Anders Carlsson.

        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint: Added.
        * WebProcess/EntryPoint/mac: Added.
        * WebProcess/EntryPoint/mac/LegacyProcess: Added.
        * WebProcess/EntryPoint/mac/XPCService: Added.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService: Copied from WebProcessService.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development: Copied from WebProcessServiceForWebKitDevelopment.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebContentServiceMain.Development.mm: Copied from WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/WebProcessServiceForWebKitDevelopmentMain.mm: Removed.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/WebContentServiceMain.mm: Copied from WebProcessService/WebProcessServiceMain.mm.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/WebProcessServiceMain.mm: Removed.
        * WebProcessService: Removed.
        * WebProcessService/Info.plist: Removed.
        * WebProcessService/WebProcessServiceMain.mm: Removed.
        * WebProcessServiceForWebKitDevelopment: Removed.
        * WebProcessServiceForWebKitDevelopment/Info.plist: Removed.
        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm: Removed.

2013-01-25  Ivan Krstić  <ike@apple.com>

        Prepend common plugin sandbox profile to specific per-plugin one.
        <rdar://problem/13044349>

        Reviewed by Alexey Proskuryakov.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeSandbox):

2013-01-25  Dean Jackson  <dino@apple.com>

        Add a user agent stylesheet for plugins
        https://bugs.webkit.org/show_bug.cgi?id=107890

        Reviewed by Alexey Proskuryakov.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Rename client callbacks
        to have a "create" prefix, making it clear that these generate new Strings.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Actually call into
        the injected bundle to retrieve any custom stylesheet for plugins.
        (WebKit::InjectedBundlePageUIClient::plugInExtraStyleSheet):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient): Add override keyword onto virtual functions now
        that the base class has implementations.

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

        NetworkProcess cannot load files with non-ASCII names
        https://bugs.webkit.org/show_bug.cgi?id=107977

        Reviewed by Brady Eidson.

        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode): Use the correct path accessor.

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

        REGRESSION: System directory prefix doesn't have a "+"
        https://bugs.webkit.org/show_bug.cgi?id=107971

        Reviewed by Brady Eidson.

        * Shared/mac/ChildProcessMac.mm: (WebKit::ChildProcess::initializeSandbox):
        Re-added the "+".

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

        New NetworkProcess can ASSERT after old NetworkProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=107970

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier): Don't tell the scheduler
          to remove a loader that doesn't exist, as we might be recovering from a crash.

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

        Send sandbox extensions for local files to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=107872

        Reviewed by Brady Eidson.

        Send sandbox extensions in NetworkResourceLoadParameters, and consume/invalidate
        them during loading. Changed NetworkProcess code to only use that class for IPC,
        not for actual implementation.

        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::scheduleResourceLoader):
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleLoader):
        (WebKit::NetworkResourceLoadScheduler::removeLoader):
        (WebKit::NetworkResourceLoadScheduler::receivedRedirect):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::destinationID):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::resourceHandleStopped):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        (WebKit::SchedulableLoader::consumeSandboxExtensions):
        (WebKit::SchedulableLoader::invalidateSandboxExtensions):
        * NetworkProcess/SchedulableLoader.h:
        (WebKit::SchedulableLoader::identifier):
        (WebKit::SchedulableLoader::request):
        (WebKit::SchedulableLoader::priority):
        (WebKit::SchedulableLoader::contentSniffingPolicy):
        (WebKit::SchedulableLoader::allowStoredCredentials):
        (WebKit::SchedulableLoader::inPrivateBrowsingMode):
        (SchedulableLoader):
        * NetworkProcess/SyncNetworkResourceLoader.cpp:
        (WebKit::SyncNetworkResourceLoader::start):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::requestBodyExtensions):
        (WebKit::NetworkResourceLoadParameters::resourceSandboxExtension):

2013-01-25  Claudio Saavedra  <csaavedra@igalia.com>

        Remove stale class include
        https://bugs.webkit.org/show_bug.cgi?id=107945

        Reviewed by Andreas Kling.

        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.h:
        GeolocationPermissionRequestProxy has nothing to do here.

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

        Unreviewed.

        Now searching for *.messages.in in Source/WebKit2/WebProcess/Storage
        instead of Source/WebKit2/WebProcess/KeyValueStorage after the
        WebKeyValueStorageManager.messages.in was moved there.

        * GNUmakefile.am:

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

        Unreviewed.

        Reincluding the input file for WebKeyValueStorageManager IPC messages
        into the extra distribution list after the file was moved.

        * GNUmakefile.am:

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

        Further GTK build fixing.
        Adding Source/WebKit2/WebProcess/Storage to the list of directories
        to be searched for header inclusion.

        * GNUmakefile.am:

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

        Unreviewed GTK build fix.
        Adjusting the build targets after WebKeyValueStorageManager.cpp was moved
        to a different directory.

        * GNUmakefile.list.am:

2013-01-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] PagePolicyClientEfl should be based on C WK2 API
        https://bugs.webkit.org/show_bug.cgi?id=107854

        Reviewed by Benjamin Poulain.

        PagePolicyClientEfl should be based on C WK2 API in order not to
        break API layering.

        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForResponseCallback):

2013-01-25  Huang Dongsung  <luxtella@company100.net>

        [Qt][Gtk] build fix after r140752.
        https://bugs.webkit.org/show_bug.cgi?id=107908

        Reviewed by Kentaro Hara.

        Build break after r140752.

        Move Authentication and Downloads to Shared.

        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebKit2.pri:

2013-01-24  Tim Horton  <timothy_horton@apple.com>

        [wk2] Page overlays should do their own animation, instead of relying on implicit animation
        https://bugs.webkit.org/show_bug.cgi?id=107896
        <rdar://problem/12900058>

        Reviewed by Sam Weinig.

        Use PageOverlay's animation instead of CA implicit animations for uninstallPageOverlay.

        Make WKBundlePageInstallPageOverlay/WKBundlePageUninstallPageOverlay default to no animation.

        Add WKBundlePageInstallPageOverlayWithAnimation/WKBundlePageUninstallPageOverlayWithAnimation.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageUninstallPageOverlay): The default for shouldFadeOut is now false, so we don't need to pass it.
        (WKBundlePageInstallPageOverlayWithAnimation): Add a version of WKBundlePageInstallPageOverlay that fades in.
        (WKBundlePageUninstallPageOverlayWithAnimation): Add a version of WKBundlePageUninstallPageOverlay that fades out.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight): installPageOverlay used to animate by default, now we need to ask for it.
        (WebKit::WebInspectorClient::hideHighlight): uninstallPageOverlay used to implicitly animate accidentally, now we need to ask for it.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll): Ditto.
        (WebKit::FindController::hideFindUI): Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay): Add shouldFadeIn parameter.
        (WebKit::WebPage::uninstallPageOverlay):
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add shouldFadeIn to installPageOverlay; make both it and uninstallPageOverlay's shouldFade out default to false.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer): Disable implicit animations when removing a page overlay.

2013-01-24  Huang Dongsung  <luxtella@company100.net>

        [EFL] Unreviewed build fix after r140752.
        https://bugs.webkit.org/show_bug.cgi?id=107886

        Build break after r140752.

        * PlatformEfl.cmake: Move DownloadSoupErrorsEfl and DownloadSoup to Shared/Downloads.

2013-01-24  Tim Horton  <timothy_horton@apple.com>

        Fix NetworkProcess loading after r140730.

        Reviewed by Sam Weinig.

        If a process' sandbox profile path is empty, don't try to initialize the sandbox.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):

2013-01-24  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r140752.

        * DerivedSources.make:

2013-01-24  Jae Hyun Park  <jae.park@company100.net>

        Redundant LegacyReceiver attribute in WebPage.messages.in
        https://bugs.webkit.org/show_bug.cgi?id=107875

        Reviewed by Anders Carlsson.

        To generate WebPageMessageReceiver with legacy, just one LegacyReceiver
        attribute in WebPage.messages.in is enough. This patch removes this
        redundant attribute.

        * WebProcess/WebPage/WebPage.messages.in:

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

        Fix release build.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::length):

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

        <rdar://problem/9971916> [WK2] Update sandbox extension usage
        https://bugs.webkit.org/show_bug.cgi?id=107861

        Reviewed by Sam Weinig.

        * Shared/SandboxExtension.h:
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::wkSandboxExtensionType):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::processDidFinishLaunching):
        (WebKit::WebContext::startMemorySampler):
        * WebProcess/com.apple.WebProcess.sb.in:

2013-01-24  Brady Eidson  <beidson@apple.com>

        Move Authentication and Downloads from WebProcess to Shared.
        https://bugs.webkit.org/show_bug.cgi?id=107879

        Reviewed by Anders Carlsson.

        * Shared/Authentication/AuthenticationManager.cpp: Renamed from Source/WebKit2/WebProcess/Authentication/AuthenticationManager.cpp.
        * Shared/Authentication/AuthenticationManager.h: Renamed from Source/WebKit2/WebProcess/Authentication/AuthenticationManager.h.
        * Shared/Authentication/AuthenticationManager.messages.in: Renamed from Source/WebKit2/WebProcess/Authentication/AuthenticationManager.messages.in.
        * Shared/Authentication/mac/AuthenticationManager.mac.mm: Renamed from Source/WebKit2/WebProcess/Authentication/mac/AuthenticationManager.mac.mm.
        * Shared/Downloads/Download.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/Download.cpp.
        * Shared/Downloads/Download.h: Renamed from Source/WebKit2/WebProcess/Downloads/Download.h.
        * Shared/Downloads/DownloadAuthenticationClient.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/DownloadAuthenticationClient.cpp.
        * Shared/Downloads/DownloadAuthenticationClient.h: Renamed from Source/WebKit2/WebProcess/Downloads/DownloadAuthenticationClient.h.
        * Shared/Downloads/DownloadManager.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp.
        * Shared/Downloads/DownloadManager.h: Renamed from Source/WebKit2/WebProcess/Downloads/DownloadManager.h.
        * Shared/Downloads/cfnet/DownloadCFNet.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/cfnet/DownloadCFNet.cpp.
        * Shared/Downloads/curl/DownloadCurl.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp.
        * Shared/Downloads/efl/DownloadSoupErrorsEfl.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/efl/DownloadSoupErrorsEfl.cpp.
        * Shared/Downloads/gtk/DownloadSoupErrorsGtk.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/gtk/DownloadSoupErrorsGtk.cpp.
        * Shared/Downloads/mac/DownloadMac.mm: Renamed from Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm.
        * Shared/Downloads/qt/DownloadQt.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp.
        * Shared/Downloads/qt/QtFileDownloader.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/qt/QtFileDownloader.cpp.
        * Shared/Downloads/qt/QtFileDownloader.h: Renamed from Source/WebKit2/WebProcess/Downloads/qt/QtFileDownloader.h.
        * Shared/Downloads/soup/DownloadSoup.cpp: Renamed from Source/WebKit2/WebProcess/Downloads/soup/DownloadSoup.cpp.
        * Shared/Downloads/soup/DownloadSoupErrors.h: Renamed from Source/WebKit2/WebProcess/Downloads/soup/DownloadSoupErrors.h.

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

2013-01-24  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Unreviewed build fix after r140711
        https://bugs.webkit.org/show_bug.cgi?id=107873

        Unreviewed build fix.

        Build break after r140711.

        * CMakeLists.txt: Move WebKeyValueStorageManager to WebProcess/Storage.

2013-01-24  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics: remove SurfaceUpdateInfo::encode/decode
        https://bugs.webkit.org/show_bug.cgi?id=107794

        Reviewed by Anders Carlsson.

        We want to remove the dependency on CoreIPC from SurfaceUpdateInfo
        because we will extract Coordinated Graphics from WK2. Since
        SurfaceUpdateInfo is only used in Coordinated Graphics, this patch
        moves it to Shared/CoordinatedGraphics, and removes CoreIPC
        dependency.

        No new tests, no change in behavior.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebKit):
        * Shared/CoordinatedGraphics/SurfaceUpdateInfo.h: Renamed from Source/WebKit2/Shared/SurfaceUpdateInfo.h.
        (WebKit):
        (SurfaceUpdateInfo):
        (WebKit::SurfaceUpdateInfo::SurfaceUpdateInfo):
        * Shared/SurfaceUpdateInfo.cpp: Removed.
        * Target.pri:

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

        More StorageAreaProxy cleanup
        https://bugs.webkit.org/show_bug.cgi?id=107870

        Reviewed by Beth Dakin.

        Remove some unnecessary 'WebCore::' qualifications, 
        and implement StorageNamespaceProxy::storageArea.
        
        * WebProcess/Storage/StorageAreaProxy.cpp:
        * WebProcess/Storage/StorageAreaProxy.h:
        * WebProcess/Storage/StorageNamespaceProxy.cpp:

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

        Cleanup sandbox initialization a bit
        https://bugs.webkit.org/show_bug.cgi?id=107847

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * PluginProcess/PluginProcess.h:
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/ChildProcess.h:
        (ChildProcess):
        * Shared/SandboxInitializationParameters.h:
        (SandboxInitializationParameters):
        (WebKit::SandboxInitializationParameters::mode):
        (WebKit::SandboxInitializationParameters::setOverrideSandboxProfilePath):
        (WebKit::SandboxInitializationParameters::overrideSandboxProfilePath):
        (WebKit::SandboxInitializationParameters::setSandboxProfile):
        (WebKit::SandboxInitializationParameters::sandboxProfile):
        (WebKit::SandboxInitializationParameters::SandboxInitializationParameters):
        (WebKit::SandboxInitializationParameters::~SandboxInitializationParameters):
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize):
        (WebKit::ChildProcess::initializeSandbox):
        * Shared/mac/SandboxInitialiationParametersMac.mm:
        (WebKit::SandboxInitializationParameters::SandboxInitializationParameters):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/WebProcess.h:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox):

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

        Add stubbed out StorageAreaProxy class
        https://bugs.webkit.org/show_bug.cgi?id=107864

        Reviewed by Beth Dakin.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/StorageAreaProxy.cpp: Added.
        * WebProcess/Storage/StorageAreaProxy.h: Added.

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

        Unreviewed trivial buildfix after r140711.

        * DerivedSources.pri:
        * Target.pri:

2013-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Rename JSValue.h/APIJSValue.h to JSCJSValue.h/JSValue.h
        https://bugs.webkit.org/show_bug.cgi?id=107327

        Reviewed by Filip Pizlo.

        We're renaming these two files, so we have to replace the names everywhere.

        * WebProcess/WebPage/WebPage.cpp:

2013-01-24  Dean Jackson  <dino@apple.com>

        Allow some plugin snapshot UI content to come from Injected Bundle
        https://bugs.webkit.org/show_bug.cgi?id=107852

        Reviewed by Anders Carlsson.

        Hook up three new methods: plugInStartLabelTitle, plugInStartLabelSubtitle and
        plugInExtraStyleSheet to allow some custom styling and content to come
        from the InjectedBundle.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Callbacks added to
        WKBundlePageUIClient structure.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: Stub implementations
        of the three new methods.
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelTitle):
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelSubtitle):
        (WebKit::InjectedBundlePageUIClient::plugInExtraStyleSheet):
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:
        (InjectedBundlePageUIClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Call into the injected bundle
        for each of these methods.
        (WebKit::WebChromeClient::plugInStartLabelTitle):
        (WebKit::WebChromeClient::plugInStartLabelSubtitle):
        (WebKit::WebChromeClient::plugInExtraStyleSheet):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient): Declare the virtual methods in the Chrome
        Client so that they can accessed from WebCore eventually.

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

        Add stubbed out StorageNamespaceProxy class
        https://bugs.webkit.org/show_bug.cgi?id=107846

        Reviewed by Sam Weinig.

        Add new class.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/StorageNamespaceProxy.cpp: Added.
        * WebProcess/Storage/StorageNamespaceProxy.h: Added.

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

        Move WebKeyValueStorageManager to WebProcess/Storage.

        Rubber-stamped by Sam Weinig.

        Try this again, with DerivedSources.make correctly updated this time.

        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebKeyValueStorageManager.cpp: Renamed from Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp.
        * WebProcess/Storage/WebKeyValueStorageManager.h: Renamed from Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.h.
        * WebProcess/Storage/WebKeyValueStorageManager.messages.in: Renamed from Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in.

2013-01-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_favicon_database
        https://bugs.webkit.org/show_bug.cgi?id=107680

        Reviewed by Kenneth Rohde Christiansen.

        Use C API inside ewk_favicon_database instead of
        accessible the C++ classes and violating layering.
        We still rely on some C++ methods but this will be
        addressed later since there is no equivalent in
        the C API and it will require more refactoring.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::ensureFaviconDatabase):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::EwkFaviconDatabase):
        (EwkFaviconDatabase::~EwkFaviconDatabase):
        (EwkFaviconDatabase::iconURLForPageURL):
        (EwkFaviconDatabase::iconForPageURL):
        (EwkFaviconDatabase::getIconSurfaceSynchronously):
        (EwkFaviconDatabase::iconDataReadyForPageURL):
        (ewk_favicon_database_async_icon_get):
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (EwkFaviconDatabase::create):
        (EwkFaviconDatabase):

2013-01-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Rename EwkViewImpl class to EwkView
        https://bugs.webkit.org/show_bug.cgi?id=107719

        Reviewed by Andreas Kling.

        Rename EwkViewImpl class to EwkView, due to ewk view
        refactoring plan (https://bugs.webkit.org/show_bug.cgi?id=107662#c1).

        * PlatformEfl.cmake:
        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewCreate):
        (WKViewCreateWithFixedLayout):
        (WKViewGetPage):
        (WKViewCreateSnapshot):
        * UIProcess/API/efl/EwkView.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/EwkViewImpl.cpp.
        (pageViewMap):
        (EwkView::addToPageViewMap):
        (EwkView::removeFromPageViewMap):
        (EwkView::viewFromPageViewMap):
        (EwkView::EwkView):
        (EwkView::~EwkView):
        (EwkView::smartData):
        (EwkView::fromEvasObject):
        (EwkView::wkPage):
        (EwkView::setCursor):
        (EwkView::setDeviceScaleFactor):
        (EwkView::deviceScaleFactor):
        (EwkView::transformFromScene):
        (EwkView::transformToScene):
        (EwkView::transformToScreen):
        (EwkView::layerTreeRenderer):
        (EwkView::displayTimerFired):
        (EwkView::update):
        (EwkView::enterFullScreen):
        (EwkView::exitFullScreen):
        (EwkView::windowGeometry):
        (EwkView::setWindowGeometry):
        (EwkView::setImageData):
        (EwkView::size):
        (EwkView::isFocused):
        (EwkView::isVisible):
        (EwkView::title):
        (EwkView::inputMethodContext):
        (EwkView::themePath):
        (EwkView::setThemePath):
        (EwkView::customTextEncodingName):
        (EwkView::setCustomTextEncodingName):
        (EwkView::setMouseEventsEnabled):
        (EwkView::setTouchEventsEnabled):
        (EwkView::informIconChange):
        (EwkView::createGLSurface):
        (EwkView::enterAcceleratedCompositingMode):
        (EwkView::exitAcceleratedCompositingMode):
        (EwkView::requestColorPicker):
        (EwkView::dismissColorPicker):
        (EwkView::showContextMenu):
        (EwkView::hideContextMenu):
        (EwkView::requestPopupMenu):
        (EwkView::closePopupMenu):
        (EwkView::requestJSAlertPopup):
        (EwkView::requestJSConfirmPopup):
        (EwkView::requestJSPromptPopup):
        (EwkView::informDatabaseQuotaReached):
        (EwkView::informURLChange):
        (EwkView::windowFeatures):
        (EwkView::createNewPage):
        (EwkView::close):
        (EwkView::onMouseDown):
        (EwkView::onMouseUp):
        (EwkView::onMouseMove):
        (EwkView::feedTouchEvents):
        (EwkView::onTouchDown):
        (EwkView::onTouchUp):
        (EwkView::onTouchMove):
        (EwkView::onFaviconChanged):
        (EwkView::takeSnapshot):
        * UIProcess/API/efl/EwkView.h: Renamed from Source/WebKit2/UIProcess/API/efl/EwkViewImpl.h.
        (WebKit):
        (WebCore):
        (EwkView):
        (EwkView::view):
        (EwkView::page):
        (EwkView::ewkContext):
        (EwkView::settings):
        (EwkView::backForwardList):
        (EwkView::url):
        (EwkView::faviconURL):
        (EwkView::mouseEventsEnabled):
        (EwkView::touchEventsEnabled):
        (EwkView::setNeedsSurfaceResize):
        (EwkView::smartCallback):
        (EwkView::pageClient):
        (EwkView::setPageScaleFactor):
        (EwkView::pageScaleFactor):
        (EwkView::setPagePosition):
        (EwkView::pagePosition):
        (EwkView::isHardwareAccelerated):
        (EwkView::setDrawsBackground):
        (EwkView::evasGLContext):
        (EwkView::evasGLSurface):
        * UIProcess/API/efl/ewk_context_menu.cpp:
        (EwkContextMenu::EwkContextMenu):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu::create):
        (EwkContextMenu):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (EwkDownloadJob::EwkDownloadJob):
        (EwkDownloadJob::view):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (EwkDownloadJob::create):
        (EwkDownloadJob):
        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::EwkPopupMenu):
        (EwkPopupMenu::close):
        * UIProcess/API/efl/ewk_popup_menu_private.h:
        (EwkPopupMenu::create):
        (EwkPopupMenu):
        * UIProcess/API/efl/ewk_settings.cpp:
        (EwkSettings::preferences):
        * UIProcess/API/efl/ewk_settings_private.h:
        (EwkSettings::create):
        (EwkSettings::EwkSettings):
        (EwkSettings):
        * UIProcess/API/efl/ewk_view.cpp:
        (createEwkView):
        (ewk_view_base_add):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_window_features.cpp:
        (EwkWindowFeatures::EwkWindowFeatures):
        (EwkWindowFeatures::setToolbarVisible):
        (EwkWindowFeatures::setStatusBarVisible):
        (EwkWindowFeatures::setMenuBarVisible):
        (EwkWindowFeatures::setResizable):
        * UIProcess/API/efl/ewk_window_features_private.h:
        (EwkWindowFeatures::create):
        (EwkWindowFeatures):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        (WebKit::ContextHistoryClientEfl::didPerformClientRedirect):
        (WebKit::ContextHistoryClientEfl::didPerformServerRedirect):
        (WebKit::ContextHistoryClientEfl::didUpdateHistoryTitle):
        * UIProcess/efl/ContextMenuClientEfl.cpp:
        (ContextMenuClientEfl::ContextMenuClientEfl):
        * UIProcess/efl/ContextMenuClientEfl.h:
        (WebKit::ContextMenuClientEfl::create):
        (ContextMenuClientEfl):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::registerDownload):
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):
        * UIProcess/efl/FindClientEfl.cpp:
        (WebKit::FindClientEfl::didFindString):
        (WebKit::FindClientEfl::didFailToFindString):
        (WebKit::FindClientEfl::FindClientEfl):
        * UIProcess/efl/FindClientEfl.h:
        (WebKit::FindClientEfl::create):
        (FindClientEfl):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::willSubmitForm):
        (WebKit::FormClientEfl::FormClientEfl):
        * UIProcess/efl/FormClientEfl.h:
        (WebKit::FormClientEfl::create):
        (FormClientEfl):
        * UIProcess/efl/InputMethodContextEfl.cpp:
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::onIMFInputSequenceComplete):
        (WebKit::InputMethodContextEfl::onIMFPreeditSequenceChanged):
        (WebKit::InputMethodContextEfl::updateTextInputState):
        * UIProcess/efl/InputMethodContextEfl.h:
        (WebKit::InputMethodContextEfl::create):
        (InputMethodContextEfl):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::PageClientBase):
        (WebKit::PageClientBase::view):
        (WebKit::PageClientBase::createDrawingAreaProxy):
        (WebKit::PageClientBase::setViewNeedsDisplay):
        (WebKit::PageClientBase::viewSize):
        (WebKit::PageClientBase::isViewFocused):
        (WebKit::PageClientBase::isViewVisible):
        (WebKit::PageClientBase::processDidCrash):
        (WebKit::PageClientBase::didRelaunchProcess):
        (WebKit::PageClientBase::toolTipChanged):
        (WebKit::PageClientBase::setCursor):
        (WebKit::PageClientBase::createPopupMenuProxy):
        (WebKit::PageClientBase::createContextMenuProxy):
        (WebKit::PageClientBase::enterAcceleratedCompositingMode):
        (WebKit::PageClientBase::exitAcceleratedCompositingMode):
        (WebKit::PageClientBase::updateTextInputState):
        (WebKit::PageClientBase::handleDownloadRequest):
        * UIProcess/efl/PageClientBase.h:
        (PageClientBase):
        * UIProcess/efl/PageClientDefaultImpl.cpp:
        (WebKit::PageClientDefaultImpl::PageClientDefaultImpl):
        (WebKit::PageClientDefaultImpl::updateViewportSize):
        (WebKit::PageClientDefaultImpl::convertToDeviceSpace):
        (WebKit::PageClientDefaultImpl::convertToUserSpace):
        (WebKit::PageClientDefaultImpl::didChangeContentsSize):
        * UIProcess/efl/PageClientDefaultImpl.h:
        (WebKit::PageClientDefaultImpl::create):
        (PageClientDefaultImpl):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::PageClientLegacyImpl):
        (WebKit::PageClientLegacyImpl::didCommitLoad):
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        (WebKit::PageClientLegacyImpl::didChangeViewportProperties):
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        (WebKit::PageClientLegacyImpl::pageDidRequestScroll):
        (WebKit::PageClientLegacyImpl::didRenderFrame):
        (WebKit::PageClientLegacyImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientLegacyImpl.h:
        (WebKit::PageClientLegacyImpl::create):
        (PageClientLegacyImpl):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveTitleForFrame):
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didChangeProgress):
        (WebKit::PageLoadClientEfl::didFinishLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didStartProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        (WebKit::PageLoadClientEfl::didReceiveAuthenticationChallengeInFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (WebKit::PageLoadClientEfl::create):
        (PageLoadClientEfl):
        (WebKit::PageLoadClientEfl::view):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        (WebKit::PagePolicyClientEfl::PagePolicyClientEfl):
        * UIProcess/efl/PagePolicyClientEfl.h:
        (WebKit::PagePolicyClientEfl::create):
        (PagePolicyClientEfl):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        (WebKit::PageUIClientEfl::close):
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::toolbarsAreVisible):
        (WebKit::PageUIClientEfl::setToolbarsAreVisible):
        (WebKit::PageUIClientEfl::menuBarIsVisible):
        (WebKit::PageUIClientEfl::setMenuBarIsVisible):
        (WebKit::PageUIClientEfl::statusBarIsVisible):
        (WebKit::PageUIClientEfl::setStatusBarIsVisible):
        (WebKit::PageUIClientEfl::isResizable):
        (WebKit::PageUIClientEfl::setIsResizable):
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        (WebKit::PageUIClientEfl::runOpenPanel):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::showColorPicker):
        (WebKit::PageUIClientEfl::hideColorPicker):
        * UIProcess/efl/PageUIClientEfl.h:
        (WebKit::PageUIClientEfl::create):
        (PageUIClientEfl):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setPageScaleFactor):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::create):
        (PageViewportControllerClientEfl):
        * UIProcess/efl/VibrationClientEfl.cpp:
        (VibrationClientEfl::vibrateCallback):
        (VibrationClientEfl::cancelVibrationCallback):
        (VibrationClientEfl::create):
        (VibrationClientEfl::VibrationClientEfl):
        (VibrationClientEfl::~VibrationClientEfl):
        * UIProcess/efl/VibrationClientEfl.h:
        (VibrationClientEfl):
        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::WebContextMenuProxyEfl):
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        (WebKit::WebContextMenuProxyEfl::hideContextMenu):
        * UIProcess/efl/WebContextMenuProxyEfl.h:
        (WebKit::WebContextMenuProxyEfl::create):
        (WebContextMenuProxyEfl):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::viewWidget):
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp:
        (WebKit::WebPopupMenuProxyEfl::WebPopupMenuProxyEfl):
        (WebKit::WebPopupMenuProxyEfl::showPopupMenu):
        (WebKit::WebPopupMenuProxyEfl::hidePopupMenu):
        * UIProcess/efl/WebPopupMenuProxyEfl.h:
        (WebKit::WebPopupMenuProxyEfl::create):
        (WebPopupMenuProxyEfl):

2013-01-24  Andras Becsi  <andras.becsi@digia.com>

        Remove nonexistent header from WebKit2/Target.pri

        Unreviewed cleanup after r139919.

        * Target.pri:

2013-01-24  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Pages / resources cannot be loaded from qrc files.
        https://bugs.webkit.org/show_bug.cgi?id=107031

        Reviewed by Jocelyn Turcotte.

        Enables WebKit2 Qt applications to load files from the bundled
        qrc files. This is achieved by adding a url scheme handler for
        the "qrc" scheme using the application scheme handler and ignoring
        all handlers for the qrc application scheme that the application might
        set.

        * UIProcess/API/qt/qquickurlschemedelegate.cpp:
        (QQuickQrcSchemeDelegate::QQuickQrcSchemeDelegate):
        (QQuickQrcSchemeDelegate::readResourceAndSend):
        * UIProcess/API/qt/qquickurlschemedelegate_p.h:
        (QQuickQrcSchemeDelegate):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewExperimental::schemeDelegates_Append):
        (QQuickWebViewExperimental::invokeApplicationSchemeHandler):
        * UIProcess/API/qt/tests/qmltests/WebView/tst_applicationScheme.qml:
        * UIProcess/API/qt/tests/qmltests/common/qrctest.html: Added.
        * UIProcess/API/qt/tests/qmltests/resources.qrc:

2013-01-24  Krzysztof Czech  <k.czech@samsung.com>

        [EFL][WK2] Expose accessibility hierarchy in WebKit2-EFL.
        https://bugs.webkit.org/show_bug.cgi?id=106216

        Reviewed by Andreas Kling.

        Create WebPage's accessibility object on WebPage initialization.
        Wrap around WebCore's accessibility objects.
        Updating accessibility hierarchy. Expands accessibility implementation
        of WebKit-GTK to be used in EFL.

        * PlatformEfl.cmake:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp:
        (webPageAccessibilityObjectGetIndexInParent):
        (web_page_accessibility_object_init):
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::platformInitialize):
        (WebKit):
        (WebKit::WebPage::updateAccessibilityTree):

2013-01-23  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Unreviewed build fix after r140605
        https://bugs.webkit.org/show_bug.cgi?id=107787

        Unreviewed build fix.

        Build break after r140605.

        * UIProcess/WebBatteryManagerProxy.cpp:
        * UIProcess/WebBatteryManagerProxy.h:
        (WebBatteryManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy):
        * UIProcess/WebVibrationProxy.cpp:
        * UIProcess/WebVibrationProxy.h:
        (WebVibrationProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * WebProcess/Battery/WebBatteryManager.cpp:
        * WebProcess/Battery/WebBatteryManager.h:
        (WebBatteryManager):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp:
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h:
        (WebNetworkInfoManager):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        * WebProcess/soup/WebSoupRequestManager.h:
        (WebSoupRequestManager):

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

        Cleanup the names of the WebKit2 xpc services
        https://bugs.webkit.org/show_bug.cgi?id=107759

        Reviewed by Anders Carlsson.

        Renames:
            com.apple.WebKit2.WebProcessService -> com.apple.WebKit.WebContent
            com.apple.WebKit2.WebProcessServiceForWebKitDevelopment -> com.apple.WebKit.WebContent.Development

        * Configurations/BaseXPCService.xcconfig: Copied from Source/WebKit2/Configurations/WebProcessService.xcconfig.
        * Configurations/WebContentService.xcconfig: Copied from Source/WebKit2/Configurations/WebProcessService.xcconfig.
        * Configurations/WebContentServiceForDevelopment.xcconfig: Copied from Source/WebKit2/Configurations/WebProcessServiceForWebKitDevelopment.xcconfig.
        * Configurations/WebProcessService.xcconfig: Removed.
        * Configurations/WebProcessServiceForWebKitDevelopment.xcconfig: Removed.
        Rename config files to match new service names and add base config.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToWebProcessServiceForWebKitDevelopment):
        (WebKit::createWebProcessServiceForWebKitDevelopment):
        (WebKit::createWebProcessService):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2Service: Removed.
        * WebProcessService/Info.plist:
        * WebProcessServiceForWebKitDevelopment/Info.plist:
        Update for new names.

2013-01-23  Seulgi Kim  <seulgikim@company100.net>

        Coordinated Graphics : Reduce the number of calls to Functional and number of IPC messages by sending the created/deleted layers in a vector.
        https://bugs.webkit.org/show_bug.cgi?id=107625

        Reviewed by Benjamin Poulain.

        Currently, the number of messages sent by CoordinatedLayerTreeHost is
        equal to the number of layers created/deleted even though they requested
        in the same cycle.
        It's not good since CoreIPC creates functional before sending messages,
        and CoordinatedLayerTreeHostProxy creates functional before
        create/delete layers.

        This patch makes CoordinatedLayerTreeHost send just one
        CreateCompositingLayers message and CoordinatedLayerTreeHostProxy create
        just one functional in a cycle. The same work has been done with
        DeleteCompositingLayers message.

        This patch will reduce the number of calls to Functional and number of
        IPC messages by sending the created/deleted layers in a vector.

        No new tests, no change in behavior.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::createCompositingLayers):
        (WebKit::CoordinatedLayerTreeHostProxy::deleteCompositingLayers):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createLayers):
        (WebKit):
        (WebKit::LayerTreeRenderer::deleteLayers):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::createCompositingLayers):
        (WebKit::CoordinatedLayerTreeHost::deleteCompositingLayers):

2013-01-23  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Add LegacyReceiver to messages.in files.
        https://bugs.webkit.org/show_bug.cgi?id=107760

        Reviewed by Anders Carlsson.

        After r140605, LegacyReceiver attribute is needed to use recevier specific
        memeber functions.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.messages.in:

2013-01-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140612.
        http://trac.webkit.org/changeset/140612
        https://bugs.webkit.org/show_bug.cgi?id=107768

         broke the build (Requested by smfr on #webkit).

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp: Renamed from Source/WebKit2/WebProcess/Storage/WebKeyValueStorageManager.cpp.
        (WebKit):
        (WebKit::WebKeyValueStorageManager::supplementName):
        (WebKit::WebKeyValueStorageManager::WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::initialize):
        (WebKit::keyValueStorageOriginIdentifiers):
        (WebKit::WebKeyValueStorageManager::dispatchDidGetKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::didFinishLoadingOrigins):
        (WebKit::WebKeyValueStorageManager::dispatchDidModifyOrigin):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h: Renamed from Source/WebKit2/WebProcess/Storage/WebKeyValueStorageManager.h.
        (WebKit):
        (WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::localStorageDirectory):
        (WebKit::WebKeyValueStorageManager::indexedDBDatabaseDirectory):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in: Renamed from Source/WebKit2/WebProcess/Storage/WebKeyValueStorageManager.messages.in.

2013-01-23  Ian Vollick  <vollick@chromium.org>

        Introduce the "stacking container" concept.
        https://bugs.webkit.org/show_bug.cgi?id=107734

        Reviewed by Simon Fraser.

        A stacking container is treated just like a stacking context. That
        is, it has z-order lists, it and its descendants are stacked as a
        unit, and when the RenderLayerCompositor does its overlap testing,
        the composited regions for all layer lists take effect only once the
        stacking container is done being processed.

        This patch also adds the function RenderLayer::isStackingContainer().
        Currently, this is equivalent to RenderLayer::isStackingContext(),
        but in future, the definition of stacking container will be broadened
        to encompass more than just stacking contexts.

        Other than the addition of this extra function, the patch is mostly
        comprised of name changes. Any code that used to refer to the
        stacking context concept, but didn't necessarily require a stacking
        context in the strict, CSS-sense, was switched to refer to stacking
        container. No functionality was changed.

        No new tests, no change in functionality.

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

2013-01-23  Anders Carlsson  <andersca@apple.com>

        Move Move WebKeyValueStorageManager to WebProcess/Storage.

        Rubber-stamped by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/WebKeyValueStorageManager.cpp: Renamed from Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp.
        * WebProcess/Storage/WebKeyValueStorageManager.h: Renamed from Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.h.
        * WebProcess/Storage/WebKeyValueStorageManager.messages.in: Renamed from Source/WebKit2/WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in.

2013-01-23  Anders Carlsson  <andersca@apple.com>

        Remove LegacyReceiver from a couple of .messages.in files
        https://bugs.webkit.org/show_bug.cgi?id=107749

        Reviewed by Beth Dakin.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/Notifications/WebNotificationManagerProxy.messages.in:
        * UIProcess/WebGeolocationManagerProxy.cpp:
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.messages.in:
        * UIProcess/WebIconDatabase.cpp:
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        * UIProcess/WebIconDatabase.messages.in:
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.messages.in:
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.messages.in:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.messages.in:
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/Geolocation/WebGeolocationManager.messages.in:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        (WebIconDatabaseProxy):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.messages.in:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in:
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        (WebMediaCacheManager):
        * WebProcess/MediaCache/WebMediaCacheManager.messages.in:
        * WebProcess/Notifications/WebNotificationManager.cpp:
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/Notifications/WebNotificationManager.messages.in:
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        (WebResourceCacheManager):
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebPageGroupProxy):
        * WebProcess/WebPage/WebPageGroupProxy.messages.in:

2013-01-23  Anders Carlsson  <andersca@apple.com>

        Message receiver generation should work in terms of MessageReceiver objects
        https://bugs.webkit.org/show_bug.cgi?id=107742

        Reviewed by Beth Dakin.

        The generated message receiver code should generate the MessageReceiver
        member functions didReceiveMessage and didReceiveSyncMessage instead of
        receiver specific member functions.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.messages.in:
        * PluginProcess/PluginControllerProxy.messages.in:
        * PluginProcess/PluginProcess.messages.in:
        * PluginProcess/WebProcessConnection.messages.in:
        * Scripts/webkit2/messages.py:
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * Scripts/webkit2/model.py:
        (MessageReceiver.__init__):
        (MessageReceiver.has_attribute):
        * Scripts/webkit2/parser.py:
        (parse):
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in:
        * Shared/Plugins/NPObjectMessageReceiver.messages.in:
        * Shared/WebConnection.messages.in:
        * Shared/mac/SecItemShim.messages.in:
        * SharedWorkerProcess/SharedWorkerProcess.messages.in:
        * UIProcess/Downloads/DownloadProxy.messages.in:
        * UIProcess/DrawingAreaProxy.messages.in:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.messages.in:
        * UIProcess/Network/NetworkProcessProxy.messages.in:
        * UIProcess/Notifications/WebNotificationManagerProxy.messages.in:
        * UIProcess/Plugins/PluginProcessProxy.messages.in:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.messages.in:
        * UIProcess/WebApplicationCacheManagerProxy.messages.in:
        * UIProcess/WebContext.messages.in:
        * UIProcess/WebCookieManagerProxy.messages.in:
        * UIProcess/WebDatabaseManagerProxy.messages.in:
        * UIProcess/WebFullScreenManagerProxy.messages.in:
        * UIProcess/WebGeolocationManagerProxy.messages.in:
        * UIProcess/WebIconDatabase.messages.in:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/WebKeyValueStorageManagerProxy.messages.in:
        * UIProcess/WebMediaCacheManagerProxy.messages.in:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/WebResourceCacheManagerProxy.messages.in:
        * UIProcess/mac/RemoteLayerTreeHost.messages.in:
        * UIProcess/mac/SecItemShimProxy.messages.in:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.messages.in:
        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Authentication/AuthenticationManager.messages.in:
        * WebProcess/Cookies/WebCookieManager.messages.in:
        * WebProcess/FullScreen/WebFullScreenManager.messages.in:
        * WebProcess/Geolocation/WebGeolocationManager.messages.in:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.messages.in:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.messages.in:
        * WebProcess/MediaCache/WebMediaCacheManager.messages.in:
        * WebProcess/Network/NetworkProcessConnection.messages.in:
        * WebProcess/Network/WebResourceLoader.messages.in:
        * WebProcess/Notifications/WebNotificationManager.messages.in:
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.messages.in:
        * WebProcess/ResourceCache/WebResourceCacheManager.messages.in:
        * WebProcess/WebCoreSupport/WebDatabaseManager.messages.in:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebInspector.messages.in:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in:
        * WebProcess/WebProcess.messages.in:

2013-01-23  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: remove CoordinatedLayerInfo::encode/decode.
        https://bugs.webkit.org/show_bug.cgi?id=107644

        Reviewed by Anders Carlsson.

        We want to remove the dependency on CoreIPC from CoordinatedLayerInfo because we
        will extract Coordinated Graphics from WK2.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebKit):
        * Shared/CoordinatedGraphics/CoordinatedLayerInfo.cpp: Removed.
        * Shared/CoordinatedGraphics/CoordinatedLayerInfo.h:
        * Target.pri:

2013-01-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2] Replace some internal API usage in EwkView with C API
        https://bugs.webkit.org/show_bug.cgi?id=107652

        Reviewed by Benjamin Poulain.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_url_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_html_string_load):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        (ewk_view_text_matches_count):
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):

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

        Build fix.

        * Platform/CoreIPC/Connection.cpp: (CoreIPC::Connection::sendSyncMessage):
        Copy/paste trouble fix.

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

        <rdar://problem/13064414> REGRESSION(r139514): didFailToSendSyncMessage is not called by Connection
        https://bugs.webkit.org/show_bug.cgi?id=107715

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        Correcting a misapplied edit - didFailToSendSyncMessage should be kept in main
        thread message sending, not in secondary thread.

2013-01-23  Brady Eidson  <beidson@apple.com>

        Recursion handling cancelled authentication challenges in NetworkProcess
        <rdar://problem/13024541> and https://bugs.webkit.org/show_bug.cgi?id=107702

        Reviewed by Alexey Proskuryakov.

        This turned in to both a bug fix with authentication and a minimal refactoring of NetworkResourceLoader.

        - Rename ::stop to ::resourceHandleStopped
        - Move all cleanup code to ::resourceHandleStopped
        - Schedule a resourceHandleStopped call when an authentication cancellation occurs
        - Tell the WebResourceLoader to cancel when an authentication cancellation occurs

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::performStops):
        (WebKit::NetworkResourceLoader::resourceHandleStopped):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::NetworkResourceLoader::receivedAuthenticationCancellation):
        * NetworkProcess/NetworkResourceLoader.h:

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::cancelResourceLoader):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2013-01-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use C API inside ewk_cookie_manager
        https://bugs.webkit.org/show_bug.cgi?id=107661

        Reviewed by Alexey Proskuryakov.

        Use C API inside ewk_cookie_manager instead of
        accessing C++ classes directly and violating
        layering.

        * PlatformEfl.cmake:
        * UIProcess/API/C/soup/WKCookieManagerSoup.cpp: Added.
        (toSoupCookiePersistentStorageType):
        (WKCookieManagerSetCookiePersistentStorage): Add C API for setting
        the persistent storage path and type when using libsoup.
        * UIProcess/API/C/soup/WKCookieManagerSoup.h: Added.
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::cookieManager):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (EwkCookieManager::EwkCookieManager):
        (EwkCookieManager::~EwkCookieManager):
        (EwkCookieManager::setPersistentStorage):
        (EwkCookieManager::setHTTPAcceptPolicy):
        (EwkCookieManager::clearHostnameCookies):
        (EwkCookieManager::clearAllCookies):
        (EwkCookieManager::watchChanges):
        (EwkCookieManager::getHostNamesWithCookies):
        (EwkCookieManager::getHTTPAcceptPolicy):
        (ewk_cookie_manager_persistent_storage_set):
        (ewk_cookie_manager_hostname_cookies_clear):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (EwkCookieManager::create):
        (EwkCookieManager):

2013-01-22  Anders Carlsson  <andersca@apple.com>

        Use a platforom strategy for local storage
        https://bugs.webkit.org/show_bug.cgi?id=107600

        Reviewed by Andreas Kling.

        Update for new storage strategy.

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

2013-01-21  Kentaro Hara  <haraken@chromium.org>

        Implement UIEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107430

        Reviewed by Adam Barth.

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        UIEvent constructor is implemented under a DOM4_EVENTS_CONSTRUCTOR flag,
        which is enabled on Safari and Chromium for now.

        * Configurations/FeatureDefines.xcconfig:

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

        Move sandbox initialization to ChildProcess
        https://bugs.webkit.org/show_bug.cgi?id=107486

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeSandbox): Removed. We no longer need this function
        to be implemented in each process type.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::initializeSandbox): Removed a custom (and incomplete) implementation.
        (WebKit::NetworkProcess::processUpdateSandboxInitializationParameters): Clear
        sandbox profile path in parameters, telling ChildProcess to not enter a sandbox.

        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMac.mm:
        Added FIXMEs, saying that we should switch to ChildProcess implementation.

        * Shared/ChildProcess.cpp: Dummy implementations for other platforms.

        * Shared/ChildProcess.h: Added processUpdateSandboxInitializationParameters, which
        child processes will override to change sandbox initialization parameters.

        * Shared/SandboxInitializationParameters.h: Added.
        * Shared/mac/SandboxInitialiationParametersMac.mm: Added.
        Abstracts out sandbox parameter vector for coding safety. Encapsulates other
        things that subclasses will want to do differently.

        * Shared/mac/ChildProcessMac.mm: (WebKit::ChildProcess::initializeSandbox):
        Added a shared implementation, based largely on WebProcess version.

        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm: Removed custom sandboxing code.

        * WebKit2.xcodeproj/project.pbxproj: Added SandboxInitializationParameters files.

        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        Updated dummy implementations to match ChildProcess.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit): Moved sandboxing code to ChildProcess.
        (WebKit::WebProcess::processUpdateSandboxInitializationParameters): Override
        profile path, because default one doesn't work for WebProcessService.

2013-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Enable Page Visibility (PAGE_VISIBILITY_API)
        https://bugs.webkit.org/show_bug.cgi?id=107230

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2013-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        Remove empty file WebPageProxyMessageKinds.h
        https://bugs.webkit.org/show_bug.cgi?id=107335

        Reviewed by Kentaro Hara.

        * GNUmakefile.list.am:
        * Shared/CoreIPCSupport/WebPageProxyMessageKinds.h: Removed.

2013-01-22  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Build PDFPlugin everywhere, enable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=107117

        Reviewed by Alexey Proskuryakov.

        Since PDFLayerController SPI is all forward-declared, the plugin should build
        on all Mac platforms, and can be enabled at runtime.

        * Configurations/FeatureDefines.xcconfig:

2013-01-21  Dirk Schulze  <dschulze@adobe.com>

        Add build flag for Canvas's Path object (disabled by default)
        https://bugs.webkit.org/show_bug.cgi?id=107473

        Reviewed by Dean Jackson.

        Add CANVAS_PATH build flag to build systems.

        * Configurations/FeatureDefines.xcconfig:

2013-01-21  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add APIs to set/get view source mode
        https://bugs.webkit.org/show_bug.cgi?id=106633

        Reviewed by Gyuyoung Kim.

        Added APIs to set/get view source mode for enabling to load
        the source code of the web page.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_source_mode_set):
        (ewk_view_source_mode_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setMainFrameInViewSourceMode):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::mainFrameInViewSourceMode):
        (WebPageProxy):

2013-01-21  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Implement WebInspector::localizedStringsURL() on EFL
        https://bugs.webkit.org/show_bug.cgi?id=107363

        Reviewed by Benjamin Poulain.

        Implement WebInspector::localizedStringsURL() method to return the
        file URL of the localizedStrings.js.

        This prevents printing warnings about "Localized string not found" in
        the console and fixes Web inspector related failing tests on the bots.

        * WebProcess/WebPage/efl/WebInspectorEfl.cpp:
        (WebKit::WebInspector::localizedStringsURL):

2013-01-21  Kiran Muppala  <cmuppala@apple.com>

        Enable process suppression by default on Mac
        https://bugs.webkit.org/show_bug.cgi?id=106804

        Reviewed by Alexey Proskuryakov.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Change initialized value of
        m_processSuppressionEnabled from false to true.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitialize): Since process suppression
        is no longer disabled on construction, do not disable it for global
        child processes either.  Instead enable occlusion notifications as
        they are needed to trigger process suppression.

2013-01-17  Andy Estes  <aestes@apple.com>

        Add a USE() macro for content filtering code
        https://bugs.webkit.org/show_bug.cgi?id=107098

        Reviewed by Mark Rowe.

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

2013-01-21  Anders Carlsson  <andersca@apple.com>

        Don't null out the IPC connection in ChildProcess:terminate
        https://bugs.webkit.org/show_bug.cgi?id=107469
        <rdar://problem/13015294>

        Reviewed by Dan Bernstein.

        We already invalidate the connection, and Connection::sendMessage checks if a connection
        is valid and bails if it isn't, so the only thing that nulling out the connection here does
        is that it would force us to add random connection null checks everywhere.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::terminate):

2013-01-21  Joone Hur  <joone.hur@intel.com>

        [EFL] API unit tests are running extremely slow on the bots
        https://bugs.webkit.org/show_bug.cgi?id=104665

        Reviewed by Gyuyoung Kim.

        Clear HTTP cache files before running the unit tests, which prevents 
        performance degradation due to so many cache files.

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

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

        REGRESSION (r140285): GTK uses WKPageResourceLoadClient which was removed
        https://bugs.webkit.org/show_bug.cgi?id=107421

        Unreviewed buildfix.

        * GNUmakefile.list.am:
        * UIProcess/API/gtk/WebKitResourceLoadClient.cpp: Removed.
        * UIProcess/API/gtk/WebKitResourceLoadClient.h: Removed.
        * UIProcess/API/gtk/WebKitWebView.cpp: No longer attach unexisting ResourceLoadClient.
        (webkitWebViewConstructed):

2013-01-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r139781.
        http://trac.webkit.org/changeset/139781
        https://bugs.webkit.org/show_bug.cgi?id=107443

        This patch seems to cause flakiness on Qt (Requested by chris-
        qBT_work on #webkit).

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

2013-01-21  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        REGRESSION (r140285): EFL uses WKPageResourceLoadClient which was removed
        https://bugs.webkit.org/show_bug.cgi?id=107417

        Reviewed by Gyuyoung Kim.

        We had no choice but remove the ResourceLoadClientEfl after r140285
        and thus our public API signals depending on it. The test_ewk2_auth_request
        unit test was skipped because it depends these signals and will be fixed in a
        different patch.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_resource.cpp: Removed.
        * UIProcess/API/efl/ewk_resource.h: Removed.
        * UIProcess/API/efl/ewk_resource_private.h: Removed.
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/efl/ResourceLoadClientEfl.cpp: Removed.
        * UIProcess/efl/ResourceLoadClientEfl.h: Removed.

2013-01-20  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        Remove support getting per-resource callbacks in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=107405

        Reviewed by Sam Weinig.

        EFL, GTK and Qt WebKit2 build fixes after r140285.
        Remove from build WebResourceLoadClient.{cpp,h} deleted by r140285.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:

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

        Remove support getting per-resource callbacks in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=107405

        Reviewed by Anders Carlsson.

        Removes support for the WKPageResourceLoadClient. Access to per-resource
        callbacks are still available in the bundle, and via the WebInspector.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Stop handling per-resource messages and forwarding them to the API.

        * UIProcess/WebResourceLoadClient.cpp: Removed.
        * UIProcess/WebResourceLoadClient.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        Remove the files.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::WebFrameLoaderClient::dispatchWillSendRequest):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveResponse):
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoading):
        Stop sending per-resource messages to the UIProcess.

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

        Unreviewed. Simple indentation fix.

        * GNUmakefile.am:

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

        Remove obsolete plug-in sandboxing code.
        https://bugs.webkit.org/show_bug.cgi?id=107362

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj:
        * DerivedSources.make:
        * PluginProcess/mac/com.apple.WebKit.PluginProcess.sb.in: Removed.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeSandbox): Fixed a memory leak in code that stays.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):

        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.h:
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        Removed API related parts. Remaining code will move to a better place in a follow-up
        patch, just keeping it here for easier reviewing.
        (enterSandbox): Removed no longer used arguments.

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

        Don't initialize AppKit for processes that don't use it
        https://bugs.webkit.org/show_bug.cgi?id=107216

        Reviewed by Alexey Proskuryakov.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMainDelegate::doPreInitializationWork):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMainDelegate::doPreInitializationWork):
        Move AppKit initialization to the two places it is used, the WebProcessMain and the PluginProcessMain.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        Remove redundant call to InitializeWebKit2().

        * Shared/mac/ChildProcessMain.h:
        (WebKit::ChildProcessMain):
        Remove initialization of AppKit now that the delegate does it if necessary,
        and move InitializeWebKit2() to after delegate.doPreInitializationWork(), so
        the delegate has a chance to set things up it, in this case, calling 
        RunLoop::setUseApplicationRunLoopOnMainRunLoop if needed.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeProcess):
        Remove now redundant call to RunLoop::setUseApplicationRunLoopOnMainRunLoop().

        * WebProcess/mac/WebProcessServiceEntryPoints.mm:
        (WebKit::WebProcessServiceEventHandler):
        (webProcessServiceMain):
        (initializeWebProcessForWebProcessServiceForWebKitDevelopment):
        Call WebCore::RunLoop::setUseApplicationRunLoopOnMainRunLoop() and make call to InitializeWebKit2()
        more consistent.

2013-01-18  Tim Horton  <timothy_horton@apple.com>

        [wk2] Intrinsic content size should report a flexible width if the content is not wider than the minimum layout width
        https://bugs.webkit.org/show_bug.cgi?id=107334
        <rdar://problem/12960009>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setIntrinsicContentSize:]): If the content is laid-out at or below the minimum layout width, it's flexible; otherwise, we need to inform autolayout that we require more space via our intrinsic content size.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Allow auto-sizing to expand its width beyond the minimum if needed.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setMinimumLayoutWidth): Allow auto-sizing to expand its width beyond the minimum if needed.

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

        <rdar://problem/13042826> REGRESSION (r139985): Full Screen Youtube loses keyboard and mouse control
        https://bugs.webkit.org/show_bug.cgi?id=107191

        Reviewed by Darin Adler.

        Moved initialization from platformInitializePluginProcess to platformInitializeProcess,
        because the former is called too late. In r139985, I used a correct location for
        WebProcess, but not for PluginProcess.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
        (WebKit::PluginProcess::platformInitializePluginProcess):

2013-01-18  Brady Eidson  <beidson@apple.com>

        Rework NetworkProcess resource load identifiers.
        <rdar://problem/12934449> and https://bugs.webkit.org/show_bug.cgi?id=107192

        Reviewed by Alexey Proskuryakov.

        Having the NetworkProcess vend out identifiers to WebProcesses was a bad idea.
        This patch reverts that so that WebProcesses are in control of their own unique identifiers.

        The NetworkProcess doesn't need identifiers at all.
        It can represent outstanding loads with the loaders themselves.

        This patch adds a "SchedulableLoader" base class for normal and synchronous loaders.
        It reworks each use of identifiers into using SchedulableLoaders instead.

        This also gave an opportunity to move the serving of pending requests for a host into the 
        HostRecord itself which cleans certain things up nicely.

        Change HostRecord to have queues of SchedulableLoaders instead of identifiers.
        Make HostRecord responsible for actually starting the loaders in its queues:
        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::~HostRecord):
        (WebKit::HostRecord::scheduleResourceLoader):
        (WebKit::HostRecord::addLoaderInProgress):
        (WebKit::HostRecord::removeLoader):
        (WebKit::HostRecord::hasRequests):
        (WebKit::HostRecord::servePendingRequestsForQueue):
        (WebKit::HostRecord::servePendingRequests):
        (WebKit::HostRecord::limitsRequests):
        * NetworkProcess/HostRecord.h:
        (WebKit::HostRecord::create): HostRecord is now also RefCounted. new and delete are so 2004.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad): Create the loader then schedule
          it with the scheduler, instead of having the scheduler create it.
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        Remove maps and sets of identifiers, replacing them with sets of SchedulableLoaders where needed.
        Rely on HostRecords to actually manage sets of SchedulableLoaders.
        Rely on HostRecord to do the actual serving of its pending requests:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::NetworkResourceLoadScheduler):
        (WebKit::NetworkResourceLoadScheduler::scheduleLoader):
        (WebKit::NetworkResourceLoadScheduler::hostForURL):
        (WebKit::NetworkResourceLoadScheduler::removeLoader):
        (WebKit::NetworkResourceLoadScheduler::receivedRedirect):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequests):
        (WebKit::NetworkResourceLoadScheduler::removeScheduledLoaders):
        (WebKit::NetworkResourceLoadScheduler::scheduleRemoveLoader):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        A new base class for all loaders that the scheduler and HostRecords might need to know about:
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        (WebKit::SchedulableLoader::~SchedulableLoader):
        * NetworkProcess/SchedulableLoader.h:
        (WebKit::SchedulableLoader::loadParameters):
        (WebKit::SchedulableLoader::connectionToWebProcess):
        (WebKit::SchedulableLoader::isSynchronous):
        (WebKit::SchedulableLoader::setHostRecord):
        (WebKit::SchedulableLoader::hostRecord):

        Change to inherit from SchedulableLoader, removing some of the duplicated data and methods:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::connection):
        (WebKit::NetworkResourceLoader::destinationID):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::NetworkResourceLoader::stop):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::NetworkResourceLoader::willSendRequest):
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::create):

        Change to inherit from SchedulableLoader, removing some of the duplicated data and methods:
        * NetworkProcess/SyncNetworkResourceLoader.cpp:
        (WebKit::SyncNetworkResourceLoader::SyncNetworkResourceLoader):
        (WebKit::SyncNetworkResourceLoader::start):
        * NetworkProcess/SyncNetworkResourceLoader.h:
        (WebKit::SyncNetworkResourceLoader::create):
        (WebKit::SyncNetworkResourceLoader::isSynchronous):

        Fold the WebProcess resource load identifier in with the load parameters:
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::identifier):

        The identifier is preset in the WebProcess and doesn't come from the NetworkProcess,
        so the message to schedule a load can now be asynchronous:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):

        Update to include a WebProcess generated identifier along with synchronous loads:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

        * WebKit2.xcodeproj/project.pbxproj:

2013-01-18  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: CoordinatedTile::updateBackBuffer() returns a dirty rect.
        https://bugs.webkit.org/show_bug.cgi?id=107196

        Reviewed by Kenneth Rohde Christiansen.

        Currently, CoordinatedTile::updateBackBuffer() always returns an empty vector.
        This patch makes CoordinatedTile::updateBackBuffer() return a correct dirty rect.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit::CoordinatedTile::updateBackBuffer):

2013-01-17  Tim Horton  <timothy_horton@apple.com>

        [WK2] Minimum layout width auto-sizing should use FrameView::enableAutoSizeMode so that it can shrink the viewport
        https://bugs.webkit.org/show_bug.cgi?id=107200
        <rdar://problem/12849029>

        Reviewed by Simon Fraser.

        Make use of FrameView's auto-size mode to allow WKView's computed intrinsic content
        size to shrink below the current viewport size.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMinimumLayoutWidth): Forward minimumLayoutWidth changes to WebPage.
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry): Remove minimumLayoutWidth argument on updateGeometry.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Enable auto-size mode on the new FrameView if needed.
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateGeometry): Remove minimumLayoutWidth argument.
        * WebProcess/WebPage/DrawingArea.messages.in: Remove minimumLayoutWidth argument on updateGeometry.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_minimumLayoutWidth to 0.
        (WebKit::WebPage::setMinimumLayoutWidth): Keep track of minimumLayoutWidth on WebPage. Update auto-sizing state if needed.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::minimumLayoutWidth):
        * WebProcess/WebPage/WebPage.messages.in: Add SetMinimumLayoutWidth.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea): Remove storage for m_minimumLayoutWidth. We can get it from WebPage instead.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged): Grab minimumLayoutWidth from WebPage.
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry): Don't setSize() if auto-sizing is enabled; FrameView will do the right thing.

2013-01-17  Jon Lee  <jonlee@apple.com>

        Do not track user interaction for plugins that are not snapshotted
        https://bugs.webkit.org/show_bug.cgi?id=107211
        <rdar://problem/12967277>

        Reviewed by Dean Jackson.

        When the user interacts with a snapshotted plug-in, we extend that plug-in origin's
        expiration date. However, plug-ins may not be snapshotted for other reasons than the
        user's initial opt-in. In this case, that plug-in's origin might be not be in the cached
        table. This is an edge case that was not initially considered.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::plugInDidReceiveUserInteraction): Convert the assertion to an if
        check, and return early if the entry is not found in the cache table.

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

        REGRESSION (r139516): NetworkResourceLoadScheduler::receivedRedirect is not called.

        Rubber-stamped by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRequest): Reverted a small part of r139516.

2013-01-17  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove redundant behaviors in LayerTreeRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=107084

        Reviewed by Noam Rosenthal.

        There are two changes.
        1. It is redundant to call GraphicsLayer::removeFromParent() or
        GraphicsLayer::removeAllChildren() before deleting GraphicsLayer, because the
        destructor of GraphicsLayerTextureMapper removes a parent and all children.
        2. LayerTreeRenderer::setRootLayerID() does not need to remove all children of
        rootLayer because this method can be called only once.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::deleteLayer):
        (WebKit::LayerTreeRenderer::setRootLayerID):
        (WebKit::LayerTreeRenderer::purgeGLResources):

2013-01-17  Timothy Hatcher  <timothy@apple.com>

        Make logging console messages to STDOUT work in WebKit2 via a new setting.

        https://bugs.webkit.org/show_bug.cgi?id=107157

        Reviewed by Joseph Pecoraro.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetLogsPageMessagesToSystemConsoleEnabled): Added.
        (WKPreferencesGetLogsPageMessagesToSystemConsoleEnabled): Added.
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::createInspectorPageGroup): Enable logging in debug builds.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Set new setting in WebCore.

2013-01-17  Brady Eidson  <beidson@apple.com>

        Each NetworkConnectionToWebProcess should keep its own map of NetworkResourceLoaders
        https://bugs.webkit.org/show_bug.cgi?id=107166

        Reviewed by Alexey Proskuryakov.

        NetworkConnectionToWebProcess now keeps its own id->loader map so it can directly address them as needed:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        * NetworkProcess/NetworkConnectionToWebProcess.h:

        NetworkResourceLoadScheduler no longer keeps an identifier -> loader map:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleResourceLoad):
        (WebKit::NetworkResourceLoadScheduler::removeLoadIdentifier):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        There is no longer such a thing as NetworkConnectionToWebProcessObserver:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose):
        * NetworkProcess/NetworkResourceLoader.h:

2013-01-17  Tim Horton  <timothy_horton@apple.com>

        Remove an incorrect ASSERT() after r140002.

        Reviewed by Simon Fraser.

        setRootCompositingLayer(null) is valid now.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):

2013-01-17  Poul Sysolyatin  <psytonx@gmail.com>

        32-bit build for Qt5 on Mac OS fails.
        https://bugs.webkit.org/show_bug.cgi?id=107094

        We need to define NS_BUILD_32_LIKE_64 for 32-bit build for Mac OS.
        Fixed 32-bit build detection for support Qt5.

        Reviewed by Benjamin Poulain.

        * Target.pri:

2013-01-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Build with LevelDB when IndexedDB is enabled
        https://bugs.webkit.org/show_bug.cgi?id=103220

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: When IndexedDatabase is enabled add the leveldb convenience
        library to the shared library link phase.

2013-01-17  Tim Horton  <timothy_horton@apple.com>

        [WK2] TiledCoreAnimationDrawingArea should unparent its layer tree when requested
        https://bugs.webkit.org/show_bug.cgi?id=107108
        <rdar://problem/12549879>

        Reviewed by Darin Adler and Simon Fraser.

        Currently, TiledCoreAnimationDrawingArea returns early if asked to unparent
        its layer tree, to prevent flashing when switching tabs. We have new plans
        to alleviate the flashing, but first, we should reinstate unparenting the root layer,
        to allow underlying libraries to better manage the memory backing all compositing layers.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):

2013-01-17  Tim Horton  <timothy_horton@apple.com>

        Fix the Mac build sans ENABLE(CSS_FILTERS)

        Reviewed by Darin Adler.

        Include FloatRect in RemoteGraphicsLayer.mm; it's included by chance currently,
        via something that must be compiled out without CSS_FILTERS (or SVG, or shaders, or something).

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:

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

        Don't use NSApplication run loop in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=107061

        Reviewed by Anders Carlsson.

        Only WebProcess and PluginProcess should use Cocoa APIs that require the run loop.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeProcess):

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

        Update sandbox rules after r128003
        https://bugs.webkit.org/show_bug.cgi?id=106840

        Reviewed by Darin Adler.

        * WebProcess/com.apple.WebProcess.sb.in: Additional Lion only fixes.

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

        Make debug-safari --target-web-process work again
        https://bugs.webkit.org/show_bug.cgi?id=107088

        Reviewed by Anders Carlsson.

        --target-web-process was made harder to use during recent refactoring
        by requiring users to pass a -ui-process-name parameter in addition to
        the -client-executable. Instead, we should conjure up that name from
        the information we already have at our disposal.

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMainDelegate::getConnectionIdentifier):
        Simplify by making the non-client-executable path use the base
        class implementation.

        (WebKit::WebProcessMainDelegate::getClientIdentifier):
        Ditto.

        (WebKit::WebProcessMainDelegate::getClientProcessName):
        Added. Create a client process name (its actually not too important what it is, as it
        is only used to show a name in Activity Monitor) from the passed in client executable
        path.

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

        Fix crashes on the bots.

        The WebKit LoaderStrategy for loading synchronously was only implemented
        for the case where you have a network process. When you don't, we should
        be using the base implementation.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):

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

        Update Owners file.

        * Owners:

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

        Remove unused AddLoadInProgress message
        https://bugs.webkit.org/show_bug.cgi?id=107077

        Reviewed by Dan Bernstein.

        Dead code is dead.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

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

        Fix crash when destroying a plug-in with pending URL requests
        https://bugs.webkit.org/show_bug.cgi?id=107075
        <rdar://problem/12513871>

        Reviewed by Sam Weinig.

        In PluginView::destroyPluginAndReset, make sure to cancel any outstanding URL requests since the PluginView
        object will stay around and would otherwise start loading URLs from stopped plug-ins.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::Stream::start):
        Assert that the plug-in is alive.
        
        (WebKit::PluginView::destroyPluginAndReset):
        Empty out the pending URL requests vector and stop the timer.

2013-01-16  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] PageUIClientEfl should keep in sync with WKPageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=107060

        Reviewed by Benjamin Poulain.

        Rearrange the order of functions in PageUIClientEfl.
        Rename closePage() to close().

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::close):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        (WebKit::PageUIClientEfl::close):
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::showColorPicker):
        (WebKit::PageUIClientEfl::hideColorPicker):
        * UIProcess/efl/PageUIClientEfl.h:
        (PageUIClientEfl):

2013-01-16  Brady Eidson  <beidson@apple.com>

        Synchronous XMLHTTPRequests need to go to the NetworkProcess.
        <rdar://problem/12951765> and https://bugs.webkit.org/show_bug.cgi?id=106826

        Reviewed by Sam Weinig and Alexey Proskuryakov.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously): Entry point for WebCore to get
          synchronous requests to the NetworkProcess.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad): Create a SyncNetworkResourceLoader
          and schedule it.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleSyncNetworkResourceLoader):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequestsForHost): Serve synchronous loaders
          before async loaders.
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        A class that encapsulates a synchronous load request and the CoreIPC reply to be made once it is complete:
        * NetworkProcess/SyncNetworkResourceLoader.cpp: Added.
        (WebKit::SyncNetworkResourceLoader::SyncNetworkResourceLoader):
        (WebKit::SyncNetworkResourceLoader::start):
        * NetworkProcess/SyncNetworkResourceLoader.h: Copied from Source/WebKit2/NetworkProcess/HostRecord.h.
        (WebKit::SyncNetworkResourceLoader::create):
        (WebKit::SyncNetworkResourceLoader::setIdentifier):
        (WebKit::SyncNetworkResourceLoader::identifier):
        (WebKit::SyncNetworkResourceLoader::loadParameters):

        Add a second queue of sync loaders:
        * NetworkProcess/HostRecord.h:
        (WebKit::HostRecord::syncLoadersPending):

        Add comments to explicitly spell out the current reliance on some messages that are currently synchronous:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRequest):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpace):

        * WebKit2.xcodeproj/project.pbxproj:

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

        WebProcess should not access ~/Library/Caches/com.apple.WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=107055

        Reviewed by Anders Carlsson.

        * WebProcess/com.apple.WebProcess.sb.in: Remove the rule allowing access.

        * WebProcess/mac/WebProcessMac.mm: (WebKit::WebProcess::platformInitializeWebProcess):
        Use a correct cache directory even if NetworkProcess is in use. Not all loading has
        moved to this process yet.

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

        Remove CoreIPCMessageKinds.h
        https://bugs.webkit.org/show_bug.cgi?id=107048

        Reviewed by Beth Dakin.

        Use named IPC messages instead.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/CoreIPCMessageKinds.h: Removed.
        * Platform/CoreIPC/MessageID.h:
        (MessageID):
        (CoreIPC::MessageID::stripMostSignificantBit):
        (CoreIPC::MessageID::operator==):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::receiveSourceEventHandler):
        * WebKit2.xcodeproj/project.pbxproj:

2013-01-15  Jer Noble  <jer.noble@apple.com>

        Add a Setting to disable QTKit media engine.
        https://bugs.webkit.org/show_bug.cgi?id=106972

        Reviewed by Eric Carlson.

        Add a WebKit2 API to access WebCore QTKitEnabled settings.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetQTKitEnabled): Pass through to WebCore.
        (WKPreferencesGetQTKitEnabled): Ditto.
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Synchronize WebKit2/WebCore settings.

2013-01-16  Kiran Muppala  <cmuppala@apple.com>

        Groundwork to enable process suppression by default on Mac
        https://bugs.webkit.org/show_bug.cgi?id=106513

        Reviewed by Alexey Proskuryakov.

        Process suppression has so far been controlled by a user default and
        disabled by default.  This patch provides the groundwork to enable it by
        default and adds a private API to enable/disable it on a per-context
        basis.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize): Add comment about
        initilization of application occlusion state.
        * UIProcess/API/C/mac/WKContextPrivateMac.cpp: Added.
        (WKContextGetProcessSuppressionEnabled):
        (WKContextSetProcessSuppressionEnabled):
        Add private API to enable/disable process suppression on a per-context
        basis.
        * UIProcess/API/C/mac/WKContextPrivateMac.h: Added.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching): Check if owning
        context has process suppression enabled before updating application
        occlusion state.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching): Ditto.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Check if
        process suppression is enabled for global child processes before
        updating application occlusion state.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        (WebKit::SharedWorkerProcessProxy::didFinishLaunching): Ditto.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::create): Remove call to
        initializeProcessSuppressionSupport, since platformInitialize has been
        modified to perform initialization.
        (WebKit::WebContext::WebContext): Initialize new member variable
        m_processSuppressionEnabled to false.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::processSuppressionEnabled): Remove "Support"
        from the method name.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::updateGlobalChildProcessesApplicationOcclusionState):
        (WebKit::applicationOcclusionStateChanged): Update the application
        occlusion state of child processes having process suppresion enabled.
        (WebKit::applicationBecameVisible):
        (WebKit::applicationBecameOccluded):
        Simplify by moving code to applicationOcclusionStateChanged.
        (WebKit::registerOcclusionNotificationHandlers): Fix typos.
        (WebKit::unregisterOcclusionNotificationHandlers): Add
        method to unregister occlusion notification handlers when no context
        has process suppression enabled.
        (WebKit::enableOcclusionNotifications):
        (WebKit::disableOcclusionNotifications):
        (WebKit::enableProcessSuppressionForGlobalChildProcesses):
        (WebKit::disableProcessSuppressionForGlobalChildProcesses):
        (WebKit::processSuppressionIsEnabledForAnyContext):
        (WebKit::processSuppressionIsEnabledForAllContexts):
        (WebKit::WebContext::platformInitialize): Disable process suppression
        for global child processes since process suppression is disabled for a
        context on construction.
        (WebKit::WebContext::setProcessSuppressionEnabled):
        (WebKit::WebContext::updateChildProcessesApplicationOcclusionState):
        (WebKit::WebContext::applicationIsOccluded):
        (WebKit::WebContext::processSuppressionEnabledForGlobalChildProcesses):
        (WebKit::WebContext::processSuppressionEnabledChanged): Update child
        processes application occlusion state, enable/disable occlusion
        notifications and enable/disable process suppression for global child
        processes.
        * WebKit2.xcodeproj/project.pbxproj:

2013-01-15  Anders Carlsson  <andersca@apple.com>

        Merge LayerTreeHostCA and LayerTreeHostMac
        https://bugs.webkit.org/show_bug.cgi?id=106967

        Reviewed by Sam Weinig.

        There's no need to have a LayerTreeHostCA base class anymore, just merge it into LayerTreeHostMac.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp: Removed.
        * WebProcess/WebPage/ca/LayerTreeHostCA.h: Removed.
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        (LayerTreeHostMac):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::LayerTreeHostMac):
        (WebKit::LayerTreeHostMac::~LayerTreeHostMac):
        (WebKit::LayerTreeHostMac::layerTreeContext):
        (WebKit::LayerTreeHostMac::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit):
        (WebKit::LayerTreeHostMac::setRootCompositingLayer):
        (WebKit::LayerTreeHostMac::invalidate):
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostMac::scrollNonCompositedContents):
        (WebKit::LayerTreeHostMac::forceRepaint):
        (WebKit::LayerTreeHostMac::sizeDidChange):
        (WebKit::LayerTreeHostMac::deviceScaleFactorDidChange):
        (WebKit::LayerTreeHostMac::didInstallPageOverlay):
        (WebKit::LayerTreeHostMac::didUninstallPageOverlay):
        (WebKit::LayerTreeHostMac::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostMac::pauseRendering):
        (WebKit::LayerTreeHostMac::resumeRendering):
        (WebKit::LayerTreeHostMac::setLayerHostingMode):
        (WebKit::LayerTreeHostMac::notifyAnimationStarted):
        (WebKit::LayerTreeHostMac::notifyFlushRequired):
        (WebKit::LayerTreeHostMac::paintContents):
        (WebKit::LayerTreeHostMac::deviceScaleFactor):
        (WebKit::LayerTreeHostMac::flushLayers):
        (WebKit::LayerTreeHostMac::initialize):
        (WebKit::LayerTreeHostMac::performScheduledLayerFlush):
        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        (WebKit::LayerTreeHostMac::createPageOverlayLayer):
        (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):

2013-01-15  Tim Horton  <timothy_horton@apple.com>

        Clamp TileCache visibleRect to WKView's visibleRect
        https://bugs.webkit.org/show_bug.cgi?id=106601
        <rdar://problem/12843164>

        Reviewed by Simon Fraser.

        Some clients expand the WKView to be much larger than what is visible on screen, and
        control scrolling with their own view. Currently, we will create tiles for the entire
        view, consuming a great deal of memory, and can sometimes factor scrollbars which can
        never exist into layout. Piggyback on WKView SPI (the property minimumWidthForAutoLayout,
        renamed from minimumLayoutWidth) to drop into a mode where we disable main frame scrolling
        and respect the WKView's visibleRect when creating tiles.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]): Update the page's viewExposedRect from our visibleRect.
        (-[WKView _updateWindowAndViewFrames]): Update the page's viewExposedRect from our visibleRect.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): The main frame is scrollable by default.
        (-[WKView enableFrameSizeUpdates]): If frame size updates become enabled, update the
        page's viewExposedRect from our visibleRect.
        (-[WKView setMinimumLayoutWidth:]): Rename minimumLayoutWidth property to minimumWidthForAutoLayout.
        Warn once if the old one is used.
        (-[WKView minimumWidthForAutoLayout]):
        (-[WKView setMinimumWidthForAutoLayout:]): Adjust the minimum layout width, whether the main frame
        is scrollable, and update the page's viewExposedRect if needed.
        * UIProcess/API/mac/WKViewPrivate.h: Added minimumWidthForAutoLayout property.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add viewExposedRectChanged/setMainFrameIsScrollable.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::viewExposedRectChanged): Forward viewExposedRectChanged to WebPage.
        (WebKit::WebPageProxy::setMainFrameIsScrollable): Forward setMainFrameIsScrollable to WebPage.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Disable scrollbars and scrolling if
        main frame scrollability is disabled.
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setExposedRect): Added empty default implementation.
        (WebKit::DrawingArea::mainFrameScrollabilityChanged): Added empty default implementation.
        (DrawingArea):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowAndViewFramesChanged): We don't need the WebCore:: namespace.
        (WebKit::WebPage::viewExposedRectChanged): Forward exposed rect changes to DrawingArea (only TiledCoreAnimationDrawingArea cares, for now).
        (WebKit::WebPage::setMainFrameIsScrollable): Forward scrollability changes to DrawingArea and the main FrameView.
        (WebKit::WebPage::drawRectToImage): We don't need the WebCore:: namespace.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add mainFrameIsScrollable, viewExposedRectChanged, setMainFrameIsScrollable, and storage for m_mainFrameIsScrollable.
        (WebKit::WebPage::mainFrameIsScrollable):
        * WebProcess/WebPage/WebPage.messages.in: Add ViewExposedRectChanged and SetMainFrameIsScrollable messages.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Forward new exposed rect to TiledBacking (only TileCache cares, for now).
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged): Ask TiledBacking to clip to the exposedRect if main frame scrolling is disabled.
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry): Use size instead of viewSize in case we've changed it because of m_minimumLayoutWidth.
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Update exposedRect and clipsToExposedRect.

2013-01-15  Enrica Casucci  <enrica@apple.com>

        Add a new set of WebKit2 APIs for text search and
        search results management.
        https://bugs.webkit.org/show_bug.cgi?id=106834.
        <rdar://problem/12597159>

        Reviewed by Simon Fraser.
        
        Adding new API to perform text search in WebKit2 without using
        the stock UI. The new interface provides all the information
        necessary to write a custom UI for search. The main logic is
        implemented in the new functions added to FindController.

        Added new TextWebKitAPI test.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageFindStringMatches): Added.
        (WKPageGetImageForFindMatch): Added.
        (WKPageSelectFindMatch): Added.
        (WKPageSetPageFindMatchesClient): Added.
        * UIProcess/API/C/WKPage.h: Added the new API definitions.
        * UIProcess/WebFindClient.cpp: Added new client callbacks.
        (WebKit::WebFindMatchesClient::didFindStringMatches):
        (WebKit::WebFindMatchesClient::didGetImageForMatchResult):
        * UIProcess/WebFindClient.h:
        (WebFindMatchesClient): Added.
        * UIProcess/WebPageProxy.cpp: Added proxy methods.
        (WebKit::WebPageProxy::initializeFindMatchesClient):
        (WebKit::WebPageProxy::findStringMatches):
        (WebKit::WebPageProxy::getImageForFindMatch):
        (WebKit::WebPageProxy::selectFindMatch):
        (WebKit::WebPageProxy::didGetImageForFindMatch):
        (WebKit::WebPageProxy::didFindStringMatches):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findStringMatches): Finds all the matching
        text according to the find options. All the matching text ranges are
        stored in a vector until the next call to findStringMatches or until
        hideFindUI is called. The message that is sent back to the UI process
        contains a vector containing an entry for each find match (i.e. for each
        range) and each entry is represented by a vector of the corresponding
        text rects. It also returns the index in the vector of matches corresponding
        to the first match after the user selection.
        If there is no selection the index is always 0 and if there are no
        matches after the user selection, the index returned is -1.
        (WebKit::FindController::getFindIndicatorBitmapAndRect): Helper function
        to share code between updateFindIndicator and getImageForFindMatch.
        (WebKit::FindController::getImageForFindMatch): Creates the image corresponding
        to the text matched at the given match index.
        (WebKit::FindController::selectFindMatch): creates a selection for the range
        corresponding to the given match index.
        (WebKit::FindController::hideFindUI): Added logic to clear the vector
        of matched ranges.
        (WebKit::FindController::updateFindIndicator): Updated to use the
        new helper function getFindIndicatorBitmapAndRect.
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::findStringMatches):
        (WebKit::WebPage::getImageForFindMatch):
        (WebKit::WebPage::selectFindMatch):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2013-01-15  Anders Carlsson  <andersca@apple.com>

        Rename LayerTreeHostCAMac to LayerTreeHostMac.

        Rubber-stamped by Deth Bakin.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/LayerTreeHost.cpp:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h: Renamed from Source/WebKit2/WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.h.
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm: Renamed from Source/WebKit2/WebProcess/WebPage/ca/mac/LayerTreeHostCAMac.mm.

2013-01-15  Dominik Röttsches  <dominik.rottsches@intel.com>

        [CoordinatedGraphics] Deadlock when running abspos-child-container-changes-from-relative-to-static.html
        https://bugs.webkit.org/show_bug.cgi?id=106884

        Reviewed by Benjamin Poulain.

        We need to return false if m_waitingForUIProcess is true since otherwise
        we'll not really repaint in performScheduledLayerFlush() and the
        UI process will wait forever. Returning false leads to executing the layer flush
        synchronously and immediately, then acknowledging the
        callback to the WebProcess - which resolves the deadlock.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::forceRepaintAsync): Return false in order to trigger a synchronous repaint if m_waitingForUIProcess is true.

2013-01-15  Simon Fraser  <simon.fraser@apple.com>

        Allow tiled WKViews to have transparent backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=106400

        Reviewed by Anders Carlsson.

        When WKViews were set to have transparent backgrounds, they still
        obscured content behind the view, for several reasons.
        
        First, when in tiled scrolling mode, WKView set the background
        of its layer to opaque white. Fix by using the clearColor (effectively
        removing the background color) if the view has a non-opaque background.
        
        Second, RenderLayerBacking just looked at FrameViews's isTransparent()
        when deciding to make TileCache tiles non-opaque, but it also needs to
        consider FrameViews with a non-opaque base background color. The
        same logic was necessary to avoid setting an opaque white background
        color on the TileCache layer.
        
        Finally, for views with non-opaque backgrounds, we don't want to display
        linen, so RenderLayerCompositor::requiresOverhangAreasLayer() was changed
        to return false in that case.

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

2013-01-14  Dean Jackson  <dino@apple.com>

        [ANGLE] Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106274

        Unreviewed attempted build fix.

        The khrplatform.h file is now a public header without a directory
        prefix. Update the include path to look in the right place.

        * PlatformEfl.cmake:

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

        <rdar://problem/12524710> Update sandbox rules after r128003
        https://bugs.webkit.org/show_bug.cgi?id=106840

        Reviewed by Anders Carlsson.

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

2013-01-14  Huang Dongsung  <luxtella@company100.net>

        [EFL] REGRESSION(r139189): MiniBrowser renders abnormally with -r option.
        https://bugs.webkit.org/show_bug.cgi?id=106512

        Reviewed by Kenneth Rohde Christiansen.

        PageViewportController handles only pageScaleFactor after r139189. So
        PageViewportControllerClientEFL calls EwkView::setScaleFactor() with
        pageScaleFactor instead of pageScaleFactor * deviceScaleFactor.

        This patch makes EwkView handle pageScaleFactor.
        1. EwkView uses pageScaleFactor * deviceScaleFactor when drawing in
        the device unit.
        2. EwkView uses pageScaleFactor when notifying the scale to
        PageViewportController.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::deviceScaleFactor):
        (EwkViewImpl::transformFromScene):
        (EwkViewImpl::displayTimerFired):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        (EwkViewImpl::setPageScaleFactor):
        (EwkViewImpl::pageScaleFactor):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didRenderFrame):
        * UIProcess/PageViewportControllerClient.h:
        (PageViewportControllerClient):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setPageScaleFactor):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (PageViewportControllerClientEfl):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::setPageScaleFactor):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2013-01-14  Max Vujovic  <mvujovic@adobe.com>

        [ANGLE] Update ANGLE in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106274

        Reviewed by Dean Jackson.

        Update ANGLE to r1641.

        * PlatformEfl.cmake: Add ANGLE/include to the include directories list because ShaderLang.h
        now includes "KHR/khrplatform.h", which is located in ANGLE/include/KHR/khrplatform.h.

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

        NetworkProcess scheduler never resumes resource loads that were postponed
        due to connection limit
        https://bugs.webkit.org/show_bug.cgi?id=106821

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::servePendingRequests):
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        Remove an uninitialized variable that could prevent loading.

2013-01-11  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] plugin tests assert in debug
        https://bugs.webkit.org/show_bug.cgi?id=106659

        Reviewed by Benjamin Poulain.

        Fixed the misuse of String::split.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::truncateToSingleLine):
        Add an assert to make sure this function works well. I just walked there
        while debugging the bug, and although it was innocent, adding this assertion
        is logical.
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):
        The ASSERT was wrong. We have three lines, each ends in a newline, so split
        with allowEmptyEntries=true will devide it to 4 substrings.

2013-01-11  Filip Pizlo  <fpizlo@apple.com>

        JITThunks should not compile only because of luck
        https://bugs.webkit.org/show_bug.cgi?id=105696

        Rubber stamped by Sam Weinig.

        * Shared/APIObject.cpp:
        * Shared/linux/WebMemorySamplerLinux.cpp:
        * UIProcess/WebContext.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/efl/WebProcessMainEfl.cpp:

2013-01-11  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove the dependency of WebCoordinatedSurface::Handle from Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=104347

        Reviewed by Noam Rosenthal.

        It is a preparation patch for Threaded Coordinated Graphics on WK1.

        Currently, UpdateAtlas and CoordinatedImageBacking use
        WebCoordinatedSurface::Handle, but WebCoordinatedSurface::Handle can be
        used only IPC-based Coordinated Graphics. So this patch removes the
        dependency of WebCoordinatedSurface::Handle from UpdateAtlas and
        CoordinatedImageBacking. Now CoordinatedLayerTreeHost converts the
        handle to a WebCoordinatedSurface.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:
        (WebKit::CoordinatedImageBacking::update):
        (WebKit::CoordinatedImageBacking::releaseSurfaceIfNeeded):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:
        (Coordinator):
        (CoordinatedImageBacking):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::updateImageBacking):
        (WebKit::CoordinatedLayerTreeHost::createUpdateAtlas):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (WebKit):
        (CoordinatedLayerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::~UpdateAtlas):
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h:
        (UpdateAtlasClient):
        (UpdateAtlas):

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

        [WK2] Network process unblocks all waiting threads when any sync reply arrives
        https://bugs.webkit.org/show_bug.cgi?id=106713

        Reviewed by Brady Eidson.

        Switch to sending sync CoreIPC messages, which is now possible.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::didClose):
        We no longer have response maps.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRequest): Just send a sync message.
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpace): Ditto.
        (WebKit::NetworkResourceLoader::didReceiveDataArray): Added an unrelated assertion.

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.messages.in:
        Removed no longer used reply messages and their handlers.

        * Shared/BlockingResponseMap.h: Removed a bool version, which was not perfectly
        safe, and only used in NetworkProcess.
        (BlockingResponseMap::didReceiveResponse): Updated a still valid FIXME to not refer
        to network process.
        (BlockingResponseMap::cancel): Ditto.

        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        Plumbing to handle sync messages.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        Updated (simplified) sync messages and their handlers.

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

        [WK2] Make it possible to send sync messages from secondary threads
        https://bugs.webkit.org/show_bug.cgi?id=106708

        Apply another review comment (overlooked a "ditto").

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendSyncMessage):

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

        [WK2] Make it possible to send sync messages from secondary threads
        https://bugs.webkit.org/show_bug.cgi?id=106708

        Reviewed by Anders Carlsson.

        It is hugely beneficial to implement sync messages at Connection level, because
        ad hoc code that blocks a thread and wakes it up when a reply arrives on main
        thread can't be made equally performant. A CoreOPC MessageDecoder can be moved across
        threads, which can't be done with a decoded argument passed by reference to client code.

        Sync messages from secondary threads are tracked in much simpler data structure
        than client thread ones, because we don't need to be concerned with incoming messages.

        * Platform/CoreIPC/Connection.cpp:
        (Connection::SecondaryThreadPendingSyncReply):
        (CoreIPC::Connection::SecondaryThreadPendingSyncReply::SecondaryThreadPendingSyncReply):
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::sendSyncMessageFromSecondaryThread):
        (CoreIPC::Connection::processIncomingSyncReply):
        (CoreIPC::Connection::connectionDidClose):

        * Platform/CoreIPC/Connection.h: Also corrected a misleading comment.

2013-01-11  Dan Bernstein  <mitz@apple.com>

        Exclude unused resources.

        Reviewed by Darin Adler.

        * Configurations/WebKit2.xcconfig: Defined EXCLUDED_SOURCE_FILE_NAMES.

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

        Incoming synchronous messages can sometimes arrive out of order
        https://bugs.webkit.org/show_bug.cgi?id=106677
        <rdar://problem/12889499>

        Reviewed by Andreas Kling.

        In cases where synchronous messages come in more than one connection at the same time, we can sometimes deliver
        the synchronous messages before any pending asynchronous messages on that connection. This breaks FIFO ordering.

        Fix this by separating the "dispatch all incoming synchronous messages" phase out into multiple phases, so we'll
        schedule one call per connection instead of one call for all connections.

        * Platform/CoreIPC/Connection.cpp:
        (Connection::SyncMessageState):
        (CoreIPC::Connection::SyncMessageState::SyncMessageState):
        (CoreIPC::Connection::SyncMessageState::processIncomingMessage):
        (CoreIPC::Connection::SyncMessageState::dispatchMessages):
        (CoreIPC::Connection::SyncMessageState::dispatchMessageAndResetDidScheduleDispatchMessagesForConnection):
        (CoreIPC::Connection::waitForSyncReply):

2013-01-11  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed. Build fix for the GTK debug builds of WebKit2 after r139415.

        * WebProcess/gtk/WebGtkExtensionManager.cpp:

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

        [GTK] Remove support for global extensions in WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=106646

        Reviewed by Xan Lopez.

        We have now API to set the web extensions directory. A global web
        estensions directory doesn't make sense anymore.

        * WebProcess/gtk/WebGtkExtensionManager.cpp:
        (WebKit::WebGtkExtensionManager::scanModules): Only scan the given
        directory for modules.
        (WebKit::WebGtkExtensionManager::initialize): Load modules found
        in the given directory only.
        * WebProcess/gtk/WebGtkExtensionManager.h:
        (WebGtkExtensionManager): Remove appendModuleDirectories().

2013-01-11  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Add ewk_view_page_contents_get() API
        https://bugs.webkit.org/show_bug.cgi?id=106440

        Reviewed by Gyuyoung Kim.

        Add ewk_view_page_contents_get() API for getting contents of the current page.
        Currently, it supports only MHTML type.

        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_Page_Contents_Context):
        (ewkViewPageContentsCallback):
        (ewk_view_page_contents_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (PageContentsCallback):
        (TEST_F):

2013-01-11  Krzysztof Czech  <k.czech@samsung.com>

        [WK2] Missing HAVE(ACCESSIBILITY) guards to some atk/ accessibility files.
        https://bugs.webkit.org/show_bug.cgi?id=106447

        Reviewed by Andreas Kling.

        Files do not have HAVE(ACCESSIBILITY) guards.
        This is source of potential build breakes, when macro is not enabled.

        * WebProcess/WebPage/atk/WebPageAccessibilityObject.h:
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp:

2013-01-11  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL] Fix unused parameter build error
        https://bugs.webkit.org/show_bug.cgi?id=106639

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix build error.

        * UIProcess/API/efl/ewk_color_picker.cpp:
        (ewk_color_picker_color_set):
        (ewk_color_picker_color_get):
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_additional_plugin_path_set):
        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_fullscreen_enabled_set):
        (ewk_settings_fullscreen_enabled_get):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):
        (ewk_view_feed_touch_event):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        (ewk_view_fullscreen_exit):

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

        [GTK] Add API to set the web extensions directory to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=106462

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_web_extensions_directory): Set
        the given directory as injected bundle initialization user data.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
        (beforeAll): Update the test to use
        webkit_web_context_set_web_extensions_directory()
        instead of setting the WEBKIT_WEB_EXTENSIONS_PATH env var.
        * WebProcess/gtk/WebGtkExtensionManager.cpp:
        (WebKit::WebGtkExtensionManager::scanModules): Append the given
        additional web extensions directory to the list of directories to
        scan for modules.
        (WebKit::WebGtkExtensionManager::initialize): Get the additional
        web extensions directory from initialization user data and pass it
        to scanModules().
        * WebProcess/gtk/WebGtkExtensionManager.h:
        (WebGtkExtensionManager): Add userData parameter.
        * WebProcess/gtk/WebGtkInjectedBundleMain.cpp:
        (WKBundleInitialize): Pass initialization user data to
        WebGtkExtensionManager.

2013-01-10  Huang Dongsung  <luxtella@company100.net>

        [Qt][EFL] Rename from xxxContentsScale() to xxxScale() in PageViewportController.
        https://bugs.webkit.org/show_bug.cgi?id=106537

        Reviewed by Kenneth Rohde Christiansen.

        Rename 3 methods to match the terms of ViewportAttributes.

        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::viewport):
        (QWebKitTest::contentsScale):
        * UIProcess/PageViewportController.h:
        (WebKit::PageViewportController::minimumScale):
        (WebKit::PageViewportController::maximumScale):
        (WebKit::PageViewportController::currentScale):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):

2013-01-10  Michael Pruett  <michael@68k.org>

        [WK2] Set IndexedDB database path in WK2
        https://bugs.webkit.org/show_bug.cgi?id=106257

        Reviewed by Benjamin Poulain.

        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::initialize):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::indexedDBDatabaseDirectory):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):

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

        Ensure that WebPageProxy's notion of pageScaleFactor is reset on didCommitLoad
        https://bugs.webkit.org/show_bug.cgi?id=103290
        <rdar://problem/12752467>

        Reviewed by Darin Adler.

        When a standard main frame load is committed, we reset the WebPage's
        pageScaleFactor, if it's not the default. However, if the previous
        page had a full-main-frame plugin that was handling page scaling itself,
        WebPageProxy can have a cached pageScaleFactor != 1, while WebPage
        now (since the plugin that was overriding (set)pageScaleFactor is gone)
        has a pageScaleFactor of 1, causing us to skip the call to reset the
        WebPage's pageScaleFactor.

        Therefore, when WebPageProxy is notified that a standard main-frame load
        is committed, reset its cached notion of the pageScaleFactor.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame): Add a parameter which corresponds to FrameLoadType, so we can
        determine whether a frame load is of FrameLoadTypeStandard (which matches the check to reset page scale in
        WebFrameLoaderClient::didCommitLoad), so we can reset m_pageScaleFactor.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add frameLoadType parameter to didCommitLoadForFrame.
        * UIProcess/WebPageProxy.messages.in: Add frameLoadType parameter to didCommitLoadForFrame.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad): Pass frameLoadType parameter to didCommitLoadForFrame.

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

        PDFPlugin: Cmd-/+ should affect PDF page scale
        https://bugs.webkit.org/show_bug.cgi?id=103285
        <rdar://problem/12710469>

        Reviewed by Darin Adler.

        Plugins which support handling page scale themselves should also handle
        page zoom, as it is a very similar concept.

        This patch disables text zoom in the case of a main-frame plugin which supports
        page scale factor changes, as it is not needed in the PDFPlugin case
        (we can't do text-only scale for PDF), but it could be added later if needed.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::pageZoomFactorDidChange):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        Add WebPageProxy::pageZoomFactorDidChange, to notify WebPageProxy of
        out-of-band page zoom factor changes (in this case, from PluginView).

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setPageScaleFactor):
        Update WebPageProxy's notion of the current page zoom whenever PluginView
        is notified of a page scale factor change.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTextZoomFactor): We don't support text zoom in plugins, but
        we also don't want it to silently act on the Frame if we have a plugin that
        purports to handle page scale itself. Return early if this is the case.
        (WebKit::WebPage::pageZoomFactor): For plugins that support page scale factor,
        we equate page scale and page zoom. Return the PluginView's page scale factor
        in place of the Frame's page zoom factor.
        (WebKit::WebPage::setPageZoomFactor): Make page zoom changes in the aforementioned
        case affect the PluginView's page scale.
        (WebKit::WebPage::setPageAndTextZoomFactors): Ditto.

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

        PDFPlugin: Header cleanup
        https://bugs.webkit.org/show_bug.cgi?id=106540

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/PDF/PDFPlugin.mm: Remove some unneeded headers.

2013-01-10  Zan Dobersek  <zandobersek@gmail.com>

        Remove the ENABLE_ANIMATION_API feature define occurences
        https://bugs.webkit.org/show_bug.cgi?id=106544

        Reviewed by Simon Fraser.

        The Animation API code was removed in r137243. The ENABLE_ANIMATION_API
        feature define handling still lingers in various build systems and configurations
        but is of no use, so it should be removed.

        * Configurations/FeatureDefines.xcconfig:

2013-01-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Contents gets blurry when page is scrolled down
        https://bugs.webkit.org/show_bug.cgi?id=106545

        Reviewed by Kenneth Rohde Christiansen.

        The bound values for scrolling also should be pixel aligned, otherwise
        it leads to page contents blurriness when the page is scrolled down.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::pageDidRequestScroll):

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

        [GTK] Add support for loading web process extensions
        https://bugs.webkit.org/show_bug.cgi?id=105631

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Link to libWebCoreDOM.la and build injected
        bundle lib.
        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (injectedBundleDirectory): Helper funtion to get the injected
        bundle directory.
        (injectedBundleFilename): Helper funtion to get the injected undle
        library full path.
        (createDefaultWebContext): Create the WebContext with an injected
        bundle path.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_page_id): Return the identifier of the web
        page associated to the web view.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new chapter for
        web extensions.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Add new types.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new files to compilation.
        * UIProcess/API/gtk/tests/TestMain.cpp:
        (main):
        * UIProcess/API/gtk/tests/TestWebExtensions.cpp: Added.
        (testWebExtension):
        (beforeAll):
        (afterAll):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp: Added.
        (methodCallCallback):
        (webkit_web_extension_initialize):
        * UIProcess/API/gtk/tests/WebKitTestBus.cpp: Added.
        (WebKitTestBus::WebKitTestBus):
        (WebKitTestBus::run):
        (WebKitTestBus::~WebKitTestBus):
        (WebKitTestBus::connection):
        (onNameAppeared):
        (WebKitTestBus::createProxy):
        * UIProcess/API/gtk/tests/WebKitTestBus.h: Added.
        (WebKitTestBus):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp: Added.
        (_WebKitWebExtensionPrivate):
        (webkitWebExtensionPageCreated): Create a WebKitWebPage for the
        newly crated page and emit WebKitWebExtension::page-created
        signals.
        (webkitWebExtensionPageDestroy): Remove the page from the map.
        (didCreatePage): Call webkitWebExtensionPageCreated().
        (willDestroyPage): Call webkitWebExtensionPageDestroy().
        (webkitWebExtensionCreate): Create a new WebKitWebExtension and
        initialize the injected bundle client.
        (webkit_web_extension_get_page): Return the WebKitWebPage for the
        given page identifier.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h: Added.
        (_WebKitWebExtension):
        (_WebKitWebExtensionClass):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtensionDefines.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtensionPrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp: Added.
        (_WebKitWebPagePrivate):
        (webkit_web_page_class_init):
        (webkitWebPageCreate): Create a new WebKitWebPage.
        (webkit_web_page_get_dom_document): Return the WebKitDOMDocument
        loaded in the WebKitWebPage.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h: Added.
        (_WebKitWebPage):
        (_WebKitWebPageClass):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPagePrivate.h: Added.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h: Added.
        * WebProcess/gtk/WebGtkExtensionManager.cpp: Added.
        (WebKit::WebGtkExtensionManager::shared): Return the global shared
        instance.
        (WebKit::WebGtkExtensionManager::WebGtkExtensionManager):
        (WebKit::WebGtkExtensionManager::appendModuleDirectories): Add
        directories to scan for modules.
        (WebKit::WebGtkExtensionManager::scanModules): Scan for modules.
        (WebKit::WebGtkExtensionManager::initialize): Load and initialize
        the modules found.
        * WebProcess/gtk/WebGtkExtensionManager.h: Added.
        * WebProcess/gtk/WebGtkInjectedBundleMain.cpp: Added.
        (WKBundleInitialize): Initialize WebGtkExtensionManager.

2013-01-10  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(r139189): pixel alignment must be performed in device units.
        https://bugs.webkit.org/show_bug.cgi?id=106504

        Reviewed by Kenneth Rohde Christiansen.

        After r139189, pixel alignment is performed in UI units. If deviceScaleFactor is
        fractional number, adjusted scroll position can blur non-composited layer.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::pixelAlignedFloatPoint):

2013-01-10  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [WK2] [Gtk] web inspector is not visible.
        https://bugs.webkit.org/show_bug.cgi?id=106050

        Reviewed by Carlos Garcia Campos.

        Use webkitWebViewBaseAddWebInspector when adding web inspector to
        webview in order to make webview aware of its existence.

        Use gtk_container_add when adding web inspector wiew to its own window
        because m_inspectorWindow is not a WebKitWebViewBase.

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

2013-01-09  Seokju Kwon  <seokju.kwon@gmail.com>

        [WK2][EFL] Add guard around NativeWebTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=105846

        Reviewed by Benjamin Poulain.

        Fix EFL build without TOUCH_EVENTS.

        * Shared/efl/NativeWebTouchEventEfl.cpp: Add TOUCH_EVENTS guard.

2013-01-09  Huang Dongsung  <luxtella@company100.net>

        Remove deviceScaleFactor argument in computeMinimumScaleFactorForContentContained().
        https://bugs.webkit.org/show_bug.cgi?id=106500

        Reviewed by Kenneth Rohde Christiansen.

        deviceScaleFactor argument is not used after r139189.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::updateMinimumScaleToFit):

2013-01-09  Huang Dongsung  <luxtella@company100.net>

        [QT][EFL][WK2] Rename scale members in PageViewportController.
        https://bugs.webkit.org/show_bug.cgi?id=106499

        Reviewed by Kenneth Rohde Christiansen.

        Rename from m_contentsScale to m_pageScaleFactor and from devicePixelRatio() to
        deviceScaleFactor() to match terms of WebCore.

        * UIProcess/API/qt/qwebkittest.cpp:
        (QWebKitTest::devicePixelRatio):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::deviceScaleFactor):
        (WebKit::PageViewportController::pixelAlignedFloatPoint):
        (WebKit::PageViewportController::boundContentsPosition):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::visibleContentsSize):
        (WebKit::PageViewportController::applyScaleAfterRenderingContents):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        (WebKit::PageViewportController::currentContentsScale):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):

2013-01-09  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][soup] Get rid of LocalTerminationDisabler
        https://bugs.webkit.org/show_bug.cgi?id=106510

        Unreviewed build fix.

        With r139257(bug 106501), the LocalTerminationDisabler was removed from WebKit::ChildProcess.
        So, it should be removed on setCookiePersistentStorage, too.

        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage):

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

        [WK2] Get rid of LocalTerminationDisabler
        https://bugs.webkit.org/show_bug.cgi?id=106501

        Reviewed by Anders Carlsson.

        LocalTerminationDisabler is no-op - termination timer can't fire inside its scope
        even if not stopped.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::getSitesWithData):
        (WebKit::PluginProcess::clearSiteData):
        * Shared/ChildProcess.h:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        (WebKit::WebApplicationCacheManager::setAppCacheMaximumSize):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):

2013-01-09  Kiran Muppala  <cmuppala@apple.com>

        Add user defaults to override system proxy settings for NetworkProcess on Mac
        https://bugs.webkit.org/show_bug.cgi?id=104197

        Reviewed by Brady Eidson.

        For internal testing and debugging, it is useful to have a defaults write to set the HTTP and HTTPS proxy specific to a
        WebKit2 client application and not affect the system proxy settings on Mac.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::overrideSystemProxies): Add helper method to parse proxy URLs and populate settings dictionary passed
        to WKCFNetworkSetOverrideSystemProxySettings.
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Call overrideSystemProxies if process creation parameters for
        http proxy or https proxy is set.
        * Shared/Network/NetworkProcessCreationParameters.cpp: Add httpProxy and httpsProxy process creation parameters on Mac.
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeNetworkProcess): Initialize httpProxy and httpsProxy process creation parameters
        based on the value of WebKit2HTTPProxyDefaultsKey and WebKit2HTTPSProxyDefaultsKey user default respectively.

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

        Local builds of NetworkProcess should have a process icon
        https://bugs.webkit.org/show_bug.cgi?id=106489

        Reviewed by Mark Rowe.

        * Resources/WebKit.icns: Copied from Source/WebKit2/WebProcess/mac/WebKit.icns.
        * WebProcess/mac/WebKit.icns: Removed.
        Copied to a shared location. We don't have different icons, so just using WebKit one.

        * Configurations/NetworkProcess.xcconfig:
        * NetworkProcess/Info.plist:
        * WebKit2.xcodeproj/project.pbxproj:
        Same changes as for WebProcess.

2013-01-09  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix a typo in in the double-tap-to-zoom logic

        Rubber-stamped by Csaba Osztrogonác.

        The qMin for the upper boundary of the scale was accidentally
        changed to qMax in r139189, change it back to fix the Qt API tests.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):

2013-01-09  Andras Becsi  <andras.becsi@digia.com>

        [Qt][EFL][WK2] Remove redundant device pixel ratio adjustment from PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=106355

        Reviewed by Kenneth Rohde Christiansen.

        Since r137597 Qt uses the device pixel ratio of the underlying
        platform window as the device pixel ratio in WebCore.
        The tiles are rendered with the effective scale (scale adjusted with
        the device scale factor) and the projection matrix is also adjusted
        with the device pixel ratio when painting.
        As a result we can follow the same approach as QtQuick and all the
        coordinates in PageViewportController need to be in device independent
        pixels (UI pixels) thus we do no longer need to adjust with the device
        pixel ratio when calculating the viewport attributes.
        This simplifies the logic significantly and increases robustness,
        but does not allow to set a custom device pixel ratio different from
        the factor of the underlying platform (eg. for testing purposes).
        This patch is conceptually a follow-up of r137597 and fixes layout
        and canvas size on retina display.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::innerBoundedViewportScale):
        (WebKit::PageViewportController::outerBoundedViewportScale):
        (WebKit::PageViewportController::pixelAlignedFloatPoint):
        (WebKit::PageViewportController::boundContentsPosition):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::pageTransitionViewportReady):
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::visibleContentsSize):
        (WebKit::PageViewportController::applyScaleAfterRenderingContents):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (WebKit::PageViewportController::currentContentsScale):
        (PageViewportController):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        Adjust the viewport size with the device pixel ratio to keep previous
        behaviour.
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::focusEditableArea):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        * UIProcess/qt/QtWebPageSGNode.cpp:
        (WebKit::ContentsSGNode::clipRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):

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

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing headers.

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

        Add Owners file.

        * Owners: Added.

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

        Unbreak the world.

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

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

        Silence a sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=106386
        <rdar://problem/12976435>

        Reviewed by Andreas Kling.

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

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

        This should be camel case. Must remove to fix.

        * OWNERS: Removed.

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

        <rdar://problem/12944813> Network process temporary and cache directories are not set correctly

        Reviewed by Sam Weinig.

        Set DIRHELPER_USER_DIR_SUFFIX, like we do for WebProcess. Also while in this function,
        enabled sandbox-style file quarantine.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeSandbox):

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

        Use correct capitalization in service name
        https://bugs.webkit.org/show_bug.cgi?id=106368

        Reviewed by Andreas Kling.

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

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

        Tweak sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=106362
        <rdar://problem/12884745>

        Reviewed by Sam Weinig.

        * WebProcess/com.apple.WebProcess.sb.in:
        Allow access to com.apple.CoreServices.launchservicesd.

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

        Add OWNERS file.

        * OWNERS: Added.

2013-01-08  Mark Lam  <mark.lam@apple.com>

        Removed the need for the ProposedDatabase mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=106292.

        Reviewed by Sam Weinig.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

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

        Remove dead Connection members in ChildProcess subclasses (and their users)
        https://bugs.webkit.org/show_bug.cgi?id=106347
        <rdar://problem/12973955>

        Reviewed by Alexey Proskuryakov.

        This also fixes a crash when entering fullscreen with a plug-in.

        * PluginProcess/PluginProcess.h:
        Remove dead m_connection member.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::setModalWindowIsShowing):
        (WebKit::PluginProcess::setFullscreenWindowIsShowing):
        Replace use of m_connection, which is dead, with parentProcessConnection().

        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        Remove dead m_connection member.

        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::createWebProcessConnection):
        Replace use of m_connection, which is dead, with parentProcessConnection().

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

        [WK2] NetworkProcess should have a Keychain shim
        https://bugs.webkit.org/show_bug.cgi?id=106286

        Reviewed by Sam Weinig.

        Renamed WebProcessShim to SecItemShim. Use it with NetworkProcess, too.

        * WebProcess/mac/SecItemShimLibrary.h: Copied from Source/WebKit2/WebProcess/mac/WebProcessShim.h.
        * WebProcess/mac/SecItemShimLibrary.mm: Copied from Source/WebKit2/WebProcess/mac/WebProcessShim.mm.
        This code lives in SecItemShim.dylib.
        "Library" in the name is to avoid conflicting with SecItemShim class in WebKit2.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::sendSecItemRequest):
        (WebKit::SecItemShim::initialize):
        * Shared/mac/SecItemShim.h:
        Take a ChildProcess pointer at initialization instead of using using WebProcess::shared().

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::addDYLDEnvironmentAdditions):
        Use SecItemShim with NetworkProcess too.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeConnection):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMainDelegate::doPreInitializationWork):
        * WebProcess/mac/WebProcessServiceEntryPoints.mm:
        (webProcessServiceMain):
        (initializeWebProcessForWebProcessServiceForWebKitDevelopment):
        * WebProcess/mac/WebProcessShim.h: Removed.
        * WebProcess/mac/WebProcessShim.mm: Removed.
        * WebProcessService/Info.plist:

2013-01-08  Kihong Kwon  <kihong.kwon@samsung.com>

        Add DeviceProximityController to support Device Proximity Events.
        https://bugs.webkit.org/show_bug.cgi?id=97630

        Reviewed by Hajime Morita.

        Add initial WebDeviceProximityClient class which is inherited DeviceProximityClient.
        But startUpdating and stopUpdating need to be implemented.

        * CMakeLists.txt:
        * WebProcess/WebCoreSupport/WebDeviceProximityClient.cpp: Added.
        (WebKit):
        (WebKit::WebDeviceProximityClient::WebDeviceProximityClient):
        (WebKit::WebDeviceProximityClient::startUpdating):
        (WebKit::WebDeviceProximityClient::stopUpdating):
        (WebKit::WebDeviceProximityClient::hasLastData):
        * WebProcess/WebCoreSupport/WebDeviceProximityClient.h: Added.
        (WebKit):
        (WebDeviceProximityClient):
        (WebKit::WebDeviceProximityClient::~WebDeviceProximityClient):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2013-01-03  Sergio Villar Senin  <svillar@igalia.com>

        [GTK] Add WebP image support
        https://bugs.webkit.org/show_bug.cgi?id=105915

        Reviewed by Martin Robinson.

        * GNUmakefile.am: link against WebP library.

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

        [Qt][Win] Unreviewed buildfix, partially revert
        r139003, because Qt port still uses these files.

        * Platform/CoreIPC/win/BinarySemaphoreWin.cpp: Added.
        * Platform/CoreIPC/win/ConnectionWin.cpp: Added.
        * Platform/win/SharedMemoryWin.cpp: Added.
        * Platform/win/WorkQueueWin.cpp: Added.

2013-01-07  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] compositing/repaint/resize-repaint.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=104637

        Reviewed by Noam Rosenthal.

        r137526 attempted to fix excessive repainting when compositing layers
        change size. However, the fix did not suffice for ports using Coordinated
        Graphics because CoordinatedGraphicsLayer::setSize() was calling
        setNeedsDisplay() causing a full repaint.

        This patch removes the call to setNeedsDisplay() in
        CoordinatedGraphicsLayer::setSize() so that we don't unconditionally
        repaint CoordinatedGraphics layers when their size changes.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setSize):

2013-01-07  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] Support invalidation tracking for CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=106002

        Reviewed by Noam Rosenthal.

        Add calls to addRepaintRect() to CoordinatedGraphicsLayer so that
        we can track invalidation in the composited layer.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplay): Pass a FloatRect instead
        of an IntRect to setNeedsDisplayInRect() since it is what it expects.
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):

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

        Remove PLATFORM(WIN) #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=106279

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/BinarySemaphore.cpp:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::waitForSyncReply):
        * Platform/CoreIPC/Connection.h:
        (Client):
        * Platform/Module.cpp:
        (WebKit::Module::Module):
        * Platform/Module.h:
        (Module):
        * Platform/PlatformProcessIdentifier.h:
        (WebKit):
        * Shared/CommandLine.h:
        (CommandLine):
        * Shared/FontSmoothingLevel.h:
        * Shared/LayerTreeContext.h:
        (LayerTreeContext):
        * Shared/NativeWebKeyboardEvent.h:
        (NativeWebKeyboardEvent):
        * Shared/NativeWebMouseEvent.h:
        (NativeWebMouseEvent):
        * Shared/NativeWebWheelEvent.h:
        (NativeWebWheelEvent):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::PlatformPopupMenuData):
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h:
        (PlatformPopupMenuData):
        * Shared/Plugins/PluginModuleInfo.h:
        (PluginModuleInfo):
        (WebKit::PluginModuleInfo::isolatedCopy):
        * Shared/ShareableBitmap.h:
        (ShareableBitmap):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebEvent.h:
        (WebMouseEvent):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::WebMouseEvent):
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * Shared/WebPreferencesStore.h:
        (WebKit):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * Shared/WebURLRequest.h:
        * Shared/WebURLResponse.h:
        * Shared/cg/ShareableBitmapCG.cpp:
        (WebKit::ShareableBitmap::makeCGImageCopy):
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toFontSmoothingLevel):
        (WebKit::toAPI):
        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/BackingStore.h:
        (BackingStore):
        * UIProcess/PageClient.h:
        (WebKit):
        (PageClient):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebFullScreenManagerProxy.h:
        (WebKit):
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragControllerAction):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit):
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * WebKit2Prefix.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopyWebArchiveFilteringSubframes):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit):
        (InjectedBundle):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin):
        * WebProcess/Plugins/PluginController.h:
        (PluginController):
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/PluginView.h:
        (PluginView):
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection):
        (WebKit):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPopupMenu.cpp:
        (WebKit::WebPopupMenu::updateFromElement):
        * WebProcess/WebKitMain.cpp:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit):
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::createGraphicsContext):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebCore):
        (WebKit):
        (LayerTreeHost):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit):
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::installPageOverlay):
        (WebKit::WebPage::uninstallPageOverlay):
        (WebKit::WebPage::getWebArchiveOfFrame):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:
        * config.h:

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

        [WK2] Delete more obsolete Keychain code
        https://bugs.webkit.org/show_bug.cgi?id=106276

        Reviewed by Sam Weinig.

        Deleting dead code.

        * Shared/mac/KeychainAttribute.cpp: Removed.
        * Shared/mac/KeychainAttribute.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

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

        [WK2] Merge SecItemShimMethods files into SecItemShim
        https://bugs.webkit.org/show_bug.cgi?id=106278

        Reviewed by Anders Carlsson.

        Now that we have a SecItemShim class, there is no reason to split implementation
        into a separate file.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::responseMap):
        (WebKit::generateSecItemRequestID):
        (WebKit::sendSecItemRequest):
        (WebKit::webSecItemCopyMatching):
        (WebKit::webSecItemAdd):
        (WebKit::webSecItemUpdate):
        (WebKit::webSecItemDelete):
        (WebKit::SecItemShim::secItemResponse):
        (WebKit::SecItemShim::install):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/mac/SecItemShimMethods.h: Removed.
        * WebProcess/mac/SecItemShimMethods.mm: Removed.

2013-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Sorted the xcodeproj file.

        * WebKit2.xcodeproj/project.pbxproj:

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

        [WK2] Make SecItemShim messages work with any process
        https://bugs.webkit.org/show_bug.cgi?id=106269

        Reviewed by Sam Weinig.

        Add SecItemShim and SecItemShimProxy classes to manage message sending, and moved
        relevant code from WebProcess(Proxy).

        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * Shared/mac/SecItemShim.cpp: Added.
        (WebKit::SecItemShim::shared):
        (WebKit::SecItemShim::SecItemShim):
        (WebKit::SecItemShim::secItemResponse):
        (WebKit::SecItemShim::install):
        (WebKit::SecItemShim::didReceiveMessageOnConnectionWorkQueue):
        * Shared/mac/SecItemShim.h: Added.
        * Shared/mac/SecItemShim.messages.in: Added.
        * UIProcess/mac/SecItemShimProxy.cpp: Added.
        (WebKit::SecItemShimProxy::shared):
        (WebKit::SecItemShimProxy::SecItemShimProxy):
        (WebKit::handleSecItemRequest):
        (WebKit::dispatchFunctionOnQueue):
        (WebKit::SecItemShimProxy::secItemRequest):
        (WebKit::SecItemShimProxy::didReceiveMessageOnConnectionWorkQueue):
        * UIProcess/mac/SecItemShimProxy.h: Added.
        * UIProcess/mac/SecItemShimProxy.messages.in: Added.
        * UIProcess/mac/WebProcessProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/mac/SecItemShimMethods.mm:
        (WebKit::sendSeqItemRequest):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeProcess):

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

        Remove Windows files from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=106264

        Reviewed by Sam Weinig.

        * Platform/CoreIPC/win/BinarySemaphoreWin.cpp: Removed.
        * Platform/CoreIPC/win/ConnectionWin.cpp: Removed.
        * Platform/win/ModuleWin.cpp: Removed.
        * Platform/win/SharedMemoryWin.cpp: Removed.
        * Platform/win/WorkQueueWin.cpp: Removed.
        * Shared/API/c/win/WKBaseWin.h: Removed.
        * Shared/API/c/win/WKCertificateInfoWin.cpp: Removed.
        * Shared/API/c/win/WKCertificateInfoWin.h: Removed.
        * Shared/Plugins/Netscape/win/NetscapePluginModuleWin.cpp: Removed.
        * Shared/cg/win/ShareableBitmapCGWin.cpp: Removed.
        * Shared/win/CoalescedWindowGeometriesUpdater.cpp: Removed.
        * Shared/win/CoalescedWindowGeometriesUpdater.h: Removed.
        * Shared/win/CommandLineWin.cpp: Removed.
        * Shared/win/LayerTreeContextWin.cpp: Removed.
        * Shared/win/NativeWebKeyboardEventWin.cpp: Removed.
        * Shared/win/NativeWebMouseEventWin.cpp: Removed.
        * Shared/win/NativeWebWheelEventWin.cpp: Removed.
        * Shared/win/PlatformCertificateInfo.cpp: Removed.
        * Shared/win/PlatformCertificateInfo.h: Removed.
        * Shared/win/ShareableBitmapWin.cpp: Removed.
        * Shared/win/WebCoreArgumentCodersWin.cpp: Removed.
        * Shared/win/WebEventFactory.cpp: Removed.
        * Shared/win/WebEventFactory.h: Removed.
        * Shared/win/WebKitBundle.cpp: Removed.
        * Shared/win/WebKitBundle.h: Removed.
        * Shared/win/WebURLRequestWin.cpp: Removed.
        * Shared/win/WebURLResponseWin.cpp: Removed.
        * Shared/win/WindowGeometry.cpp: Removed.
        * Shared/win/WindowGeometry.h: Removed.
        * UIProcess/API/C/win/WKAPICastWin.h: Removed.
        * UIProcess/API/C/win/WKContextPrivateWin.h: Removed.
        * UIProcess/API/C/win/WKContextWin.cpp: Removed.
        * UIProcess/API/C/win/WKView.cpp: Removed.
        * UIProcess/API/C/win/WKView.h: Removed.
        * UIProcess/API/C/win/WKViewPrivate.cpp: Removed.
        * UIProcess/API/C/win/WKViewPrivate.h: Removed.
        * UIProcess/Launcher/win/ProcessLauncherWin.cpp: Removed.
        * UIProcess/Plugins/win/PluginInfoStoreWin.cpp: Removed.
        * UIProcess/win/BackingStoreWin.cpp: Removed.
        * UIProcess/win/TextCheckerWin.cpp: Removed.
        * UIProcess/win/WebContextMenuProxyWin.cpp: Removed.
        * UIProcess/win/WebContextMenuProxyWin.h: Removed.
        * UIProcess/win/WebContextWin.cpp: Removed.
        * UIProcess/win/WebFullScreenManagerProxyWin.cpp: Removed.
        * UIProcess/win/WebInspectorProxyWin.cpp: Removed.
        * UIProcess/win/WebPageProxyWin.cpp: Removed.
        * UIProcess/win/WebPopupMenuProxyWin.cpp: Removed.
        * UIProcess/win/WebPopupMenuProxyWin.h: Removed.
        * UIProcess/win/WebProcessProxyWin.cpp: Removed.
        * UIProcess/win/WebUndoClient.cpp: Removed.
        * UIProcess/win/WebUndoClient.h: Removed.
        * UIProcess/win/WebView.cpp: Removed.
        * UIProcess/win/WebView.h: Removed.
        * WebProcess/Downloads/cf/win/DownloadCFWin.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.cpp: Removed.
        * WebProcess/InjectedBundle/API/c/win/WKBundlePrivateWin.h: Removed.
        * WebProcess/InjectedBundle/win/InjectedBundleWin.cpp: Removed.
        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebContextMenuClientWin.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebDragClientWin.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebDragSource.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebDragSource.h: Removed.
        * WebProcess/WebCoreSupport/win/WebErrorsWin.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.cpp: Removed.
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h: Removed.
        * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp: Removed.
        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.cpp: Removed.
        * WebProcess/WebPage/ca/win/LayerTreeHostCAWin.h: Removed.
        * WebProcess/WebPage/ca/win/WKCACFViewWindow.cpp: Removed.
        * WebProcess/WebPage/ca/win/WKCACFViewWindow.h: Removed.
        * WebProcess/WebPage/win/DrawingAreaImplWin.cpp: Removed.
        * WebProcess/WebPage/win/LayerTreeHostWin.cpp: Removed.
        * WebProcess/WebPage/win/WebInspectorWin.cpp: Removed.
        * WebProcess/WebPage/win/WebPageWin.cpp: Removed.
        * WebProcess/win/WebProcessMainWin.cpp: Removed.
        * WebProcess/win/WebProcessWin.cpp: Removed.

2013-01-07  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add window.internals.nonFastScrollableRects for testing scrollable areas in fast/slow paths
        https://bugs.webkit.org/show_bug.cgi?id=105546

        Reviewed by James Robinson.

        Export the new symbol.

        * win/WebKit2.def.in:

2013-01-07  Mike West  <mkwst@chromium.org>

        Make the IFRAME_SEAMLESS flag runtime-enabled.
        https://bugs.webkit.org/show_bug.cgi?id=106213

        Reviewed by Ojan Vafai.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetSeamlessIFramesEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setSeamlessIFramesEnabled):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
            Add a toggle for seamless IFrames to InjectedBundle, and set it to
            true when beginning testing.

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

        [WK2] Remove more obsolete shim code
        https://bugs.webkit.org/show_bug.cgi?id=106248

        Reviewed by Anders Carlsson.

        Removing KeychainItemShimCallbacks, and SecItemRequestData::CopyContent, which was
        only needed for that obsolete version of shim.

        We now use WebProcessSecItemShimCallbacks.

        * Shared/mac/SecItemRequestData.h:
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::handleSecItemRequest):
        * WebProcess/mac/WebProcessShim.h:

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

        Merge child process main functions as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=106192

        Reviewed by Anders Carlsson.

        To reduce copied code, this merges the Mac main functions for the WebProcess,
        NetworkProcess, PluginProcess, and SharedWorkerProcess. Since slight variations
        are needed, it adds a delegate class for hooks into the main function that each
        process can override if necessary.

        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain):
        Remove almost everything with a call to ChildProcessMain with the default delegate.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
        Move defaults registration here from PluginProcessMainMac.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (PluginProcessMainDelegate):
        Add a delegate for the new shared main function that does does PluginProcess
        specific work.

        (WebKit::PluginProcessMainDelegate::doPreInitializationWork):
        Move DYLD_INSERT_LIBRARIES removal and createPluginMIMETypesPreferences special mode
        to this pre-initialization hook.

        (WebKit::PluginProcessMainDelegate::doPostRunWork):
        Move private temporary and cache directories clean up to this post run hook.

        (WebKit::PluginProcessMain):
        Call the ChildProcessMain shared main function with the PluginProcess as the process
        to initialize and PluginProcessMainDelegate as the main delegate.

        * Shared/mac/ChildProcessMain.h: Added.
        (ChildProcessMainDelegate):
        ChildProcessMainDelegate is a helper class that process can subclass to hook into
        the main function.

        (WebKit::ChildProcessMain):
        Add a single version of the "main" function that uses the ChildProcessMainDelegate to
        allow processes to hook into it.

        * Shared/mac/ChildProcessMain.mm:
        (WebKit::ChildProcessMainDelegate::~ChildProcessMainDelegate):
        (WebKit::ChildProcessMainDelegate::installSignalHandlers):
        (WebKit::ChildProcessMainDelegate::doPreInitializationWork):
        (WebKit::ChildProcessMainDelegate::getConnectionIdentifier):
        (WebKit::ChildProcessMainDelegate::getClientIdentifier):
        (WebKit::ChildProcessMainDelegate::getClientProcessName):
        (WebKit::ChildProcessMainDelegate::doPostRunWork):
        Add default implementations of the delegate hooks, most processes should be able to
        use the defaults.

        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):
        Remove almost everything with a call to ChildProcessMain with the default delegate.

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

        * WebProcess/mac/WebProcessMainMac.mm:
        (WebProcessMainDelegate):
        Add a delegate for the new shared main function that does does WebProcess
        specific work.

        (WebKit::WebProcessMainDelegate::doPreInitializationWork):
        Move DYLD_INSERT_LIBRARIES removal to this this pre-initialization hook.

        (WebKit::WebProcessMainDelegate::getConnectionIdentifier):
        A custom getConnectionIdentifier is necessary for the WebProcess to keep support for having the WebProcess
        be able to launch the UIProcess (for debugging purposes).

        (WebKit::WebProcessMainDelegate::getClientIdentifier):
        For the same reasons as about, a custom getClientIdentifier is needed.

        (WebKit::WebProcessMain):
        Call the ChildProcessMain shared main function with the WebProcess as the process
        to initialize and WebProcessMainDelegate as the main delegate.

2013-01-07  Simon Fraser  <simon.fraser@apple.com>

        Make WKViews work when layer-backed
        https://bugs.webkit.org/show_bug.cgi?id=106166

        Reviewed by Sam Weinig.
        
        When not in TileCache mode, WebKit2 views had redraw problems on scrolling,
        if layer-backed.
        
        The issue is that the DrawingAreaProxy code tries to optimize scrolling by
        calling -scrollRect:by: on the WKView (an NSView) to copy bits, rather than
        repainting the entire view. However, -scrollRect:by: does nothing for NSViews
        that have layers.
        
        Fix by plumbing through a canScrollView() function which PageClientImpl()
        implements, returning true if the view does not have layer backing.
        When canScrollView() is false, DrawingAreaProxyImpl::incorporateUpdate()
        dirties the entire view.

        * UIProcess/API/gtk/PageClientImpl.h:
        (WebKit::PageClientImpl::canScrollView):
        * UIProcess/API/mac/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::canScrollView):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        (QRawWebViewPrivate::canScrollView):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::incorporateUpdate):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canScrollView):
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/PageClientBase.h:
        (WebKit::PageClientBase::canScrollView):
        * UIProcess/qt/QtPageClient.h:
        (WebKit::QtPageClient::canScrollView):
        * UIProcess/win/WebView.h:
        (WebKit::WebView::canScrollView):

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

        Remove WebProcessInitialization and NetworkProcessInitialization by putting the rest of initialization in ChildProcess derived classes
        https://bugs.webkit.org/show_bug.cgi?id=106163

        Reviewed by Darin Adler.

        Adds ChildProcess::initializeProcessName() and the catchall ChildProcess::initializeProcess()
        as the last pieces to have all the initialization from WebProcessInitialization and NetworkProcessInitialization
        captured in ChildProcess and derived classes.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * NetworkProcess/mac/NetworkProcessInitialization.h: Removed.
        * NetworkProcess/mac/NetworkProcessInitialization.mm: Removed.
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeProcess):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * PluginProcess/qt/PluginProcessQt.cpp:
        (WebKit::PluginProcess::platformInitializeProcess):
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * PluginProcess/unix/PluginProcessUnix.cpp:
        (WebKit::PluginProcess::platformInitializeProcess):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        (WebKit::ChildProcess::initializeProcess):
        (WebKit::ChildProcess::initializeProcessName):
        (WebKit::ChildProcess::initializeSandbox):
        (WebKit::ChildProcess::initializeConnection):
        * Shared/ChildProcess.h:
        (ChildProcess):
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeProcess):
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/mac/WebProcessInitialization.h: Removed.
        * WebProcess/mac/WebProcessInitialization.mm: Removed.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::initializeSandbox):
        (WebKit::WebProcess::initializeProcessName):
        (WebKit::WebProcess::platformInitializeProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcess/mac/WebProcessServiceEntryPoints.mm:
        (WebKit::WebProcessServiceEventHandler):
        (initializeWebProcessForWebProcessServiceForWebKitDevelopment):

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

        Fix failing API test.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::initializeWebProcess):
        The WebConnectionToUIProcess needs to be initialized before the injected bundle is,
        so that if the user tries to use it, its there.

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

        Consolidate all the one time initialization functions into a single InitializeWebKit2() super function
        https://bugs.webkit.org/show_bug.cgi?id=106161

        Reviewed by Simon Fraser.

        Adds InitializeWebKit2 and uses it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessInitialization.mm:
        (WebKit::initializeNetworkProcess):
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * Shared/WebKit2Initialize.cpp: Copied from Source/WebKit2/NetworkProcess/mac/NetworkProcessInitialization.mm.
        (WebKit::InitializeWebKit2):
        * Shared/WebKit2Initialize.h: Copied from Source/WebKit2/NetworkProcess/mac/NetworkProcessInitialization.mm.
        (WebKit):
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::initializeWebProcess):

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

        Follow up to https://bugs.webkit.org/show_bug.cgi?id=106144, fixing some
        of Alexey's review comments.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadProxyConnection):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::createWebProcessConnection):
        (WebKit::PluginProcess::getSitesWithData):
        (WebKit::PluginProcess::clearSiteData):
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::parentProcessConnection):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadProxyConnection):
        (WebKit::WebProcess::addVisitedLink):
        (WebKit::WebProcess::removeWebFrame):
        (WebKit::WebProcess::getSitesWithPluginData):
        (WebKit::WebProcess::clearPluginSiteData):
        (WebKit::WebProcess::addPlugInAutoStartOrigin):
        (WebKit::WebProcess::plugInDidReceiveUserInteraction):
        (WebKit::WebProcess::getWebCoreStatistics):

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

        Consolidate process initialization in ChildProcess
        https://bugs.webkit.org/show_bug.cgi?id=106144

        Reviewed by Alexey Proskuryakov.

        Consolidate more functionality down into ChildProcess.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        (WebKit::NetworkProcess::downloadProxyConnection):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        (WebKit::NetworkProcess::initializeSandbox):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessInitialization.h:
        * NetworkProcess/mac/NetworkProcessInitialization.mm:
        (WebKit::initializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess):
        (WebKit::PluginProcess::initializePluginProcess):
        (WebKit::PluginProcess::createWebProcessConnection):
        (WebKit::PluginProcess::getSitesWithData):
        (WebKit::PluginProcess::clearSiteData):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeShim):
        (WebKit::initializeCocoaOverrides):
        (WebKit::PluginProcess::platformInitialize):
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * PluginProcess/qt/PluginProcessMainQt.cpp:
        (WebKit::PluginProcessMain):
        * PluginProcess/qt/PluginProcessQt.cpp:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * PluginProcess/unix/PluginProcessUnix.cpp:
        (WebKit::PluginProcess::platformInitializePluginProcess):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess):
        (WebKit::watchdogCallback):
        (WebKit::didCloseOnConnectionWorkQueue):
        (WebKit::ChildProcess::initialize):
        (WebKit::ChildProcess::initializeConnection):
        (WebKit::ChildProcess::initializeSandbox):
        (WebKit::ChildProcess::terminate):
        * Shared/ChildProcess.h:
        (ChildProcessInitializationParameters):
        (ChildProcess):
        (WebKit::ChildProcess::connection):
        (WebKit::ChildProcess::destinationID):
        (WebKit::ChildProcess::messageReceiverMap):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::initializeSharedWorkerProcess):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        (WebKit::SharedWorkerProcess::platformInitializeSharedWorkerProcess):
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::downloadProxyConnection):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::terminate):
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        (WebKit::WebProcess::removeWebFrame):
        (WebKit::WebProcess::initializeSandbox):
        * WebProcess/WebProcess.h:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):
        * WebProcess/mac/WebProcessInitialization.h:
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::initializeWebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitialize):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcess/mac/WebProcessServiceEntryPoints.mm:
        (WebKit::WebProcessServiceEventHandler):
        (initializeWebProcessForWebProcessServiceForWebKitDevelopment):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2013-01-04  Tim Horton  <timothy_horton@apple.com>

        [wk2] Remove non-visible tiles from the layer tree
        https://bugs.webkit.org/show_bug.cgi?id=106061
        <rdar://problem/12761821>

        Reviewed by Simon Fraser.

        Add a setting to enable aggressive retention of TileCache tiles. If enabled,
        TileCache will generally try to keep around all tiles. This setting is off by default.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAggressiveTileRetentionEnabled):
        (WKPreferencesGetAggressiveTileRetentionEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences): Forward the setting to the TiledBacking.

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

        Make process initialization more uniform by renaming initialization methods and removing extraneous parameters
        https://bugs.webkit.org/show_bug.cgi?id=106120

        Reviewed by Brady Eidson.

        Rename FooProcess::initialize() -> FooProcess::initializeConnection() and removes
        the RunLoop parameter since it is always the same the as RunLoop::main().

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeConnection):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * NetworkProcess/mac/NetworkProcessInitialization.mm:
        (WebKit::initializeNetworkProcess):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::initializeConnection):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * PluginProcess/qt/PluginProcessMainQt.cpp:
        (WebKit::PluginProcessMain):
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::initializeConnection):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):

2013-01-04  Adam Klein  <adamk@chromium.org>

        Remove ENABLE_MUTATION_OBSERVERS #define
        https://bugs.webkit.org/show_bug.cgi?id=105459

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2013-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WK2] [Gtk] crash when web inspector is attached, and window height is reduced.
        https://bugs.webkit.org/show_bug.cgi?id=106052

        Reviewed by Martin Robinson.

        Do not allocate more size for the inspector view than its parent
        size. Also make sure that the view size is always at least 1.

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

2013-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][Qt] Make compositing messages async again
        https://bugs.webkit.org/show_bug.cgi?id=106082

        Reviewed by Simon Hausmann.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::confirmComposition):
        (WebKit::WebPageProxy::cancelComposition):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::confirmComposition):
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::cancelComposition):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2013-01-04  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r138728): Causes crashes on the build bots
        https://bugs.webkit.org/show_bug.cgi?id=106083

        Reviewed by Simon Hausmann.

        Update encodeTimingFunction() to encode the x/y members only
        if the bezierPreset is set to custom. This is needed because
        decodeTimingFunction() only decodes x/y members if the
        bezierPreset is set to custom.

        This fixes assertion hits on the debug build bots.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::encodeTimingFunction):

2013-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Convert WebSoupRequestManagerProxy to be WebContextSupplement
        https://bugs.webkit.org/show_bug.cgi?id=106012

        Reviewed by Martin Robinson.

        * UIProcess/API/C/soup/WKContextSoup.cpp:
        (WKContextGetSoupRequestManager):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveURIRequest):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebSoupRequestManagerProxy::WebSoupRequestManagerProxy):
        (WebKit::WebSoupRequestManagerProxy::initializeClient):
        (WebKit::WebSoupRequestManagerProxy::contextDestroyed):
        (WebKit::WebSoupRequestManagerProxy::processDidClose):
        (WebKit::WebSoupRequestManagerProxy::refWebContextSupplement):
        (WebKit::WebSoupRequestManagerProxy::derefWebContextSupplement):
        (WebKit::WebSoupRequestManagerProxy::registerURIScheme):
        (WebKit::WebSoupRequestManagerProxy::didHandleURIRequest):
        (WebKit::WebSoupRequestManagerProxy::didReceiveURIRequestData):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):

2013-01-04  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Remove unneeded EwkViewImpl::informLoadCommitted()
        https://bugs.webkit.org/show_bug.cgi?id=106010

        Reviewed by Gyuyoung Kim.

        Removed EwkViewImpl::informLoadCommitted() method to simplify the code.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/efl/PageClientBase.h:
        (PageClientBase):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):

2013-01-03  Jon Lee  <jonlee@apple.com>

        REGRESSION(r138729): crash and assertion failures in WebKit::WebProcess::plugInDidReceiveUserInteraction
        https://bugs.webkit.org/show_bug.cgi?id=106042
        <rdar://problem/12953469>

        Reviewed by Brady Eidson.

        The assertion is hit if plugin snapshotting is disabled, and the user interacts with a plug-in that
        comes from an origin not found in the cached dictionary. The proper fix is to check for whether the
        setting is enabled. Otherwise, that origin should be in the dictionary since the plugin is running.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginDidReceiveUserInteraction): Check for the setting, and avoid the whole code
        path if snapshotting is disabled.

2013-01-03  Roger Fong  <roger_fong@apple.com>

        Remove all traces of Windows from WebKit2 folder.
        https://bugs.webkit.org/show_bug.cgi?id=105585.

        Reviewed by Sam Weinig.

        * win: Removed.
        * win/MainWin.cpp: Removed.
        * win/WebKit2.def.in: Removed.
        * win/WebKit2.make: Removed.
        * win/WebKit2.rc: Removed.
        * win/WebKit2.submit.sln: Removed.
        * win/WebKit2.vcproj: Removed.
        * win/WebKit2Apple.vsprops: Removed.
        * win/WebKit2CFLite.vsprops: Removed.
        * win/WebKit2Common.vsprops: Removed.
        * win/WebKit2Debug.vsprops: Removed.
        * win/WebKit2DebugAll.vsprops: Removed.
        * win/WebKit2DebugCairoCFLite.vsprops: Removed.
        * win/WebKit2DirectX.vsprops: Removed.
        * win/WebKit2ExportGenerator.vcproj: Removed.
        * win/WebKit2ExportGeneratorBuildCmd.cmd: Removed.
        * win/WebKit2ExportGeneratorCommon.vsprops: Removed.
        * win/WebKit2ExportGeneratorDebug.vsprops: Removed.
        * win/WebKit2ExportGeneratorDebugAll.vsprops: Removed.
        * win/WebKit2ExportGeneratorDebugCairoCFLite.vsprops: Removed.
        * win/WebKit2ExportGeneratorPostBuild.cmd: Removed.
        * win/WebKit2ExportGeneratorPreBuild.cmd: Removed.
        * win/WebKit2ExportGeneratorProduction.vsprops: Removed.
        * win/WebKit2ExportGeneratorRelease.vsprops: Removed.
        * win/WebKit2ExportGeneratorReleaseCairoCFLite.vsprops: Removed.
        * win/WebKit2Generated.make: Removed.
        * win/WebKit2Generated.vcproj: Removed.
        * win/WebKit2GeneratedCommon.vsprops: Removed.
        * win/WebKit2Production.vsprops: Removed.
        * win/WebKit2Release.vsprops: Removed.
        * win/WebKit2ReleaseCairoCFLite.vsprops: Removed.
        * win/WebKit2WebProcess.resources: Removed.
        * win/WebKit2WebProcess.resources/Info.plist: Removed.
        * win/WebKit2WebProcess.vcproj: Removed.
        * win/WebKit2WebProcessCommon.vsprops: Removed.
        * win/WebKit2WebProcessDebug.vsprops: Removed.
        * win/WebKit2WebProcessDebugAll.vsprops: Removed.
        * win/WebKit2WebProcessDebugCairoCFLite.vsprops: Removed.
        * win/WebKit2WebProcessPostBuild.cmd: Removed.
        * win/WebKit2WebProcessPreBuild.cmd: Removed.
        * win/WebKit2WebProcessProduction.vsprops: Removed.
        * win/WebKit2WebProcessRelease.vsprops: Removed.
        * win/WebKit2WebProcessReleaseCairoCFLite.vsprops: Removed.
        * win/WebKitPostBuild.cmd: Removed.
        * win/WebKitPreBuild.cmd: Removed.
        * win/WebKitPreLink.cmd: Removed.
        * win/build-generated-files.sh: Removed.
        * win/deleteButton.png: Removed.
        * win/deleteButtonPressed.png: Removed.
        * win/fsVideoAudioVolumeHigh.png: Removed.
        * win/fsVideoAudioVolumeLow.png: Removed.
        * win/fsVideoExitFullscreen.png: Removed.
        * win/fsVideoPause.png: Removed.
        * win/fsVideoPlay.png: Removed.
        * win/missingImage.png: Removed.
        * win/nullplugin.png: Removed.
        * win/panEastCursor.png: Removed.
        * win/panIcon.png: Removed.
        * win/panNorthCursor.png: Removed.
        * win/panNorthEastCursor.png: Removed.
        * win/panNorthWestCursor.png: Removed.
        * win/panSouthCursor.png: Removed.
        * win/panSouthEastCursor.png: Removed.
        * win/panSouthWestCursor.png: Removed.
        * win/panWestCursor.png: Removed.
        * win/resource.h: Removed.
        * win/searchCancel.png: Removed.
        * win/searchCancelPressed.png: Removed.
        * win/searchMagnifier.png: Removed.
        * win/searchMagnifierResults.png: Removed.
        * win/textAreaResizeCorner.png: Removed.
        * win/verticalTextCursor.png: Removed.
        * win/xcopy.excludes: Removed.
        * win/zoomInCursor.png: Removed.
        * win/zoomOutCursor.png: Removed.

2013-01-03  Kiran Muppala  <cmuppala@apple.com>

        Ensure autorelease pool exists when calling WKNSProcessInfoProcessAssertionWithTypes on Mac
        https://bugs.webkit.org/show_bug.cgi?id=105674

        Reviewed by Sam Weinig.

        The function WKNSProcessInfoProcessAssertionWithTypes returns a autoreleased object and since,
        it is called during process initialization prior to the runloop being started in PluginProcess
        and SharedWorkerProcess, an autorelease pool must be explictly created.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain): Enclose process initialization code in an @autoreleasepool block.
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain): Ditto.

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

        [Qt] Unreviewed debug buildfix after r138723.

        * WebProcess/qt/QtBuiltinBundle.cpp:

2013-01-02  Jon Lee  <jonlee@apple.com>

        Revert auto-start plugins to snapshotted plugins after a period of inactivity
        https://bugs.webkit.org/show_bug.cgi?id=105973
        <rdar://problem/12947865>

        Reviewed by Brady Eidson.

        Change the set of origin hashes maintained by the web process to a hash map that associates
        a timestamp for each hash. If the plug-in's origin is marked for auto-start, we also check
        it against the timestamp. If the time is later, then we consider the entry stale, and snapshot
        the plug-in instead.

        But, if the user interacts with the plug-in, we delay that expiration timestamp out, so that
        it expires a month from first interaction. To avoid too much chatter between the web processes
        and UI process, we only update the timestamp if a day a passed since the last change to the
        timestamp.

        * WebProcess/Plugins/PluginView.h:
        (PluginView): Add a member variable to flag whether the user had interacted with the plug-in.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView): Initialize the flag to false.
        (WebKit::PluginView::handleEvent): We consider mouse down, up, wheel, context menu, and keyboard
        events as user interaction. Do not consider mouse enter, leave, and move events as user
        interaction. Also, remove unneeded comments.
        (WebKit::PluginView::pluginDidReceiveUserInteraction): If this is the first time the function is
        called, tell the web process, so that the expiration timestamp can be updated.

        * WebProcess/WebProcess.messages.in: Update the messages to include the expiration time.
        * WebProcess/WebProcess.h:
        (WebProcess): Update the cached copy of the auto-start origins to include their expiration
        timestamps. Update the message signatures. Add a function to update the expiration timestamp
        for a specific origin. Rename plugInAutoStartOriginsChanged to resetPlugInAutoStartOrigins.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Instead of individually adding the origins in the
        provided vector, just call resetPlugInAutoStartOrigins().
        (WebKit::WebProcess::isPlugInAutoStartOrigin): Check to see if the origin is in the table, and if
        so, check the current time against the expiration time.
        (WebKit::WebProcess::didAddPlugInAutoStartOrigin): Update the cached table.
        (WebKit::WebProcess::resetPlugInAutoStartOrigins): Swap the tables between the provided parameter
        and the member variable. We can safely do this because the function is called in two cases where
        the parameter is afterwards thrown away: when a new web process is created, and when it is called
        through an IPC message.
        (WebKit::WebProcess::plugInDidReceiveUserInteraction): When invoked, we tell the UI process to
        update the expiration time for the given origin if the time difference between the expiration
        time and the current time is less than the threshold plugInAutoStartExpirationTimeUpdateThreshold.

        * UIProcess/WebContext.messages.in: Add message that is called when the web process wants to
        update the expiration timestamp for the plug-in origin.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::plugInDidReceiveUserInteraction): Forward to the provider.
        * UIProcess/WebContext.h:

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::expirationTimeFromNow): Returns a new time based on the current time + 1 month.
        (WebKit::PlugInAutoStartProvider::addAutoStartOrigin): Refactor. Set the expiration time for the
        added origin.
        (WebKit::PlugInAutoStartProvider::autoStartOriginsCopy): Refactor.
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy): Refactor to include the expiration
        times. Also, check the current time against the expiration time. If we are past the time, remove
        the entry from the copy.
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTable): Refactor to extract and duplicate
        the provided map of origins and expiration timestamps.
        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction): Look for the origin hash. If found,
        update the expiration time. Update all existing web processes with the new expiration time, and
        tell the context client that the hashes have changed.
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        (PlugInAutoStartProvider): Change the m_autoStartHashes variable to a map of a hash to its domain
        entry in the auto-start table. It is used to cross-reference the auto-start table and update
        the origin's expiration time.

        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters): Switch the creation parameter to seed the origin table to a map.

2013-01-03  Alexis Menard  <alexis@webkit.org>

        Querying transition-timing-function value on the computed style does not return keywords when it should.
        https://bugs.webkit.org/show_bug.cgi?id=105442

        Reviewed by Simon Fraser.

        Update the code to pass the animations from one process to another as
        the constructor of TimingFunction changed to take an extra parameter
        holding the type of the cubic-bezier form.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::encodeTimingFunction):
        (CoreIPC::decodeTimingFunction):

2013-01-03  Rik Cabanier  <cabanier@adobe.com>

        Canvas blending tests fail on Mac WK2
        https://bugs.webkit.org/show_bug.cgi?id=105943

        Reviewed by Simon Fraser.

        CanvasUsesAcceleratedDrawing preference was not passed to the WebProcess.

        * WebProcess/InjectedBundle/InjectedBundle.cpp: Adds support for CanvasUsesAcceleratedDrawing to WK2
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):

2013-01-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Use WebPageProxy::postMessageToInjectedBundle when passing messages to a specific page in the builtin bundle
        https://bugs.webkit.org/show_bug.cgi?id=105928

        Reviewed by Simon Hausmann.

        Simplify the code since we now can send the contents as is, instead of packaging it inside
        an array that also contained the reference for the page. This was made possible after
        r126311.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::setNavigatorQtObjectEnabled):
        (QQuickWebViewExperimental::postMessage):
        Built the messages and used WebPageProxy::postMessageToInjectedBundle() directly.

        * UIProcess/qt/QtWebContext.cpp: Removed functions that now are simpler and were inlined in
        qquickwebview.cpp.
        * UIProcess/qt/QtWebContext.h: Ditto.
        * WebProcess/qt/QtBuiltinBundle.cpp:
        (WebKit::QtBuiltinBundle::initialize): Used the callback that gets messages for specific
        pages. Also changed the way we create the bundle client: now we fill the struct with zeros,
        and then set the fields we care about. This way if another field is added to that client,
        this code doesn't need to be changed.
        (WebKit::QtBuiltinBundle::didReceiveMessageToPage):
        (WebKit::QtBuiltinBundle::handleMessageToNavigatorQtObject): Changed to not read the page
        reference from the message, since we get it in the callback already.
        (WebKit::QtBuiltinBundle::handleSetNavigatorQtObjectEnabled): Ditto.
        * WebProcess/qt/QtBuiltinBundle.h:
        (QtBuiltinBundle):

2013-01-03  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix a crash when the QQuickWebPage is destroyed between the scene graph sync and render.
        https://bugs.webkit.org/show_bug.cgi?id=106018

        Reviewed by Simon Hausmann.

        The main and rendering threads are only guaranteed to be synchronised in
        the updatePaintNode call. In every other cases, QQuickItems cannot be
        safely accessed from the rendering thread.

        Do as the first patch version in
        https://bugs.webkit.org/show_bug.cgi?id=104574 was doing and copy the
        ratio value directly to fix the issue.

        Also add a note about the threading issue in QQuickWebPage::updatePaintNode.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPage::updatePaintNode):
        * UIProcess/qt/QtWebPageSGNode.cpp:
        (WebKit::QtWebPageSGNode::QtWebPageSGNode):
        * UIProcess/qt/QtWebPageSGNode.h:
        (QtWebPageSGNode):
        (WebKit::QtWebPageSGNode::devicePixelRatio):
        (WebKit::QtWebPageSGNode::setDevicePixelRatio):

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

        Stop pretending its possible to run the WebProcess in threaded mode
        https://bugs.webkit.org/show_bug.cgi?id=105969

        Reviewed by Alexey Proskuryakov.

        - Removes WebProcess::isSeparateProcess()
        - Stop storing a RunLoop on the WebProcess and just use RunLoop::main().

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::NPRuntimeObjectMap):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::PageOverlay):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::close):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeConnection):
        (WebKit::WebProcess::shouldTerminate):
        (WebKit::WebProcess::terminate):
        (WebKit::WebProcess::didClose):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::initializeWebProcess):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):
        * WebProcess/win/WebProcessMainWin.cpp:
        (WebKit::WebProcessMain):

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

        Factor out NetworkProcess initialization into its own function in preparation of adding a NetworkProcess service
        https://bugs.webkit.org/show_bug.cgi?id=105946

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessInitialization.h: Added.
        (NetworkProcessInitializationParameters):
        * NetworkProcess/mac/NetworkProcessInitialization.mm: Added.
        (WebKit::initializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        (WebKit::NetworkProcess::platformInitialize):
        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain):
        * WebKit2.xcodeproj/project.pbxproj:

2013-01-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138403.
        http://trac.webkit.org/changeset/138403
        https://bugs.webkit.org/show_bug.cgi?id=105950

        Fixing e138331 which was rolled out in r138403 (Requested by
        rfong on #webkit).

        * win/WebKit2.def.in:

2013-01-02  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another Windows build fix attempt. Try exporting more symbols.

        * win/WebKit2.def.in:

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

        REGRESSION (r138464): Safari hangs when opening Privacy preferences
        https://bugs.webkit.org/show_bug.cgi?id=105933

        Reviewed by Sam Weinig.

        Quick and dirty fix - added a special case for main thread. But I'm not sure if
        dispatch_sync on main queue is really the best idiom here.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromCarbonResources):

2013-01-02  Ryosuke Niwa  <rniwa@webkit.org>

        Don't include a header that has been removed in r138413.

        * WebProcess/win/WebProcessWin.cpp:

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

        [WK2] Rename SetFrameInViewSourceMode to SetMainFrameInViewSourceMode
        https://bugs.webkit.org/show_bug.cgi?id=105885

        Reviewed by Martin Robinson.

        This way we don't depend on a WebFrameProxy and
        webkit_web_view_set_view_mode() works even if the main frame proxy
        hasn't been created yet.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_set_view_mode): Call
        WebPageProxy::setMainFrameInViewSourceMode() directly.
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy): Remove
        setInViewSourceMode().
        * UIProcess/WebFrameProxy.h:
        (WebFrameProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setMainFrameInViewSourceMode):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setMainFrameInViewSourceMode):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2013-01-02  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        [Qt] Use WebPageGroup to create user scripts instead of Qt-specific function in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=105921

        Reviewed by Simon Hausmann.

        After r131281 the WebPageGroup.h (in UIProcess) exposes a way to add user scripts, so we can
        use this directly to implement the user script functionality in Qt. The previous solution was
        a Qt-port specific function in WebPage that can be removed now.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::updateUserScripts): Use WebPageGroup functions to manipulate user scripts directly.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Remove now unused function.
        * UIProcess/qt/WebPageProxyQt.cpp: Ditto.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.
        * WebProcess/WebPage/qt/WebPageQt.cpp: Remove now unused function and headers.

2013-01-02  Heikki Paajanen  <heikki.paajanen@palm.com>

        [Qt][WK2] Add experimental API to find text from page
        https://bugs.webkit.org/show_bug.cgi?id=96481

        Reviewed by Jocelyn Turcotte.

        Expose findString and PageFindClient provided functionality to QtQuick
        applications.

        * Target.pri:
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewExperimental::findText):
        (QQuickWebViewPrivate::didFindString):
        * UIProcess/API/qt/qquickwebview_p.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/tests/qmltests/WebView/tst_findText.qml: Added.
        * UIProcess/qt/QtWebPageFindClient.cpp: Added.
        (WebKit):
        (WebKit::QtWebPageFindClient::QtWebPageFindClient):
        (WebKit::QtWebPageFindClient::didFindString):
        (WebKit::toQtWebPageFindClient):
        (WebKit::QtWebPageFindClient::didFailToFindString):
        * UIProcess/qt/QtWebPageFindClient.h: Added.
        (WebKit):
        (QtWebPageFindClient):

2013-01-02  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r138607): Causes crashes related to WebIconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=105909

        Reviewed by Gyuyoung Kim.

        Add back WebIconDatabase initialization statement
        in WebContext constructor. It was removed in
        r138607 and causing a lot of crashes on WebKit2.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):

2012-12-31  Sam Weinig  <sam@webkit.org>

        Convert more classes to be WebContextSupplements
        https://bugs.webkit.org/show_bug.cgi?id=105890

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetCookieManager):
        (WKContextGetDatabaseManager):
        (WKContextGetGeolocationManager):
        (WKContextGetKeyValueStorageManager):
        (WKContextGetMediaCacheManager):
        (WKContextGetNotificationManager):
        (WKContextGetResourceCacheManager):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::cookieManager):
        (EwkContext::clearResourceCache):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        (EwkDatabaseManager::create):
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (EwkStorageManager::create):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):
        (webkit_web_context_clear_cache):
        (webkit_web_context_get_cookie_manager):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        (WebKit::WebNotificationManagerProxy::initializeProvider):
        (WebKit::WebNotificationManagerProxy::contextDestroyed):
        (WebKit::WebNotificationManagerProxy::processDidClose):
        (WebKit::WebNotificationManagerProxy::refWebContextSupplement):
        (WebKit::WebNotificationManagerProxy::derefWebContextSupplement):
        (WebKit::WebNotificationManagerProxy::didReceiveMessage):
        (WebKit::WebNotificationManagerProxy::providerDidShowNotification):
        (WebKit::WebNotificationManagerProxy::providerDidClickNotification):
        (WebKit::WebNotificationManagerProxy::providerDidCloseNotifications):
        (WebKit::WebNotificationManagerProxy::providerDidUpdateNotificationPolicy):
        (WebKit::WebNotificationManagerProxy::providerDidRemoveNotificationPolicies):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::removeNetworkProcessProxy):
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        (WebKit::WebContext::iconDatabase):
        * UIProcess/WebContextSupplement.h:
        (WebKit):
        (WebKit::WebContextSupplement::contextDestroyed):
        (WebKit::WebContextSupplement::processDidClose):
        (WebContextSupplement):
        (WebKit::WebContextSupplement::shouldTerminate):
        (WebKit::WebContextSupplement::ref):
        (WebKit::WebContextSupplement::deref):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::initializeClient):
        (WebKit::WebCookieManagerProxy::contextDestroyed):
        (WebKit::WebCookieManagerProxy::processDidClose):
        (WebKit::WebCookieManagerProxy::shouldTerminate):
        (WebKit::WebCookieManagerProxy::refWebContextSupplement):
        (WebKit::WebCookieManagerProxy::derefWebContextSupplement):
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname):
        (WebKit::WebCookieManagerProxy::deleteAllCookies):
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        (WebKit::WebDatabaseManagerProxy::initializeClient):
        (WebKit::WebDatabaseManagerProxy::contextDestroyed):
        (WebKit::WebDatabaseManagerProxy::processDidClose):
        (WebKit::WebDatabaseManagerProxy::refWebContextSupplement):
        (WebKit::WebDatabaseManagerProxy::derefWebContextSupplement):
        (WebKit::WebDatabaseManagerProxy::didReceiveMessage):
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        (WebKit::WebGeolocationManagerProxy::initializeProvider):
        (WebKit::WebGeolocationManagerProxy::contextDestroyed):
        (WebKit::WebGeolocationManagerProxy::processDidClose):
        (WebKit::WebGeolocationManagerProxy::refWebContextSupplement):
        (WebKit::WebGeolocationManagerProxy::derefWebContextSupplement):
        (WebKit::WebGeolocationManagerProxy::didReceiveMessage):
        (WebKit::WebGeolocationManagerProxy::providerDidChangePosition):
        (WebKit::WebGeolocationManagerProxy::providerDidFailToDeterminePosition):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        (WebKit::WebKeyValueStorageManagerProxy::contextDestroyed):
        (WebKit::WebKeyValueStorageManagerProxy::processDidClose):
        (WebKit::WebKeyValueStorageManagerProxy::refWebContextSupplement):
        (WebKit::WebKeyValueStorageManagerProxy::derefWebContextSupplement):
        (WebKit::WebKeyValueStorageManagerProxy::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManagerProxy::deleteAllEntries):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        (WebKit::WebMediaCacheManagerProxy::contextDestroyed):
        (WebKit::WebMediaCacheManagerProxy::processDidClose):
        (WebKit::WebMediaCacheManagerProxy::refWebContextSupplement):
        (WebKit::WebMediaCacheManagerProxy::derefWebContextSupplement):
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForHostname):
        (WebKit::WebMediaCacheManagerProxy::clearCacheForAllHostnames):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showNotification):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::supplementName):
        (WebKit):
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        (WebKit::WebResourceCacheManagerProxy::contextDestroyed):
        (WebKit::WebResourceCacheManagerProxy::processDidClose):
        (WebKit::WebResourceCacheManagerProxy::refWebContextSupplement):
        (WebKit::WebResourceCacheManagerProxy::derefWebContextSupplement):
        (WebKit::WebResourceCacheManagerProxy::didReceiveMessage):
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):

2013-01-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12942239> Update copyright strings

        Reviewed by Sam Weinig.

        * Info.plist:
        * NetworkProcess/Info.plist:
        * PluginProcess/Info.plist:
        * SharedWorkerProcess/Info.plist:
        * WebProcess/Info.plist:
        * WebProcessService/Info.plist:
        * WebProcessServiceForWebKitDevelopment/Info.plist:

2013-01-01  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL] Enable MHTML feature
        https://bugs.webkit.org/show_bug.cgi?id=105815

        Reviewed by Laszlo Gombos.

        Add missing include directory for ENABLE_MHTML.

        * CMakeLists.txt:

2012-12-30  Sam Weinig  <sam@webkit.org>

        Add supplementability for WebContext
        https://bugs.webkit.org/show_bug.cgi?id=105878

        Reviewed by Dan Bernstein.

        Add WebContextSupplement and convert WebApplicationCacheManagerProxy to it.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetApplicationCacheManager):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::supplementName):
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        (WebKit::WebApplicationCacheManagerProxy::contextDestroyed):
        (WebKit::WebApplicationCacheManagerProxy::processDidClose):
        (WebKit::WebApplicationCacheManagerProxy::refWebContextSupplement):
        (WebKit::WebApplicationCacheManagerProxy::derefWebContextSupplement):
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManagerProxy::deleteAllEntries):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::supplement):
        (WebKit::WebContext::addSupplement):
        * UIProcess/WebContextSupplement.h: Added.
        (WebKit::WebContextSupplement::WebContextSupplement):
        (WebKit::WebContextSupplement::~WebContextSupplement):
        (WebKit::WebContextSupplement::ref):
        (WebKit::WebContextSupplement::deref):
        (WebKit::WebContextSupplement::context):
        (WebKit::WebContextSupplement::clearContext):
        * WebKit2.xcodeproj/project.pbxproj:

2012-12-31  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL[WK2] Regression(r138574): Should not allocate memory in the fork
        https://bugs.webkit.org/show_bug.cgi?id=105868

        Reviewed by Kenneth Rohde Christiansen.

        Store prefixed executable path in a CString before the fork to
        avoid allocating memory in the fork by calling String::utf8().
        Allocating memory in the fork may lead to deadlocks due to
        FastMalloc and the fork not inheriting the threads.

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

2012-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set a WebKitWebView in view source mode to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=99315

        Reviewed by Martin Robinson.

        Add a generic API to set/get a view mode. For now there are only
        two modes, Web and Source, but the API can be extended if we
        eventually support other view modes like Printing for example.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetProperty): Implement setter for view-mode
        property.
        (webkitWebViewGetProperty): Implement getter for view-mode
        property.
        (webkit_web_view_class_init): Add view-source property.
        (webkit_web_view_set_view_mode): Public method to set the view
        mode.
        (webkit_web_view_get_view_mode): Public method to get the view
        mode.
        * UIProcess/API/gtk/WebKitWebView.h: Add WebKitViewMode enum.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewMode):
        (beforeAll):
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::WebFrameProxy): Initialize
        m_inViewSourceMode.
        (WebKit::WebFrameProxy::setInViewSourceMode): Set
        m_inViewSourceMode if it has changed and call
        WebPageProxy::setFrameInViewSourceMode() to notify the WebProcess.
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::inViewSourceMode): Return whether the
        frame is currently in view source mode.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setFrameInViewSourceMode): Send a message
        to the WebProcess to set the given frame in view source mode or not.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add setFrameInViewSourceMode().
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setFrameInViewSourceMode): Call
        setInViewSourceMode for the main frame.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add setFrameInViewSourceMode().
        * WebProcess/WebPage/WebPage.messages.in: Add new message
        SetFrameInViewSourceMode.

2012-12-30  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Invalid use of temporary object in ProcessLauncher::launchProcess()
        https://bugs.webkit.org/show_bug.cgi?id=105867

        Reviewed by Kenneth Rohde Christiansen.

        Fix invalid use of temporary object in ProcessLauncher::launchProcess()
        for prefixedExecutablePath.

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

2012-12-29  Sam Weinig  <sam@webkit.org>

        Windows build fix.

        * win/WebKit2Common.vsprops:

2012-12-29  Sam Weinig  <sam@webkit.org>

        Add supplementability to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=105838

        Reviewed by Dan Bernstein.

        This patch adds a NetworkProcessSupplement, which is almost identical to
        WebProcessSupplement, but has a different initialization override. It also
        stops WebProcessSupplement from inheriting from MessageReceiver (and makes
        everything that is a WebProcessSupplement also a MessageReceiver) as keeping
        that would cause classes that need to be both WebProcessSupplements and
        NetworkProcessSupplements inherit from MessageReceiver twice.

        * GNUmakefile.list.am:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::downloadsAuthenticationManager):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        (NetworkProcess):
        (WebKit::NetworkProcess::supplement):
        (WebKit::NetworkProcess::addSupplement):
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/Network/NetworkProcessSupplement.h: Added.
        (WebKit):
        (NetworkProcessSupplement):
        (WebKit::NetworkProcessSupplement::~NetworkProcessSupplement):
        (WebKit::NetworkProcessSupplement::initialize):
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Geolocation/WebGeolocationManager.h:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h:
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        * WebProcess/Notifications/WebNotificationManager.h:
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        * WebProcess/WebProcessSupplement.h:
        * win/WebKit2.vcproj:

2012-12-28  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] MiniBrowser could not be launched on specific machine
        https://bugs.webkit.org/show_bug.cgi?id=105844

        Reviewed by Gyuyoung Kim.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        Modified to avoid bad use of temporary object.

2012-12-28  Joone Hur  <joone.hur@intel.com>

        [EFL][WK2] Implement ewk_context_resource_cache_clear
        https://bugs.webkit.org/show_bug.cgi?id=104782

        The purpose of this API is to clear HTTP caches in local storage and 
        all resources cached in memory such as images, CSS, JavaScript, XSL, 
        and fonts.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::clearResourceCache): Call WebResourceCacheManager::ClearCacheForAllOrigins.
        (ewk_context_resource_cache_clear):
        * UIProcess/API/efl/ewk_context.h: Add ewk_context_resource_cache_clear. 
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):

2012-12-28  Mark Rowe  <mrowe@apple.com>

        Move logic for extracting the OS X marketing version in to WebCore
        <http://webkit.org/b/105841> / <rdar://problem/10736041>

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::systemMarketingVersionForUserAgentString): Call the WebCore function instead
        of the WKSI function.
        (WebKit::WebPageProxy::standardUserAgent):
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove the code related to the WKSI symbol.

2012-12-28  Sam Weinig  <sam@webkit.org>

        Fix assert seen when adding a custom protocol handler before an initial
        web process has been created.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToNetworkingProcess):

2012-12-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK][WK2] Add support for IME Composition
        https://bugs.webkit.org/show_bug.cgi?id=65093

        Reviewed by Carlos Garcia Campos.

        Add a WebKit2 implementation of the GtkInputMethodFilter and provide
        the necessary plumbing to pass composition information along with
        input method events.

        * GNUmakefile.list.am: Add new files to the source list.
        * Shared/EditorState.cpp: The cursorRect is now passed for GTK+ as well as
        Qt, so update the encode and decode methods to pass that along.
        * Shared/EditorState.h: Add the cursorRect member for GTK+ as well.
        * Shared/NativeWebKeyboardEvent.h:
        (NativeWebKeyboardEvent): Keyboard events should also have knowledge of
        the compositionResults and whether or not the event was faked for composition
        purposes.
        * Shared/gtk/NativeWebKeyboardEventGtk.cpp: Ditto.
        * Shared/gtk/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebKeyboardEvent): Copy the logic of PlatformKeyEvent,
        for properly setting the windows key code and the event text from the composition
        results.
        * Shared/gtk/WebEventFactory.h: The createWebKeyboardEvent factory now takes a
        CompositionResults argument.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::doneWithKeyEvent): Don't forward keyboard events that
        were faked for composition reasons. These events originated from WebKit and should
        never be passed to parent classes.
        (WebKit::PageClientImpl::updateTextInputState): Plumb through the updateTextInputState
        method to the WebViewBase.
        * UIProcess/API/gtk/PageClientImpl.h:
        (PageClientImpl): Add a updateTextInputState method.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: 
        (_WebKitWebViewBasePrivate): Instead of having an input method context as a member
        keep a WebViewBaseInputMethodFilter.
        (webkitWebViewBaseRealize): Set the filter widget when the WebViewBase is realized.
        (webkit_web_view_base_init): No longer create a input method context during init.
        (webkitWebViewBaseFocusInEvent): Pass along focus in events to the filter.
        (webkitWebViewBaseFocusOutEvent): Pass along focus out events to the filter.
        (webkitWebViewBaseKeyPressEvent): Instead of passing key presses directly to the WebProcess,
        filter them through the input method filter.
        (webkitWebViewBaseKeyReleaseEvent): Ditto.
        (webkitWebViewBaseButtonPressEvent): Notify the input method filter about button press events.
        (webkitWebViewBaseGetIMContext): The input method filter owns the input method now.
        (webkitWebViewBaseSetInputMethodState): Add a bit of plumbing for the PageClient.
        (webkitWebViewBaseUpdateTextInputState): Ditto.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Add plumbing declarations.
        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp: Added. An implementation of GtkInputMethodFilter for WebKit2.
        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.h: Copied from Source/WebKit/gtk/WebCoreSupport/WebViewInputMethodFilter.h.
        * UIProcess/PageClient.h:
        (PageClient): updateInputMethod state is now for both Qt and GTK+.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged): Pass the editor state for GTK+ as well as Qt.
        (WebKit::WebPageProxy::setComposition): Moved this method from WebPageProxyQt as it's used for GTK+ now as well.
        (WebKit::WebPageProxy::confirmComposition): Ditto.
        (WebKit::WebPageProxy::cancelComposition): Ditto.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): The setInputMethodState message is for GTK+ as well as Qt now.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::setInputMethodState): Ditto.
        * UIProcess/qt/WebPageProxyQt.cpp: Move some methods to the platform-independent file.
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: More closely match the WebKit1
        logic for dealing with key events so that composition events will be handled properly.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState): Properly pass the cursorRect for GTK+.
        (WebKit::targetFrameForEditing): Moved from the Qt file, because its used by GTK+ as well. They
        now pass along the updated EditorState as well, just like the Mac versions.
        (WebKit::WebPage::confirmComposition): Ditto.
        (WebKit::WebPage::setComposition): Ditto.
        (WebKit::WebPage::cancelComposition): Ditto.
        * WebProcess/WebPage/WebPage.h: The above messages are now for GTK+ as well as Qt.
        * WebProcess/WebPage/WebPage.messages.in: Ditto.
        * WebProcess/WebPage/qt/WebPageQt.cpp: Moved some methods to the platform-independent file.

2012-12-28  Sam Weinig  <sam@webkit.org>

        Appease the Windows Gods.

        * WebProcess/Notifications/WebNotificationManager.cpp:

2012-12-27  Sam Weinig  <sam@webkit.org>

        Make CustomProtocolManager a WebProcessSupplement
        https://bugs.webkit.org/show_bug.cgi?id=105814

        Reviewed by Dan Bernstein.

        This converts CustomProtocolManager from a global singleton, to be a
        supplement of the WebProcess. Since it also needs to act as a supplement
        of the NetworkProcess, it adds an initialization function for the NetworkProcess
        as well, while we await the arrival of the forthcoming NetworkProcessSupplement.
        
        In addition, this moves the handling of registering and unregistering schemes
        directly to the CustomProtocolManager, instead of requiring an unnecessary trip
        in the ChildProcess.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in:
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (+[WKCustomProtocol canInitWithRequest:]):
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
        (-[WKCustomProtocol startLoading]):
        (-[WKCustomProtocol stopLoading]):
        (WebKit::CustomProtocolManager::supplementName):
        (WebKit::CustomProtocolManager::CustomProtocolManager):
        (WebKit::CustomProtocolManager::initialize):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::registerSchemeForCustomProtocol):
        (WebKit::WebContext::unregisterSchemeForCustomProtocol):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2012-12-27  Sam Weinig  <sam@webkit.org>

        Convert a few other WebProcess managers to be WebProcessSupplements
        https://bugs.webkit.org/show_bug.cgi?id=105812

        Reviewed by Dan Bernstein.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::supplementName):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        (WebApplicationCacheManager):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::supplementName):
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::supplementName):
        * WebProcess/Cookies/WebCookieManager.h:
        (WebCookieManager):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::supplementName):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAlwaysAcceptCookies):
        (WebKit::InjectedBundle::clearApplicationCache):
        (WebKit::InjectedBundle::setAppCacheMaximumSize):
        (WebKit::InjectedBundle::webNotificationID):
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::supplementName):
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        (WebMediaCacheManager):
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::permissionLevel):
        (WebKit::NotificationPermissionRequestManager::setPermissionLevelForTesting):
        (WebKit::NotificationPermissionRequestManager::removeAllPermissionsForTesting):
        (WebKit::NotificationPermissionRequestManager::didReceiveNotificationPermissionDecision):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::supplementName):
        (WebKit::WebNotificationManager::initialize):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::supplementName):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        (WebResourceCacheManager):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        * WebProcess/WebCoreSupport/WebGeolocationClient.cpp:
        (WebKit::WebGeolocationClient::geolocationDestroyed):
        (WebKit::WebGeolocationClient::startUpdating):
        (WebKit::WebGeolocationClient::stopUpdating):
        * WebProcess/WebCoreSupport/WebNotificationClient.cpp:
        (WebKit::WebNotificationClient::show):
        (WebKit::WebNotificationClient::cancel):
        (WebKit::WebNotificationClient::clearNotifications):
        (WebKit::WebNotificationClient::notificationObjectDestroyed):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::downloadsAuthenticationManager):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::textCheckerState):
        (WebKit::WebProcess::networkAccessManager):
        (WebKit::WebProcess::soupRequestManager):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-12-27  Viatcheslav Ostapenko  <sl.ostapenko@samsung.com>

        [EFL][WK2] Regression(138462) Sometimes garbage in snapshots
        https://bugs.webkit.org/show_bug.cgi?id=105803

        Reviewed by Kenneth Rohde Christiansen.

        Instead of creating temporary buffer and then creating cairo surface
        from it, create cairo surface 1st and use surface image internal buffer
        to read pixels from GL buffer. 

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::takeSnapshot):
        * UIProcess/API/efl/SnapshotImageGL.cpp:
        (getImageSurfaceFromFrameBuffer):
        * UIProcess/API/efl/SnapshotImageGL.h:

2012-12-27  Sam Weinig  <sam@webkit.org>

        Actually make use of the WebProcessSupplements by adding a supplement map to WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=105804

        Reviewed by Dan Bernstein.

        This continues the work of adding extensibility to WebProcess by adding a supplement
        map, and using it as proof of concept for WebDatabaseManager and WebKeyValueStorageManager.

        - A supplement is added to WebProcess by calling:
            process->addSupplement<SupplementFoo>();
        - A supplement can be used accessed by calling:
            process->supplement<SupplementFoo>();

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases):
        (WebKit::InjectedBundle::setDatabaseQuota):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Switch to using the new supplement accessor.

        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::supplementName):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h:
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::supplementName):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        Add static supplementName functions. We might want to merge this with
        the message class name, but for now we have both. 

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Add supplements the new way. This should eventually move to the caller
        of WebProcess::initialize, so that we can reduce #ifdefs and ports have
        a chance to customize.
        
        (WebKit::WebProcess::initializeWebProcess):
        Iterate the supplements to give each a chance to initialize.

        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::supplement):
        (WebKit::WebProcess::addSupplement):
        Add functions to add and get WebProcessSupplements.

2012-12-26  Sam Weinig  <sam@webkit.org>

        Add an initial stab at a generic supplemental interface for WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=105779

        Reviewed by Darin Adler.

        This starts the process of adding a mechanism to WebProcess to extend its
        functionality without actually changing it (similar to the Supplement
        mechanism in WebCore). This will make it possible for ports to add functionality
        that might not be needed or wanted by other ports.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::initialize):
        (WebKit):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::localStorageDirectory):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        (WebKit::WebDatabaseManager::initialize):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::keyValueStorageManager):
        (WebKit):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcessSupplement.h: Added.
        (WebKit):
        (WebProcessSupplement):
        (WebKit::WebProcessSupplement::~WebProcessSupplement):
        (WebKit::WebProcessSupplement::initialize):

2012-12-27  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Regression(135935) layout tests snapshots are flaky
        https://bugs.webkit.org/show_bug.cgi?id=103468

        Reviewed by Kenneth Rohde Christiansen.

        Make sure that we wait for pending repaints before taking a
        snapshot to avoid flakiness in pixel / ref tests. We also
        suspend all animations before taking the snapshot to make
        sure we don't wait forever for repaint events to be processed.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::takeSnapshot):

2012-12-26  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Xmas buildfix after r138479.

        * WebProcess/MediaCache/WebMediaCacheManager.h:

2012-12-25  Sam Weinig  <sam@webkit.org>

        Convert WebKeyValueStorageManager and WebMediaCacheManager to MessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=105751

        Reviewed by Andreas Kling.

        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::WebKeyValueStorageManager):
        (WebKit::WebKeyValueStorageManager::dispatchDidGetKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::deleteEntriesForOrigin):
        (WebKit::WebKeyValueStorageManager::deleteAllEntries):
        * WebProcess/KeyValueStorage/WebKeyValueStorageManager.h:
        (WebKeyValueStorageManager): Remove unused m_originsLoaded member variable.
        * WebProcess/MediaCache/WebMediaCacheManager.cpp:
        (WebKit::WebMediaCacheManager::WebMediaCacheManager):
        (WebKit::WebMediaCacheManager::getHostnamesWithMediaCache):
        (WebKit::WebMediaCacheManager::clearCacheForHostname):
        (WebKit::WebMediaCacheManager::clearCacheForAllHostnames):
        * WebProcess/MediaCache/WebMediaCacheManager.h:
        (WebMediaCacheManager):
        Convert the managers to MessageReceiver.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):
        Add the new managers.

2012-12-25  Sam Weinig  <sam@webkit.org>

        Fix the Database manager assert, again.

        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit):
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        (WebKit::WebDatabaseManager::initialize):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2012-12-25  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Manage the lifecycle of CoordinatedGraphicsLayer explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=104990

        Reviewed by Noam Rosenthal.

        Send explicit commands to the UI process to create/delete compositing
        layers, instead of having the UI process decide lazily when to create
        them.

        Avoid creating a compositing layer at all if it was deleted in the same
        cycle.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::createCompositingLayer):
        (WebKit):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createCanvas):
        (WebKit::LayerTreeRenderer::destroyCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::getLayerByIDIfExists):
        (WebKit):
        (WebKit::LayerTreeRenderer::createLayer):
        (WebKit::LayerTreeRenderer::deleteLayer):
        (WebKit::LayerTreeRenderer::setRootLayerID):
        (WebKit::LayerTreeRenderer::createTile):
        (WebKit::LayerTreeRenderer::removeTile):
        (WebKit::LayerTreeRenderer::updateTile):
        (WebKit::LayerTreeRenderer::ensureRootLayer):
        (WebKit::LayerTreeRenderer::setLayerAnimations):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::createCompositingLayers):
        (WebKit):
        (WebKit::CoordinatedLayerTreeHost::deleteCompositingLayers):
        (WebKit::CoordinatedLayerTreeHost::detachLayer):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2012-12-25  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * WebProcess/WebPage/qt/WebPageQt.cpp:

2012-12-24  Sam Weinig  <sam@webkit.org>

        Reduce the number of includes in WebProcess.h
        https://bugs.webkit.org/show_bug.cgi?id=105709

        Reviewed by Dan Bernstein.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::downloadsAuthenticationManager):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebContextMenu.cpp:
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::downloadsAuthenticationManager):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::geolocationManager):
        (WebKit):
        (WebKit::WebProcess::applicationCacheManager):
        (WebKit::WebProcess::resourceCacheManager):
        (WebKit::WebProcess::cookieManager):
        (WebKit::WebProcess::authenticationManager):
        (WebKit::WebProcess::databaseManager):
        (WebKit::WebProcess::notificationManager):
        (WebKit::WebProcess::pluginProcessConnectionManager):
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::webResourceLoadScheduler):
        (WebKit::WebProcess::pluginProcessCrashed):
        * WebProcess/WebProcess.h:
        (WebCore):
        (WebKit):
        (WebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-12-25  Andreas Kling  <akling@apple.com>

        [WK2][Mac] Call Carbon resource APIs on main thread only.
        <rdar://problem/11760262>
        <http://webkit.org/b/105746>

        Reviewed by Anders Carlsson.

        The Carbon resource APIs are not thread-safe, so use a little libdispatch sugar to make
        sure that plugin enumeration never calls them on a secondary thread.

        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::getPluginInfoFromCarbonResourcesOnMainThread):
        (WebKit::getPluginInfoFromCarbonResources):

2012-12-25  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL][WK2] Build breaks with --no-input-type-color
        https://bugs.webkit.org/show_bug.cgi?id=105740

        Reviewed by Laszlo Gombos.

        * UIProcess/API/efl/EwkViewImpl.h: Add INPUT_TYPE_COLOR guard.
        (EwkViewImpl):

2012-12-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Refactor snapshot taking code
        https://bugs.webkit.org/show_bug.cgi?id=105687

        Reviewed by Kenneth Rohde Christiansen.

        Refactor EFL WK2 snapshot taking code to use
        smart pointers when possible and follow naming
        conventions.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewCreateSnapshot):
        * UIProcess/API/C/efl/WKView.h: Rename WKViewGetSnapshot
        to WKViewCreateSnapshot to follow C API naming conventions,
        since the returned value needs to be adopted.
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::takeSnapshot):
        * UIProcess/API/efl/EwkViewImpl.h: Have takeSnapshot() return
        a cairo_surface_t instead of a WKType. The value should be
        converted to a WKType at C API level.
        (EwkViewImpl):
        * UIProcess/API/efl/SnapshotImageGL.cpp: Use OwnArrayPtr for the
        buffer to avoid manual memory handling. Remove useless call to
        glBindTexture() since glReadPixels() reads pixels from the frame
        buffer, not from the texture.
        (getImageDataFromFrameBuffer):
        * UIProcess/API/efl/SnapshotImageGL.h: Rename getImageFromCurrentTexture
        to getImageDataFromFrameBuffer for consistency since we technically
        return the pixel data of the image and since glReadPixels does not
        actually read from the texture. Have the function return a smart
        pointer instead of a raw one to avoid manual memory handling.

2012-12-25  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Find-in-page
        https://bugs.webkit.org/show_bug.cgi?id=105710
        <rdar://problem/12555331>

        Reviewed by Alexey Proskuryakov.

        Make use of PDFLayerController's find-in-page functionality to mimic WebKit's.
        Add two Plugin methods, countFindMatches and findString, and make use of them
        if attempting to find-in-page within a PluginDocument.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::countFindMatches): Added. We don't support find-in-page for NetscapePlugin.
        (WebKit::NetscapePlugin::findString): Added. We don't support find-in-page for NetscapePlugin.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Add countFindMatches and findString.
        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add requisite PDFLayerController interfaces.
        * WebProcess/Plugins/PDF/PDFPlugin.h: Add countFindMatches, findString, and nextMatchForString,
        as well as  storage for the most-recently-searched string.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::writeItemsToPasteboard):
        (WebKit::PDFPlugin::countFindMatches):
        (WebKit::PDFPlugin::nextMatchForString):
        (WebKit::PDFPlugin::findString):
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Add countFindMatches and findString.
        * WebProcess/Plugins/Plugin.h: Add countFindMatches and findString.
        * WebProcess/Plugins/PluginProxy.h: Add countFindMatches and findString, but since PDFPlugin
        is in-process, we don't need to forward these calls to the PluginProcess.
        * WebProcess/Plugins/PluginView.cpp: 
        (WebKit::PluginView::countFindMatches): Forward countFindMatches to the plugin.
        (WebKit::PluginView::findString): Forward findString to the plugin.
        * WebProcess/Plugins/PluginView.h: Add countFindMatches and findString.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::pluginViewForFrame): If the given frame hosts a PluginDocument, grab its PluginView.
        (WebKit::FindController::countStringMatches): Forward countStringMatches to PluginView if necessary.
        (WebKit::FindController::updateFindUIAfterPageScroll): Only use unmarkAllTextMatches if we're using
        ordinary find-in-page and don't have a plugin. If we have a plugin, disable our overlay, as it must
        be handled by the plugin itself, and request the number of matches for the search from the plugin.
        (WebKit::FindController::findString): If necessary, forward findString to the plugin.
        (WebKit::FindController::hideFindUI): Hide the search highlight by searching for an empty string.

2012-12-24  Laszlo Gombos  <l.gombos@samsung.com>

        Remove wtf/Platform.h includes from {c|cpp} files
        https://bugs.webkit.org/show_bug.cgi?id=105678

        Reviewed by Kentaro Hara.

        Remove wtf/Platform.h from the include list as it is already
        included in config.h.

        * Shared/qt/QtNetworkRequestData.cpp:

2012-12-24  Sam Weinig  <sam@webkit.org>

        Assert fix take 2.

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

2012-12-24  Sam Weinig  <sam@webkit.org>

        Fix WebKit2 asserting on launch.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::databaseManager):
        (WebProcess):

2012-12-24  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] Unreviewed Xmas buildfix after r138433.

        * WebProcess/Cookies/WebCookieManager.h:

2012-12-23  Seokju Kwon  <seokju.kwon@gmail.com>

        Fix the incorrect use of preprocessor statement in API header
        https://bugs.webkit.org/show_bug.cgi?id=105675

        Reviewed by Sam Weinig.

        Remove a preprocessor statement in WKBundlePage.h

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetInspector):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:

2012-12-23  Sam Weinig  <sam@webkit.org>

        Switch WebCookieManager and AuthenticationManager to use the ChildProcess rather than holding on to a Connection
        https://bugs.webkit.org/show_bug.cgi?id=105703

        Reviewed by Dan Bernstein.

        Also switches WebCookieManager over to be a MessageReceiver while we are at it.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initialize):
        (WebKit::NetworkProcess::didReceiveMessage):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit):
        (WebKit::WebCookieManager::WebCookieManager):
        (WebKit::WebCookieManager::didReceiveMessage):
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::cookiesDidChange):
        (WebKit::WebCookieManager::dispatchCookiesDidChange):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/WebCookieManager.h:
        (WebKit):
        (WebCookieManager):
        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::setCookiePersistentStorage):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAlwaysAcceptCookies):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initialize):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):
        (WebKit::WebProcess::cookieManager):

2012-12-23  Sam Weinig  <sam@webkit.org>

        Try to fix the Qt build.

        * WebProcess/WebCoreSupport/WebDatabaseManager.h:

2012-12-23  Sam Weinig  <sam@webkit.org>

        Remove more special cased message receiving code from WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=105700

        Reviewed by Dan Bernstein.

        Makes WebApplicationCacheManager, WebResourceCacheManager and WebDatabaseManager
        CoreIPC::MessageReceivers, removes them as special cases in WebProcess.

        * WebProcess/ApplicationCache/WebApplicationCacheManager.cpp:
        (WebKit::WebApplicationCacheManager::WebApplicationCacheManager):
        (WebKit::WebApplicationCacheManager::getApplicationCacheOrigins):
        (WebKit::WebApplicationCacheManager::deleteEntriesForOrigin):
        (WebKit::WebApplicationCacheManager::deleteAllEntries):
        (WebKit::WebApplicationCacheManager::setAppCacheMaximumSize):
        * WebProcess/ApplicationCache/WebApplicationCacheManager.h:
        (WebKit):
        (WebApplicationCacheManager):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::clearAllDatabases):
        (WebKit::InjectedBundle::setDatabaseQuota):
        (WebKit::InjectedBundle::clearApplicationCache):
        (WebKit::InjectedBundle::setAppCacheMaximumSize):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::WebResourceCacheManager):
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        (WebKit::WebResourceCacheManager::clearCacheForAllOrigins):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        (WebKit):
        (WebResourceCacheManager):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit):
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        (WebKit::WebDatabaseManager::dispatchDidModifyOrigin):
        (WebKit::WebDatabaseManager::dispatchDidModifyDatabase):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebKit):
        (WebDatabaseManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):
        (WebKit::WebProcess::applicationCacheManager):
        (WebKit::WebProcess::resourceCacheManager):
        (WebKit::WebProcess::databaseManager):

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

        <rdar://problem/12808377> Network process should respect cookie accept policy
        https://bugs.webkit.org/show_bug.cgi?id=105684

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initialize): Tell cookie manager which connection to
        make calls on. Now that the code can run in either WebProcess or NetworkProcess,
        it cannot use WebProcess singleton.
        (WebKit::NetworkProcess::didReceiveMessage): Dispatch WebCookieManager messages.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initialize): Tell cookie manager which connection to
        make calls on.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge): Changed to use
        WebContext::networkingProcessConnection() instead of deciding upon the connection here.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage): Call m_webContext->dispatchMessage),
        as WebCookieManagerProxy handlers are registered on the context. This may seem wasteful,
        but a lot of registered managers will need the ame handling soon.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::networkingProcessConnection): Added a way to get connection
        to whichever process performs networking.
        (WebKit::WebContext::removeNetworkProcessProxy): Invalidate cookie manager proxy,
        so that expected responses could be cleared.
        (WebKit::WebContext::disconnectProcess): Updated a FIXME.

        * UIProcess/WebContext.h: Deleted deprecatedSharedProcess().
        (WebKit::WebContext::networkingProcessConnection): Added.
        (WebKit::WebContext::sendToNetworkingProcess): Added.
        (WebKit::WebContext::sendToNetworkingProcessRelaunchingIfNecessary): Added.

        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::shouldTerminate): Should not prevent WebProcess
        termination when NetworkProcess is in use.
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies): Removed a useless ASSERT
        that neiter documents expectations nor helps find bugs. Send a message to correct
        process, whether WebProcess or NetworkProcess.
        (WebKit::WebCookieManagerProxy::deleteCookiesForHostname): Ditto.
        (WebKit::WebCookieManagerProxy::deleteAllCookies): Ditto.
        (WebKit::WebCookieManagerProxy::startObservingCookieChanges): Ditto.
        (WebKit::WebCookieManagerProxy::stopObservingCookieChanges): Ditto.
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy): Ditto.
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy): Ditto.

        * WebProcess/Cookies/WebCookieManager.h:
        * WebProcess/Cookies/WebCookieManager.cpp: Made the class usable in either WebProcess
        or NetworkProcess.
        (WebKit::WebCookieManager::setConnection): WebCookieManager now remembers which
        connection to talk back on.
        (WebKit::WebCookieManager::didReceiveMessage): Added an assertion that stored connection
        matches the one being used to reciev messages.
        (WebKit::WebCookieManager::getHostnamesWithCookies): Use the stored connection to
        send a reply.
        (WebKit::WebCookieManager::startObservingCookieChanges): Pass a callback function,
        so that WebCore doesn't have to use a platform strategy.
        (WebKit::WebCookieManager::cookiesDidChange): The new callback.
        (WebKit::WebCookieManager::dispatchCookiesDidChange): Use the stored connection.
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy): Use the stored connection.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Removed notifyCookiesChanged() which is no longer part of CookiesStrategy.

2012-12-22  Sam Weinig  <sam@webkit.org>

        Make CustomProtocolManager a MessageReceiver to remove more special casing
        https://bugs.webkit.org/show_bug.cgi?id=105682

        Reviewed by Dan Bernstein.

        To avoid storing a Connection in CustomProtocolManager, which is not a great idea without
        it being the Connection::Client and therefore getting death notifications, I also made
        ChildProcess a MessageSender so that extensions to it, like CustomProtocolManager, can
        easily send messages to the parent process.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        Initialize the shared CustomProtocolManager, which will add it to the MessageReceiverMap in 
        the ChildProcess.

        (WebKit::NetworkProcess::didReceiveMessage):
        Remove the special case for CustomProtocolManager.

        (WebKit::NetworkProcess::initializeNetworkProcess):
        Call connectionEstablished on the CustomProtocolManager to make it start working as a NSURLProtocol handler.

        * NetworkProcess/NetworkProcess.h:
        Add overrides necessary for MessageSender.

        * PluginProcess/PluginProcess.h:
        Ditto.

        * Shared/ChildProcess.h:
        (ChildProcess):
        Make ChildProcess a MessageSender.

        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (CustomProtocolManager):
        (WebKit::CustomProtocolManager::childProcess):
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (-[WKCustomProtocol startLoading]):
        (-[WKCustomProtocol stopLoading]):
        (WebKit::CustomProtocolManager::CustomProtocolManager):
        (WebKit::CustomProtocolManager::initialize):
        (WebKit::CustomProtocolManager::connectionEstablished):
        Make CustomProtocolManager a MessageReceiver and split initialization and the time when it can 
        start acting as protocol handler as these happen at different times now. It also now stores a
        ChildProcess rather than a Connection.

        * SharedWorkerProcess/SharedWorkerProcess.h:
        Add overrides necessary for MessageSender.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        Initialize the shared CustomProtocolManager, which will add it to the MessageReceiverMap in 
        the ChildProcess.

        (WebKit::WebProcess::didReceiveMessage):
        Remove the special case for CustomProtocolManager.

        (WebKit::WebProcess::initializeCustomProtocolManager):
        Call connectionEstablished on the CustomProtocolManager to make it start working as a NSURLProtocol handler.

        * WebProcess/WebProcess.h:
        Add overrides necessary for MessageSender.

2012-12-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove plugin process configuration option
        https://bugs.webkit.org/show_bug.cgi?id=105564

        Reviewed by Carlos Garcia Campos.

        Remove the --enable-plugin-process configuration option, opting instead to
        always build the plugin process when building WebKit2. It isn't very interesting
        for downstream to enable or disable the plugin process. It should always be
        enabled for WebKit2 and it's better for us not to have to keep a disabled plugin
        process building. Additionally, the in-process plugin isn't functional, since
        plugins depend on GTK+ 2 and WebKit2 depends on GTK+ 3.

        * GNUmakefile.am: Remove the option.
        * GNUmakefile.list.am: Remote the option.

2012-12-22  Sam Weinig  <sam@webkit.org>

        Give the ChildProcess a MessageReceiverMap
        https://bugs.webkit.org/show_bug.cgi?id=105681

        Reviewed by Dan Bernstein.

        Moving the MessageReceiverMap to the ChildProcess will help shared code
        between the WebProcess and NetworkProcess.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        Pass 'this' instead of the MessageReceiverMap, now that ChildProcess
        can be used to access the MessageReceiverMap.

        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        Remove the now extraneous MessageReceiverMap.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess):
        (WebKit):
        (WebKit::ChildProcess::~ChildProcess):
        (WebKit::ChildProcess::addMessageReceiver):
        (WebKit::ChildProcess::removeMessageReceiver):
        * Shared/ChildProcess.h:
        (ChildProcess):
        Add a MessageReceiverMap and helper functions from WebProcess.

        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        Fix the FIXME, passing the ChildProcess rather than the MessageReceiverMap.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        * WebProcess/WebProcess.h:
        (WebProcess):
        Remove the MessageReceiverMap and helper functions.

2012-12-22  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:

2012-12-22  Alexey Proskuryakov  <ap@apple.com>

        Add a separate class for networking related storage
        https://bugs.webkit.org/show_bug.cgi?id=105676

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp: We no longer need to create
        fake RemoteNetworkingContexts here! Use an actual default or private storage session.

        * NetworkProcess/mac/NetworkProcessMainMac.mm: Updated form of WebSystemInterface.h include,
        it's not a system one.

        * NetworkProcess/mac/RemoteNetworkingContext.h: Expose privateBrowsingSession(),
        so that NetworkConnectionToWebProcess could use it. We can generalize the interface
        one we support more sessions.

        * NetworkProcess/mac/RemoteNetworkingContext.mm: This class now only tracks private
        browsing session, with most other code being in NetworkStorageSession.

        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        * WebProcess/WebProcess.cpp:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        * WebProcess/Downloads/efl/DownloadSoupErrorsEfl.cpp:
        * WebProcess/Downloads/gtk/DownloadSoupErrorsGtk.cpp:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/Network/WebResourceLoader.cpp:
        Updated includes for ResourceHandle change. For some ports, the includes could be
        made more tight, but I have no practical way to do that.

        * WebKit2.xcodeproj/project.pbxproj: Removed WebPlatformStrategiesMac.mm.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        Pass a proper session instead of relying on a strategy to call back to WebKit
        for default cookie storage (we don't even have strategies initialized in NetworkProcess).

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession): Initialize WCSI
        before calling a function that now uses in in WebCore.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: We no longer need a strategy
        for default cookie storage! Updated other functions to use sessions.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebCoreSupport/mac/WebPlatformStrategiesMac.mm: Removed.
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h:
        WebFrameNetworkingContext is now simpler, with more tracking being donre through WebCore.

2012-12-21  Elliott Sprehn  <esprehn@chromium.org>

        Replace documentFragmentIsShadowRoot with isTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=105345

        Reviewed by Dimitri Glazkov.

        Expose isTreeScope symbol.

        * win/WebKit2.def.in:

2012-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138331.
        http://trac.webkit.org/changeset/138331
        https://bugs.webkit.org/show_bug.cgi?id=105668

        Broke Windows clean builds; can't figure out how to fix it
        (Requested by rniwa on #webkit).

        * win/WebKit2.def.in:

2012-12-21  Brady Eidson  <beidson@apple.com>

        ASSERT in WebResourceLoadScheduler::scheduleLoad with a crashed NetworkProcess.
        <rdar://problem/12924845> and https://bugs.webkit.org/show_bug.cgi?id=105646

        Reviewed by Alexey Proskuryakov.

        If we fail to schedule a loader with the NetworkProcess it is probably because the NetworkProcess crashed.

        Since these loaders will never succeed in loading we should schedule them to fail on a timer.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        (WebKit::WebResourceLoadScheduler::addUnschedulableLoad):
        (WebKit::WebResourceLoadScheduler::unscheduledLoadTimerFired):
        (WebKit::WebResourceLoadScheduler::remove):
        * WebProcess/Network/WebResourceLoadScheduler.h:

2012-12-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed potential fix EFL/Qt test breakage on WK2

        Only disable scrollbars when in fixed layout mode.

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

2012-12-21  Brady Eidson  <beidson@apple.com>

        Remove ResourceLoadScheduler::addMainResourceLoad and all related code
        <rdar://problem/12925275> and https://bugs.webkit.org/show_bug.cgi?id=105644

        Reviewed by Alexey Proskuryakov.

        Now that main resources loads are scheduled (bug 49246) we don't need this stuff anymore.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::remove):
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
        * WebProcess/Network/WebResourceLoadScheduler.h:

2012-12-20  Sam Weinig  <sam@webkit.org>

        Add WebKit2 SPI to get the current selection as a WebArchive
        https://bugs.webkit.org/show_bug.cgi?id=105613

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSelectionAsWebArchiveData):
        * UIProcess/API/C/WKPage.h:
        Add SPI.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::frameWithSelection):
        (WebKit::WebPage::getSelectionAsWebArchiveData):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe getter to the WebProcess and back.

2012-12-21  Brady Eidson  <beidson@apple.com>

        Perform cleanup in WebProcess if the NetworkProcess crashes.
        <rdar://problem/12903117> and https://bugs.webkit.org/show_bug.cgi?id=105592

        Reviewed by Alexey Proskuryakov.

        If the NetworkProcess crashes, a whole bunch of WebResourceLoaders (and WebCore::ResourceLoaders)
        might be orphaned in the WebProcess.

        These loaders need to fail once it is apparent they will never finish loading.

        * Shared/API/c/WKError.h: Add a new error representing an "WebKit Internal Error."

        * WebProcess/WebCoreSupport/WebErrors.h:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:
        (WebKit::internalError):

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::networkProcessCrashed): Call didFail all outstanding ResourceLoaders
          and tell all WebResourceLoaders the NetworkProcess crashed.
        * WebProcess/Network/WebResourceLoadScheduler.h:

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::networkProcessCrashed): Call didFail with the new InternalError
        * WebProcess/Network/WebResourceLoader.h:

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::networkProcessConnectionClosed): Tell the scheduled the NetworkProcess crashed.

2012-12-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Never create WebCore scrollbars for EFL/WK2
        https://bugs.webkit.org/show_bug.cgi?id=105632

        Reviewed by Antonio Gomes.

        Then creating the frame ask to not create scrollbars and
        lock it so they won't be created at any later time.

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

2012-12-21  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Add guard around ContextMenuItemTagInspectElement
        https://bugs.webkit.org/show_bug.cgi?id=105267

        Reviewed by Ryosuke Niwa.

        Need INSPECTOR guard for using ContextMenuItemTagInspectElement.

        * UIProcess/API/efl/ewk_context_menu_item.cpp:

2012-12-21  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: Scroll position is not reset when new page is loaded
        https://bugs.webkit.org/show_bug.cgi?id=105627

        Reviewed by Kenneth Rohde Christiansen.

        Reset scroll position to (0,0) when new page is loaded.

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

2012-12-21  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Cannot drop files/URLs on PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=105516
        <rdar://problem/12729443>

        Reviewed by Alexey Proskuryakov.

        Add shouldAllowNavigationFromDrags to Plugin/PluginView/etc., which WebCore will
        consult when dragging over a PluginDocument to decide whether or not a drag may result in navigation.

        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::shouldAllowNavigationFromDrags): Added, always returning false to keep existing behavior.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        (NetscapePlugin): Added.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        (WebKit::SimplePDFPlugin::shouldAllowNavigationFromDrags): Added, always returning true. (Simple)PDFPlugin should
        navigate when dropped onto, just like an image or HTML document would.
        * WebProcess/Plugins/Plugin.h:
        (Plugin): Add shouldAllowNavigationFromDrags.
        * WebProcess/Plugins/PluginProxy.h: Add shouldAllowNavigationFromDrags.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldAllowNavigationFromDrags): Forward shouldAllowNavigationFromDrags to the plugin.
        * WebProcess/Plugins/PluginView.h: Add shouldAllowNavigationFromDrags.

2012-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138357.
        http://trac.webkit.org/changeset/138357
        https://bugs.webkit.org/show_bug.cgi?id=105622

        wrong fix for the problem (the original author actually
        already did this, and it's not helping) (Requested by thorton
        on #webkit).

        * win/WebKit2.def.in:

2012-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138338.
        http://trac.webkit.org/changeset/138338
        https://bugs.webkit.org/show_bug.cgi?id=105621

        speculative rollout because fast/dom/shadow/content-element-
        distributed-nodes.html is crashing on linux debug. (Requested
        by loislo on #webkit).

        * win/WebKit2.def.in:

2012-12-21  Tim Horton  <timothy_horton@apple.com>

        Unreviewed Windows build fix after http://trac.webkit.org/changeset/138338

        * win/WebKit2.def.in:

2012-12-21  Tim Horton  <timothy_horton@apple.com>

        Reducing print preview scale significantly causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=105519
        <rdar://problem/12807090>

        Reviewed by Alexey Proskuryakov.

        The bitmap image used for print previews was being created respecting the print preview scale.
        This doesn't make any sense, as the scale does not affect the size of the image required to
        represent the previewed page. Instead, we should not scale the size, creating the buffer at a
        size that is constant regardless of scale, and do the scaling when drawing *into* the buffer instead.

        In some cases, this could cause an out-of-memory crash.

        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _drawPreview:]): Rename rect to scaledPrintingRect for clarity. Compute print
        preview bitmap image size from the original non-scaled drawing size and the device scale factor.
        Hand the image size to drawRectToImage. Draw the image without scaling, as it's always created
        at the correct size. Don't compute the scale factor from the size of the image, we can know it from WebPageProxy.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::drawRectToImage): Add a parameter to drawRectForImage, imageSize.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add a parameter to drawRectForImage, imageSize.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRectToImage): Use imageSize to size our buffer, and scale up to make the printing rect
        fit in the bitmap's bounds.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add a parameter to drawRectForImage, imageSize.
        * WebProcess/WebPage/WebPage.messages.in: Add a parameter to drawRectForImage, imageSize.

2012-12-20  Helder Correia  <helder.correia@nokia.com>

        [CoordGfx] Make single-argument AreaAllocator constructors explicit
        https://bugs.webkit.org/show_bug.cgi?id=105598

        Reviewed by Noam Rosenthal.

        Follow the coding style for AreaAllocator and GeneralAreaAllocator.

        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h:
        (AreaAllocator):
        (GeneralAreaAllocator):

2012-12-20  Elliott Sprehn  <esprehn@chromium.org>

        Replace documentFragmentIsShadowRoot with isTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=105345

        Reviewed by Dimitri Glazkov.

        Expose isTreeScope symbol.

        * win/WebKit2.def.in:

2012-12-20  Kiran Muppala  <cmuppala@apple.com>

        Set timer coalescing policy for WebKit2 processes on Mac until process visible assertion handles it automatically
        https://bugs.webkit.org/show_bug.cgi?id=105594

        Reviewed by Mark Rowe.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::initializeTimerCoalescingPolicy): Set task_latency and task_throughput QOS tiers as appropriate
        for visible applications.
        (WebKit::ChildProcess::platformInitialize): Add call to initializeTimerCoalescingPolicy.

2012-12-20  Anders Carlsson  <andersca@apple.com>

        Stop building WebKit2 for Windows
        https://bugs.webkit.org/show_bug.cgi?id=105585

        Reviewed by Brian Weinstein.

        Remove an unneeded export.

        * win/WebKit2.def.in:

2012-12-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=104827

        Reviewed by Laszlo Gombos.

        The eo EFL package is introduced and evas and ecore use it since 1.8.
        While introducing Eo, EFL changed several structures of Evas and Ecore
        from own specific class to Eo.

        So, this patch adds FindEo and changes declaration of Evas, Evas_Object,
        Ecore_Timer to build with latest EFL libraries.

        * PlatformEfl.cmake: Includes eo EFL library.
        * UIProcess/API/C/efl/WKAPICastEfl.h: Modified declaration of Evas_Object.
        * UIProcess/API/C/efl/WKView.h: Modified declaration of Evas.
        * UIProcess/efl/WebPopupMenuProxyEfl.h: Removed unnecessary declaration.

2012-12-20  Helder Correia  <helder.correia@nokia.com>

        [CoordGfx] Remove CoordinatedLayerUpdateInfo class forwarding
        https://bugs.webkit.org/show_bug.cgi?id=105588

        Reviewed by Noam Rosenthal.

        There is no such class.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (WebKit):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit):

2012-12-20  Pratik Solanki  <psolanki@apple.com>

        Rename HAVE(NETWORK_CFDATA_ARRAY_CALLBACK) to USE(NETWORK_CFDATA_ARRAY_CALLBACK)
        https://bugs.webkit.org/show_bug.cgi?id=105578

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:

2012-12-20  Alexey Proskuryakov  <ap@apple.com>

        LocalTerminationDisabler is not needed in WebCookieManager.cpp
        https://bugs.webkit.org/show_bug.cgi?id=105581

        Reviewed by Anders Carlsson.

        All WebCookieManager functions are synchronous, and all LocalTerminationDisabler does
        is enable/disable a timer that cannot fire inside the function anyway.

        * WebProcess/Cookies/WebCookieManager.cpp:
        (WebKit::WebCookieManager::getHostnamesWithCookies):
        (WebKit::WebCookieManager::deleteCookiesForHostname):
        (WebKit::WebCookieManager::deleteAllCookies):
        (WebKit::WebCookieManager::startObservingCookieChanges):
        (WebKit::WebCookieManager::setHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::getHTTPCookieAcceptPolicy):

2012-12-20  Brady Eidson  <beidson@apple.com>

        NetworkProcess has no need for suspend/resumePendingRequests.
        <rdar://problem/12866005> and https://bugs.webkit.org/show_bug.cgi?id=105550

        Reviewed by Alexey Proskuryakov.

        suspend/resumePendingRequests were important in a single-process, WebKit1 API world to help prevent
        client callbacks from occurring during layout/painting.

        In a WebKit2 + NetworkProcess world, they aren't important.

        Remove the Web->Network process messages:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        For now, still keep the per-WebProcess count to help keep servePendingRequest working as WebCore intends:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::servePendingRequests):
        (WebKit::WebResourceLoadScheduler::suspendPendingRequests):
        (WebKit::WebResourceLoadScheduler::resumePendingRequests):

2012-12-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to set a TLS errors policy to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=104482

        Reviewed by Martin Robinson.

        Add an emum for TLS errors policy with values IGNORE and FAIL and
        API to WebKitWebContext to set/get the policy.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode ignoreTLSErrors.
        (WebKit::WebProcessCreationParameters::decode): Decode ignoreTLSErrors.
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters): Add ignoreTLSErrors when building
        with soup network backend.
        * Shared/soup/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo): Add a
        constructor that receives a ResourceError.
        * Shared/soup/PlatformCertificateInfo.h:
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData): Encode the
        PlatformCertificateInfo as part for the ResourceError.
        (CoreIPC::::decodePlatformData): Decode the
        PlatformCertificateInfo and set certificate and TLS errors in the
        ResourceError.
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didFailProvisionalLoadWithErrorForFrame): Call
        webkitWebViewLoadFailedWithTLSErrors() if the load failed due to
        TLS errors.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate): Add tlsErrorsPolicy member.
        (createDefaultWebContext): Initiales tlsErrorsPolicy.
        (webkit_web_context_set_tls_errors_policy): Set the TLS errors
        policy notify WebContext to ignore TLS errors or not.
        (webkit_web_context_get_tls_errors_policy): Return the current TLS
        errors policy.
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewLoadFailedWithTLSErrors): Finish the load with an
        error if the TLS errors policy is FAIL.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestSSL.cpp:
        (testTLSErrorsPolicy):
        (beforeAll):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize m_ignoreTLSErrors.
        * UIProcess/WebContext.h:
        (WebContext): Add m_ignoreTLSErrors member.
        (WebKit::WebContext::ignoreTLSErrors): Return m_ignoreTLSErrors.
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): Set
        ignoreTLSErrors parameter.
        (WebKit::WebContext::setIgnoreTLSErrors): Send SetIgnoreTLSErrors
        message to the web process.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): Set
        ignoreTLSErrors parameter.
        (WebKit::WebContext::setIgnoreTLSErrors): Send SetIgnoreTLSErrors
        message to the web process.
        (WebKit):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl): Remove the call to
        ResourceHandle::setIgnoreSSLErrors().
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): Remove the call to
        ResourceHandle::setIgnoreSSLErrors().
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        (WebKit::WebProcess::setIgnoreTLSErrors): Call
        ResourceHandle::setIgnoreSSLErrors().
        (WebKit):

2012-12-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        [EFL] MiniBrowser does not play Infinite Gangnam Style
        https://bugs.webkit.org/show_bug.cgi?id=103531

        Reviewed by Kenneth Rohde Christiansen.

        WebAudio preference now defaults to switched on.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):

2012-12-20  Huang Dongsung  <luxtella@company100.net>

        Remove GraphicsLayer::setGraphicsLayerFactory().
        https://bugs.webkit.org/show_bug.cgi?id=105503

        Reviewed by Kenneth Rohde Christiansen.

        We don't need GraphicsLayer::setGraphicsLayerFactory() anymore. After r130302,
        we have used a graphics layer factory explicitly.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

2012-12-20  Dominik Röttsches  <dominik.rottsches@intel.com>

        [WK2] WebAudio WKTR support
        https://bugs.webkit.org/show_bug.cgi?id=95084

        Reviewed by Kenneth Rohde Christiansen.

        Implementing audio data dump support for WebKitTestRunner,
        by adding the API to the IDL, enabling IPC for transferring
        the audio data as bytebuffer and dumping it according
        to run-webkit-tests script's expectations.

        I am adding a testrunner specific bundle method to extract data
        from a Uint8Array into a bytebuffer. This API is used by
        WebKitTestRunner's TestRunner to extract the data into a local
        variable, then sending it over IPC.

        * DerivedSources.pri: Fixing Qt build by adding JSUint8Array.h header to list of forwarding headers.
        * Target.pri: Adding missing WKData.* files. Qt build fix.
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleCreateWKDataFromUint8Array): Added.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Adding WKBundleCreateWKDataFromUint8Array.
        * WebProcess/InjectedBundle/InjectedBundle.cpp: Convert Uint8Array to WebData.
        (WebKit::InjectedBundle::createWebDataFromUint8Array):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit):
        (InjectedBundle):

2012-12-19  Kiran Muppala  <cmuppala@apple.com>

        Adopt new assertion SPI for process suppression on Mac
        https://bugs.webkit.org/show_bug.cgi?id=105378

        Reviewed by Mark Rowe.

        Process suppression for WebKit2 child processes is currently enabled or disabled using AutomaticTermination.
        This should be replaced with a new assertion SPI specific to process suppression.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess): Remove unused member variable m_applicationIsOccluded.
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::applicationIsOccluded): Infer occlusion state from m_processVisibleAssertion.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setApplicationIsOccluded): Use applicationIsOccluded() accessor to check if the
        occlusion state has changed and take or release a process visible assertion accordingly.
        (WebKit::ChildProcess::platformInitialize): Remove call to initializeTimerCoalescingPolicy(), since taking
        a process visible assertion also sets the timer coalescing policy appropriately.  Set the occlusion
        state to false on initialization.

2012-12-19  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12890242> [WK2 NetworkProcess] Client doesn't receive SSL certificates
        https://bugs.webkit.org/show_bug.cgi?id=105467

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::PlatformCertificateInfo):
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        Pass certificate chain over IPC, so that we could ultimately send it to client
        via WebPageProxy::DidCommitLoadForFrame message.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        Initialize a WKSI function we've been missing.

2012-12-19  Jon Lee  <jonlee@apple.com>

        Add a function to set the origin hash table
        https://bugs.webkit.org/show_bug.cgi?id=105447
        <rdar://problem/12910985>

        Reviewed by Brian Weinstein.

        Add a new API called WKContextSetPlugInAutoStartOriginHashes. It assigns the table of hashes,
        keyed by main frame origin, to the WebContext. That, in turn, notifies all existing web
        processes, so that each web process can update its copy of the auto-start hashes.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetPlugInAutoStartOriginHashes): To clear the table, an empty dictionary must be
        provided.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setPlugInAutoStartOriginHashes): Forward to PlugInAutoStartProvider.
        * UIProcess/WebContext.h:

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTable): Clear the map and set of hashes,
        and convert the data from the provided dictionary. Also add it to a temporary vector, which will
        be used to pass along to all of the active web processes.
        * UIProcess/Plugins/PlugInAutoStartProvider.h:

        * WebProcess/WebProcess.messages.in: Add plugInAutoStartOriginsChanged. Takes in a vector of
        the new set of hashes.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::plugInAutoStartOriginsChanged): Clear the existing set, and copy the new
        hashes.
        * WebProcess/WebProcess.h:

2012-12-18  Jon Lee  <jonlee@apple.com>

        Notify context client of change to table, and allow client to get a copy of it
        https://bugs.webkit.org/show_bug.cgi?id=105364
        <rdar://problem/12906267>

        Reviewed by Brady Eidson.

        Add a callback to notify the context client that the origin hashes have changed.
        The client may choose to get a copy of that table and save it to disk.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextCopyPlugInAutoStartOriginHashes): Added to the context client.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::plugInAutoStartOriginHashes): Return a copy of the origin hash
        table.
        * UIProcess/WebContext.h:

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::addAutoStartOrigin): When the origin is added to
        the table, notify the context client.
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy): Create a copy of the
        table.
        * UIProcess/Plugins/PlugInAutoStartProvider.h:

        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::plugInAutoStartOriginHashesChanged): Call the client.
        * UIProcess/WebContextClient.h:

2012-12-19  Alexis Menard  <alexis@webkit.org>

        Implement CSS parsing for CSS transitions unprefixed.
        https://bugs.webkit.org/show_bug.cgi?id=104804

        Reviewed by Dean Jackson.

        Add a new flag ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to cover the work of unprefixing Transforms, Animations and 
        Transitions. It will let the possibility of each ports to turn it off 
        in their release branches until we're confident that these CSS 
        properties are ready to be unprefixed.

        * Configurations/FeatureDefines.xcconfig:

2012-12-19  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL][WK2][AC] Avoid creating an empty surface.
        https://bugs.webkit.org/show_bug.cgi?id=105410

        Reviewed by Kenneth Rohde Christiansen.

        Ensure that the view has valid size before creating the surface.

        * UIProcess/API/efl/EvasGLSurface.h:
        (WebKit::EvasGLSurface::create):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):

2012-12-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][Qt][WK2] Going back to 47-amazing-css3-animation-demos shows nothing or wrong position
        https://bugs.webkit.org/show_bug.cgi?id=104414

        Reviewed by Simon Hausmann.

        When contents size changes, make sure to apply any pending position
        change if possible.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeContentsSize):

2012-12-19  Alberto Garcia  <agarcia@igalia.com>

        [GTK] [WK2] Trailing semicolon in an #include line
        https://bugs.webkit.org/show_bug.cgi?id=105418

        Reviewed by Xan Lopez.

        * UIProcess/gtk/WebContextGtk.cpp:
        Remove trailing semicolon in #include line.

2012-12-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Move deviceScaleFactor to our view as it's view related
        https://bugs.webkit.org/show_bug.cgi?id=105412

        Reviewed by Laszlo Gombos.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::setDeviceScaleFactor):
        (EwkViewImpl::transformFromScene):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_device_pixel_ratio_set):

2012-12-19  Zeno Albisser  <zeno@webkit.org>

        [Qt] Missing vtable for LoadStartedCatcher.
        https://bugs.webkit.org/show_bug.cgi?id=105313

        Properly splitting class declarations and function
        definitions into headers/cpp-files.
        This makes including util.moc redundant
        and avoids the well known vtable issues with QObject classes.

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/tests/util.cpp:
        (LoadSpy::LoadSpy):
        (LoadSpy::onLoadingChanged):
        * UIProcess/API/qt/tests/util.h:
        (LoadSpy):

2012-12-19  KyungTae Kim  <ktf.kim@samsung.com>

        Unused parameters on WebContext.cpp
        https://bugs.webkit.org/show_bug.cgi?id=105395

        Reviewed by Kentaro Hara.

        Because the parameters 'certficate', 'host' are not used if !ENABLE(NETWORK_PROCESS), 
        use UNUSED_PARAM macro to fix build warning -Wunused-parameter.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::allowSpecificHTTPSCertificateForHost):

2012-12-18  Alexey Proskuryakov  <ap@apple.com>

        Remove unnecessary functions from CookiesStrategy
        https://bugs.webkit.org/show_bug.cgi?id=105369

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

        * WebProcess/Cookies/WebCookieManager.cpp: Call PlatformCookieJar directly.
        Cookie messages to NetworkProcess should not be sent through WebProcess. In a future
        patch, I'll make WebCookieManagerProxy message NetworkProcess instead.

2012-12-18  Jon Lee  <jonlee@apple.com>

        [WK2] Create a context client
        https://bugs.webkit.org/show_bug.cgi?id=105316
        <rdar://problem/12901762>

        Reviewed by Brady Eidson.

        Web contexts already have clients related to downloads or history.
        Miscellaneous callbacks can be grouped into a generic client for the
        web context.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetClient): Set the client for the context.
        * UIProcess/API/C/WKContext.h: Define a new, empty WKContextClient.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::initializeClient):
        * UIProcess/WebContext.h: Add a variable for the new client. Move the
        download client so that all the clients are grouped together.
        (WebKit::WebContext::client): Returns the context client.
        * UIProcess/WebContextClient.cpp: Added. Currently empty, but will be
        filled out in a pending patch.
        * UIProcess/WebContextClient.h: Added.

        Add WebContextClient.{h,cpp}.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-12-18  Ivan Krstić  <ike@apple.com>

        <rdar://problem/12720539> per-pid private temporary directories for sandboxed webkit2 plugins

        Reviewed by Sam Weinig, Alexey Proskuryakov, Anders Carlsson.

        Previously we assigned each PluginProcess a private temporary and
        cache directory based on the bundle name of the plugin that was
        running. This sometimes led to overly-long pathnames (sockets on OS X
        can only be 103 characters long), and didn't provide isolation between
        multiple running instances of the same plugin on behalf of different
        processes. We now assign each PluginProcess its own private
        temporary and cache directory regardless of which plugin it's running,
        and make an attempt to clean these up when the process terminates.

        We also pass the temporary directory into the sandbox
        profile as a parameter, in case the plugin profile needs to apply
        additional rules beyond the default read/write policy.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        (enterSandbox):

2012-12-18  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=102579
        [mac] Enable scaled cursors

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2012-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Add Build Phase to Check Headers for Inappropriate Macros (Platform.h macros)
        https://bugs.webkit.org/show_bug.cgi?id=104279

        Reviewed by David Kilzer.

        Add a build phase to check the public WebKit2 headers for
        inappropriate macros. Also set the executable as an input
        path on the other check-* build phases.

        * WebKit2.xcodeproj/project.pbxproj:

2012-12-18  Jer Noble  <jer.noble@apple.com>

        REGRESSION: Using the Exit Full Screen button in the menu bar to exit HTML5 / media full screen breaks Safari windows
        https://bugs.webkit.org/show_bug.cgi?id=104610

        Reviewed by Anders Carlsson.

        When a user clicks on the menu-bar exit fullscreen button, that skips notifying the document that 
        the window is exiting fullscreen and tearing down the placeholder. Manually call that part of the code
        when we detect that it has been skipped.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]):

2012-12-18  Brady Eidson  <beidson@apple.com>

        WebProcesses often crash if they access the network after a NetworkProcess crash.
        <rdar://problem/12865789> and https://bugs.webkit.org/show_bug.cgi?id=105338

        Reviewed by Alexey Proskuryakov.

        After a NetworkProcess crash we should try to re-establish a connection to a new NetworkProcess
        when it is needed.

        If that attempt fails, then the WebProcess should "cleanly" crash.

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

2012-12-17  Sam Weinig  <sam@webkit.org>

        Try to fix the Mac build.

        * NetworkProcess/mac/NetworkProcessMac.mm:

2012-12-17  Halton Huo  <halton.huo@intel.com>

        [EFL] Add ecore_imf_evas to FindEcore.cmake
        https://bugs.webkit.org/show_bug.cgi?id=105159

        Reviewed by Laszlo Gombos.

        * PlatformEfl.cmake: Add ECORE_IMF_EVAS_LIBRARIES to WebProcess_LIBRARIES

2012-12-17  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor TiledBackingStore code in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=103959

        Reviewed by Kenneth Rohde Christiansen.

        Currently, CoordinatedGraphicsLayer has complex code related to TiledBackingStore.
        It has two problem.
        1. CoordinatedGraphicsLayer hacks TiledBackingStore to prevent
        TiledBackingStore from asynchronously sending UpdateTile message to UI
        Process.
        2. CreateTile and RemoveTile message can be sent to UI Process at any time.

        This patch makes CoordinatedGraphicsLayer use TiledBackingStore more explicitly.
        It means only during flushing layer states, CoordinatedGraphicsLayer
        calls methods of TiledBackingStore, which indirectly call createTile(),
        updateTile() and removeTile().

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::CoordinatedGraphicsLayer::setContentsScale):
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreHasPendingTileCreation):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::setNeedsVisibleRectAdjustment):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::notifyFlushRequired):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2012-12-17  Brady Eidson  <beidson@apple.com>

        Can't visit sites with untrusted certs with the NetworkProcess.
        <rdar://problem/12885641> and https://bugs.webkit.org/show_bug.cgi?id=105235

        Reviewed by Sam Weinig.

        For Mac the missing functionality is being able to tell the network layer in the
        NetworkProcess to temporarily accept a certificate chain for the given host.

        This patch adds some SPI supporting the way this works on Mac.

        Add a message and Mac implementation for "allowSpecificHTTPSCertificateForHost":
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::allowSpecificHTTPSCertificateForHost):

        Add SPI for the embedding app"
        * UIProcess/API/C/WKContext.cpp:
        (WKContextAllowSpecificHTTPSCertificateForHost):
        * UIProcess/API/C/WKContextPrivate.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::allowSpecificHTTPSCertificateForHost):
        * UIProcess/WebContext.h:

2012-12-17  Huang Dongsung  <luxtella@company100.net>

        [CoordinatedGraphics] Assertion hit in WebKit::LayerTreeRenderer::setLayerState()
        https://bugs.webkit.org/show_bug.cgi?id=104518

        Reviewed by Noam Rosenthal.

        CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly() must perform
        only during flushing pending layer changes in CoordinatedLayerTreeHost.
        RenderLayerCompositor can call GraphicsLayer::flushCompositingState() regardless
        of CoordinatedLayerTreeHost and it breaks our assumption. It means that
        CoordinatedGraphicsLayer can send messages although m_waitingForUIProcess in
        CoordinatedLayerTreeHost is true.

        Assertion hits because of the same reason. If RenderLayerCompositor calls
        flushCompositingState() before the first CoordinatedLayerTreeHost::flushPendingLayerChanges(),
        SetCompositingLayerState message can be prior to SetRootCompositingLayer message.

        We fix this by ensuring that we perform the layer flush only in the code
        path originating from CoordinatedLayerTreeHost.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

2012-12-17  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12895354> NetworkProcess should not exit after downloading
        https://bugs.webkit.org/show_bug.cgi?id=105209

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::shouldTerminate): This process should never voluntarily
        terminate, because it keeps session auth and cookies.

2012-12-17  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Unit tests process hanging on WK2 Release bots
        https://bugs.webkit.org/show_bug.cgi?id=105021

        Reviewed by Kenneth Rohde Christiansen.

        Follow-up of r137605, which made it more difficult to reproduce
        the race condition but doesn't entirely solve the problem. Now
        we are handling only points in the middle of the fork()/exec().

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

2012-12-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] window_create doesn't receive the url
        https://bugs.webkit.org/show_bug.cgi?id=105184

        Reviewed by Alexis Menard.

        Pass the url to the window_create method.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createNewPage):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_window_features.cpp:
        (createDefaultWindow):
        (createWindow):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::createNewPage):

2012-12-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: css3/device-adapt/viewport-width-not-affecting-next-page.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=105131

        Reviewed by Kenneth Rohde Christiansen.

        The problem was lead by truncation of the scaled result for 'contentFixedSize'.
        Fixed now with using FloatSize::scale() instead of IntSize::scale().

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

2012-12-17  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] remove some unnecessary CONFIG additions

        Reviewed by Simon Hausmann.

        qt is already added by spec_pre.prf, warn_on and depend_includepath by
        default_pre.prf.

        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:

2012-12-17  Oswald Buddenhagen  <oswald.buddenhagen@digia.com>

        [Qt] rely on automatic output directory setup

        Reviewed by Simon Hausmann.

        Now being a proper qt module (by virtue of having load(qt_build_config)
        in .qmake.conf), webkit gets the path setup goodies for free.

        This also fixes Makefile.api.Debug/Release trying to generate qrc_WebKit.cpp
        at the same time, instead of the debug and release version ending up in different
        directories as they should.

        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:

2012-12-17  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Unit tests process hanging on WK2 Release bots
        https://bugs.webkit.org/show_bug.cgi?id=105021

        Reviewed by Kenneth Rohde Christiansen.

        Do not allocate memory in the middle of a fork()/exec().
        EFL uses global FastMalloc new operator and when we fork(), the
        process is in a very delicate state. We were being lucky most of the
        time, but sometimes FastMalloc enters in a busy wait and hangs
        because it's data structures cannot be trusted after the fork().

        This explains why sometimes we see UIProcess hanging on the bots:
        they are in fact UIProcess trying to exec() into a WebProcess but
        hanged just after the fork(). CMake test runner kills the original
        UIProcess due to timeout and the buggy one stays forever.

        * PlatformEfl.cmake:
        Set the timeout back to the original value.

        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        I'm keeping the original behavior, including the call to
        system() when wrapping the WebProcess on Debug mode. This
        should be changed to exec() in another patch.

2012-12-17  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the Qt Windows build after r137803
        https://bugs.webkit.org/show_bug.cgi?id=105152

        Reviewed by Kentaro Hara.

        * Shared/CacheModel.h:

2012-12-16  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: The "Open in Preview" HUD button should work
        https://bugs.webkit.org/show_bug.cgi?id=102448
        <rdar://problem/12695729>

        Reviewed by Alexey Proskuryakov.

        Implement the "Open in Preview" button for PDFPlugin, by moving the implementation from PDFViewController
        onto WebPageProxyMac, and reusing it in PDFViewController and PDFPlugin.

        * UIProcess/API/mac/PDFViewController.h:
        (PDFViewController): Remove unnecessary members in favor of a UUID that identifies our PDF on disk.
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewController::openPDFInFinder): Move PDFViewController's implementation of openPDFInFinder
        and related functions to WebPageProxyMac. This will allow it to be shared with PDFPlugin.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add savePDFToFileInTemporaryFolderAndOpenWithNativeApplication,
        savePDFToFileInTemporaryFolderAndOpenWithNativeApplicationRaw, and openPDFFromTemporaryFolderWithNativeApplication.
        Add m_temporaryPDFFiles, which is used to keep track of the filenames of PDFs that we've saved to disk.
        * UIProcess/WebPageProxy.messages.in:
        Add SavePDFToFileInTemporaryFolderAndOpenWithNativeApplication and OpenPDFFromTemporaryFolderWithNativeApplication.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::temporaryPDFDirectoryPath): Copied from PDFViewController. Construct the path to a
        WebKitPDFs temporary directory into which PDFs to be opened with a native application are downloaded.
        (WebKit::pathToPDFOnDisk): Copied from PDFViewController. Combine temporaryPDFDirectoryPath
        with the suggested filename for the given PDF, creating a new filename if the file already exists.
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplicationRaw):
        (WebKit::WebPageProxy::savePDFToTemporaryFolderAndOpenWithNativeApplication):
        Save the given PDF data to a temporary file, given the suggested filename. This inserts the
        filename used into m_temporaryPDFFiles, where it can later be retrieved by UUID when asked
        to open the PDF again in a native application. Then, open it with NSWorkspace.
        (WebKit::WebPageProxy::openPDFFromTemporaryFolderWithNativeApplication):
        Open the previously saved PDF file with NSWorkspace, referenced by UUID.
        We identify the file by UUID instead of name so that only the UIProcess needs
        to keep track of the actual filename, and so that the WebProcess
        cannot hand an arbitrary filename back to the UIProcess to open.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add openWithNativeApplication and storage for the UUID that identifies our PDF on disk.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate openWithPreview]): Forward openWithPreview to PDFPlugin's openWithNativeApplication.
        (WebKit::PDFPlugin::saveToPDF):
        Hand raw data to WebPage and have it send the message to WebPageProxy instead of using IPC types in PDFPlugin.
        (WebKit::PDFPlugin::openWithNativeApplication):
        Ask WebPage to save the current PDF to a temporary directory and open it with a native application.
        If we've already downloaded the PDF (and have a non-null m_temporaryPDFUUID),
        we can just open the existing file.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::savePDFToFileInDownloadsFolder): Hand the PDF data to WebPageProxy to save.
        (WebKit::WebPage::savePDFToTemporaryFolderAndOpenWithNativeApplication): Hand the PDF data to WebPageProxy to save and open.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add savePDFToFileInDownloadsFolder and savePDFToTemporaryFolderAndOpenWithNativeApplication.

2012-12-16  Seokju Kwon  <seokju.kwon@gmail.com>

        [WK2] Remote Web Inspector requires the inspector
        https://bugs.webkit.org/show_bug.cgi?id=105088

        Reviewed by Sam Weinig.

        Inspector server should not be started without inspector.

        * config.h:

2012-12-16  Seokju Kwon  <seokju.kwon@gmail.com>

        Fix unused parameter compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=105089

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix build warning -Wunused-parameter.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):

2012-12-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Header files of ewk_context_menu should be installed
        https://bugs.webkit.org/show_bug.cgi?id=105069

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        Modified to install ewk_context_menu.h and ewk_context_menu_item.h which
        are included in EWebKit2.h

2012-12-16  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12886898> Bundle uploads don't work
        https://bugs.webkit.org/show_bug.cgi?id=105149

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didFail):
        Clean up generated files when they are no longer needed. This has to be done before FormData
        destruction. This duplicates same work done in WebProcess, but duplicaiton is safe, and may
        be helpful if one of the sides prematurely exits.

2012-12-16  Jon Lee  <jonlee@apple.com>

        Allow built-in PDF plugin and plugin documents to auto-start
        https://bugs.webkit.org/show_bug.cgi?id=105000
        <rdar://problem/12633351>

        Reviewed by Sam Weinig.

        Overrides PluginViewBase::shouldAlwaysAutoStart().
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldAlwaysAutoStart): If there's no plug-in, return the default,
        otherwise return the plug-in's behavior.
        * WebProcess/Plugins/PluginView.h:

        * WebProcess/Plugins/Plugin.h:
        (WebKit::Plugin::shouldAlwaysAutoStart): Added. By default, return false.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Built-in PDF plug-ins should auto-start.

2012-12-16  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Small refactor of CoordinatedLayerTreeHost and CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=104880

        Reviewed by Noam Rosenthal.

        This patch changes two points.
        1. Remove layerByIDMap() in CoordinatedGraphicsLayer because it is unused.
        2. Remove code swapping m_registeredLayers in CoordinatedLayerTreeHost because
        setCoordinator(0) does not call detachLayer().

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):

2012-12-16  Anders Carlsson  <andersca@apple.com>

        Remove the random crash thread
        https://bugs.webkit.org/show_bug.cgi?id=105147

        Reviewed by Sam Weinig.

        Remove old crashy code.

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

2012-12-16  Anders Carlsson  <andersca@apple.com>

        Implement authentication for downloads
        https://bugs.webkit.org/show_bug.cgi?id=105146
        <rdar://problem/12239483>

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initialize):
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didReceiveSyncMessage):
        (WebKit::NetworkProcess::downloadsAuthenticationManager):
        * NetworkProcess/NetworkProcess.h:
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveAuthenticationChallenge):
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadsAuthenticationManager):
        * WebProcess/Downloads/DownloadManager.h:
        * WebProcess/Downloads/mac/DownloadMac.mm:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadsAuthenticationManager):
        (WebKit::WebProcess::didReceiveSyncMessage):
        * WebProcess/WebProcess.h:

2012-12-16  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Small refactor of CoordinatedLayerTreeHost and CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=104880

        Reviewed by Noam Rosenthal.

        Delete backing stores explicitly in ~CoordinatedLayerTreeHost().

        Clarify the lifecycle of backing stores in CoordinatedGraphicsLayer.
        Currently, CoordinatedGraphicsLayer::removeTile() checks if m_coordinator
        exists, because ~CoordinatedLayerTreeHost() sets m_coordinator in
        CoordinatedGraphicsLayer to 0. This patch purges backing stores before setting
        m_coordinator to 0. This change makes code more readable.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):

2012-12-16  Anders Carlsson  <andersca@apple.com>

        Authentication manager cleanup
        https://bugs.webkit.org/show_bug.cgi?id=105144

        Reviewed by Sam Weinig.

        Some cleanup to make it possible to reuse the authentication manager from the network process.

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::~AuthenticationChallengeProxy):
        (WebKit::AuthenticationChallengeProxy::useCredential):
        (WebKit::AuthenticationChallengeProxy::cancel):
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::create):
        (AuthenticationChallengeProxy):
        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveAuthenticationChallenge):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        (WebKit::AuthenticationManager::setConnection):
        (WebKit::AuthenticationManager::didReceiveAuthenticationChallenge):
        (WebKit::AuthenticationManager::useCredentialForChallenge):
        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::didReceiveAuthenticationChallenge):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initialize):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::authenticationManager):
        (WebProcess):

2012-12-16  Anders Carlsson  <andersca@apple.com>

        Rudimentary support for main resource downloads
        https://bugs.webkit.org/show_bug.cgi?id=105141

        Reviewed by Sam Weinig.

        For now, instead of converting a main resource load into a download, just cancel it and start
        a new separate download.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadRequest):
        Call through to the download manager.
        
        (WebKit::NetworkProcess::cancelDownload):
        Call through to the download manager.

        * NetworkProcess/NetworkProcess.messages.in:
        Add new messages.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::cancel):
        Send the cancel message to the network process when needed.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):
        Handle the network process case.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit::WebPageProxy::decidePolicyForResponse):
        Keep track of the current request when calling decidePolicyForResponse.

2012-12-16  Andy Estes  <aestes@apple.com>

        [WebKit2] CustomProtocolManager should intercept messages of class MessageClassCustomProtocolManager sent to the network process
        https://bugs.webkit.org/show_bug.cgi?id=105137

        Reviewed by Anders Carlsson.

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

2012-12-16  Levi Weintraub  <leviw@chromium.org>

        Push pixel snapping logic into TransformState
        https://bugs.webkit.org/show_bug.cgi?id=101779

        Reviewed by Simon Fraser.

        Eliminating use of SnapOffsetForTransforms as it's no longer needed.

        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::screenRectOfContents):

2012-12-16  Anders Carlsson  <andersca@apple.com>

        Rename WebFrame::convertHandleToDownload to convertMainResourceLoadToDownload
        https://bugs.webkit.org/show_bug.cgi?id=105134

        Reviewed by Sam Weinig.

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

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Rename FrameLoaderClient::download to convertMainResourceLoadToDownload
        https://bugs.webkit.org/show_bug.cgi?id=105122

        Reviewed by Andreas Kling.

        Update for WebCore changes.

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

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createDownloadProxy):

2012-12-15  Andy Estes  <aestes@apple.com>

        [WebKit2] Have CustomProtocolManager and CustomProtocolManagerProxy store Connections for messaging
        https://bugs.webkit.org/show_bug.cgi?id=105124

        Reviewed by Anders Carlsson.

        Remove CustomProtocolManagerProxy's assumption that all messages go to
        a web process. Have it take a ChildProcessProxy instead and extract its
        connection.

        Similarly, remove CustomProtocolManager's assumption that all messages
        go through a shared WebProcess. Initialize the shared CustomProtocolManager
        with a Connection object instead.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess): Initialize the
        shared CustomProtocolManager with the NetworkProcess's connection to
        the UI process.
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        (WebKit::CustomProtocolManager::connection): Assert m_connection is
        non-0 and return it.
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:
        (+[WKCustomProtocol canInitWithRequest:]): Remove an unnecessary
        namespace.
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]): Ditto.
        (-[WKCustomProtocol startLoading]): Send a message on the
        CustomProtocolManager's connection rather than assuming there is a
        shared WebProcess in our address space.
        (-[WKCustomProtocol stopLoading]): Ditto.
        (WebKit::CustomProtocolManager::initialize): Initialize the shared
        CustomProtocolManager with a Connection and register our custom
        protocol handler with NSURLProtocol.
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h:
        (WebKit):
        (CustomProtocolManagerProxy): Take a ChildProcessProxy* rather than a
        WebProcessProxy*.
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::CustomProtocolManagerProxy): Ditto.
        (WebKit::CustomProtocolManagerProxy::startLoading): Ditto.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy): Instantiate a
        CustomProtocolManagerProxy for the network process.
        (WebKit::NetworkProcessProxy::didReceiveMessage): Route messages of
        class MessageClassCustomProtocolManagerProxy to the
        CustomProtocolManagerProxy.
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage): Assert that we aren't
        using the network process since we've received a message from a
        web process's CustomProtocolManager.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Break CustomProtocolManager
        initialization out into a helper function.
        (WebKit::WebProcess::initializeCustomProtocolManager): Initialize our
        CustomProtocolManager.
        * WebProcess/WebProcess.h:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Happy little Qt build fix.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::download):

2012-12-15  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12886312> Cannot upload patches to Bugzilla (<input type=file> doesn't work)
        https://bugs.webkit.org/show_bug.cgi?id=105120

        Reviewed by Sam Weinig.

        Serialize HTTP body. ResourceRequest serialization cannot (and shouldn't) know about
        body streams, as used with files.

        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Handle downloads in the network process
        https://bugs.webkit.org/show_bug.cgi?id=105117

        Reviewed by Sam Weinig.

        Start using the download manager in the network process.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        Call through to the download manager.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        Add StartDownload message.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::downloadManager):
        Add "singleton" download manager.

        (WebKit::NetworkProcess::didCreateDownload):
        (WebKit::NetworkProcess::didDestroyDownload):
        (WebKit::NetworkProcess::downloadProxyConnection):
        Implement DownloadManager::Client.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
        Call through to the message receiver map.

        * WebProcess/Downloads/Download.cpp:
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::downloadProxyConnection):
        * WebProcess/Downloads/DownloadManager.h:
        Rename connection to downloadProxyConnection.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        When using the network process, send a message to it with the request that needs to be downloaded.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadProxyConnection):
        Return the connection to the UI process.

2012-12-15  Sam Weinig  <sam@webkit.org>

        NSURLCache should be disabled in the WebProcess when using the NetworkProcess
        <rdar://problem/12872266>
        https://bugs.webkit.org/show_bug.cgi?id=105119

        Reviewed by Alexey Proskuryakov.

        Set the size of the NSURLCache to 0 (both disk and memory) in the WebProcess when using
        the NetworkProcess.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-12-15  Sam Weinig  <sam@webkit.org>

        The network process should use the correct NSURLCache location and set its size correctly for the CacheModel
        <rdar://problem/12848505>
        https://bugs.webkit.org/show_bug.cgi?id=105115

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitialize):
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::NetworkProcess::platformSetCacheModel):
        Copy code from the WebProcess to set up the NSURLCache correctly (location and size).
        We should eventually move the calculation of this to the WebContext so it can be done
        once.

        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (NetworkProcessCreationParameters):
        Add the necessary creation parameters to set up the cache.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::setCacheModel):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit):
        (WebKit::WebContext::platformInitializeNetworkProcess):
        Move initializing the NetworkProcess to just after creating (matching the WebProcess),
        rather than waiting for it finish loading before sending the creation parameters.
        Additionally, this moves the setting up of the creation parameters to the WebContext,
        as that is where all the interesting state resides (and also matches the WebProcess).

2012-12-15  Andy Estes  <aestes@apple.com>

        [WebKit2] Register the custom protocol handler in the network process if it exists
        https://bugs.webkit.org/show_bug.cgi?id=105118

        Reviewed by Anders Carlsson.

        Register our custom protocol handler with NSURLProtocol when starting
        up the network process; do not register the custom protocol handler in
        web processes if a network process is being used.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-12-15  Sam Weinig  <sam@webkit.org>

        The network process should use the correct NSURLCache location and set its size correctly for the CacheModel
        <rdar://problem/12848505>
        https://bugs.webkit.org/show_bug.cgi?id=105115

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::setCacheModel):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitialize):
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::NetworkProcess::platformSetCacheModel):
        Copy code from the WebProcess to set up the NSURLCache correctly (location and size).
        We should eventually move the calculation of this to the WebContext so it can be done
        once.

        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (NetworkProcessCreationParameters):
        Add the necessary creation parameters to set up the cache.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::setCacheModel):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit):
        (WebKit::WebContext::platformInitializeNetworkProcess):
        Move initializing the NetworkProcess to just after creating (matching the WebProcess),
        rather than waiting for it finish loading before sending the creation parameters.
        Additionally, this moves the setting up of the creation parameters to the WebContext,
        as that is where all the interesting state resides (and also matches the WebProcess).

2012-12-15  Andy Estes  <aestes@apple.com>

        Clean up the previous build fix; access m_networkProcess directly.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::registerSchemeForCustomProtocol):
        (WebKit::WebContext::unregisterSchemeForCustomProtocol):

2012-12-15  Andy Estes  <aestes@apple.com>

        Fix the build.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::registerSchemeForCustomProtocol):
        (WebKit::WebContext::unregisterSchemeForCustomProtocol):

2012-12-15  Andy Estes  <aestes@apple.com>

        [WebKit2] Register schemes with the network process if it is being used
        https://bugs.webkit.org/show_bug.cgi?id=105113

        Reviewed by Anders Carlsson.

        If a WebContext is using the network process, it needs to be told about
        scheme (un)registration rather than the context's web processes.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess): Tell the shared
        CustomProtocolManager about schemes registered at process creation time.
        (WebKit::NetworkProcess::registerSchemeForCustomProtocol): Tell the
        shared CustomProtocolManager about a new scheme.
        (WebKit::NetworkProcess::unregisterSchemeForCustomProtocol): Remove a
        scheme from the shared CustomProtocolManager.
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in: Add registration and
        unregistration messages for the NetworkProcess.
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode): Encode
        urlSchemesRegisteredForCustomProtocols.
        (WebKit::NetworkProcessCreationParameters::decode): Decode
        urlSchemesRegisteredForCustomProtocols.
        * Shared/Network/NetworkProcessCreationParameters.h: Define
        urlSchemesRegisteredForCustomProtocols.
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::platformInitializeNetworkProcess): Populate
        urlSchemesRegisteredForCustomProtocols with the current set of schemes.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::registerSchemeForCustomProtocol): Send a new
        scheme to either the network process or to the context's web processes.
        (WebKit::WebContext::unregisterSchemeForCustomProtocol): Ditto for
        removing a scheme.
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Only populate
        urlSchemesRegisteredForCustomProtocols if the network process isn't
        being used.
        (WebKit::WebContext::registerNotificationObservers):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        urlSchemesRegisteredForCustomProtocols should only be non-empty if the
        network process isn't being used. Assert this.

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Remove the unneeded NetworkProcessCrashed message
        https://bugs.webkit.org/show_bug.cgi?id=105114

        Reviewed by Sam Weinig.

        Remove the NetworkProcessCrashed message; it's not needed since the connection member variable is already
        nulled out in WebProcess::networkProcessConnectionClosed which is called when the Connection::Client::didClose member
        function is called on the connection between the web process and network process.
        
        Furthermore, this message was handled on the connection queue which runs on a different thread and the handler was not
        thread-safe so this could in theory cause bad crashes.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didClose):
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Add a DownloadProxyMap object to the NetworkProcessProxy object
        https://bugs.webkit.org/show_bug.cgi?id=105112

        Reviewed by Sam Weinig.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        (WebKit::NetworkProcessProxy::didClose):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createDownloadProxy):
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Move the download proxy map from the web context to the web process proxy
        https://bugs.webkit.org/show_bug.cgi?id=105109

        Reviewed by Andreas Kling.

        More progress towards making downloads work with the networking process. Since downloads are handled by the
        web process when not using a networking process, it makes sense for the download proxy map to live in the
        web process proxy object.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::download):
        (WebKit::WebContext::createDownloadProxy):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::shouldTerminate):
        (WebKit):
        (WebKit::WebProcessProxy::createDownloadProxy):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-12-15  Anders Carlsson  <andersca@apple.com>

        DownloadProxy should keep a strong reference to its associated web context
        https://bugs.webkit.org/show_bug.cgi?id=105107

        Reviewed by Alexey Proskuryakov.

        While this does create a ref-cycle, it's broken when the download completes, fails, is canceled or
        if the process that's doing the download crashes.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::processDidClose):
        (WebKit::DownloadProxy::didStart):
        (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
        (WebKit::DownloadProxy::didReceiveResponse):
        (WebKit::DownloadProxy::didReceiveData):
        (WebKit::DownloadProxy::shouldDecodeSourceDataOfMIMEType):
        (WebKit::DownloadProxy::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadProxy::didCreateDestination):
        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        (WebKit::DownloadProxy::didCancel):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Remove WebContext::downloadFinished
        https://bugs.webkit.org/show_bug.cgi?id=105105

        Reviewed by Sam Weinig.

        Have DownloadProxyMap manage the message receiver map and remove WebContext::downloadFinished.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        (WebKit::DownloadProxy::didCancel):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::DownloadProxyMap):
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit::DownloadProxyMap::downloadFinished):
        * UIProcess/Downloads/DownloadProxyMap.h:
        (DownloadProxyMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::createDownloadProxy):
        * UIProcess/WebContext.h:

2012-12-15  Sam Weinig  <sam@webkit.org>

        Make the NetworkProcess be managed by the WebContext, rather than a singleton NetworkProcessMananger
        https://bugs.webkit.org/show_bug.cgi?id=105104

        Reviewed by Alexey Proskuryakov.

        Move to having the WebContext own and manage the NetworkProcessProxy.

        * UIProcess/Network/NetworkProcessManager.cpp: Removed.
        * UIProcess/Network/NetworkProcessManager.h: Removed.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::create):
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit):
        (NetworkProcessProxy):
        * UIProcess/Network/mac/NetworkProcessManagerMac.mm: Removed.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::removeNetworkProcessProxy):
        (WebKit::WebContext::getNetworkProcessConnection):
        (WebKit::WebContext::willStartUsingPrivateBrowsing):
        (WebKit::WebContext::willStopUsingPrivateBrowsing):
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        (WebKit::WebContext::networkProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::applicationBecameVisible):
        (WebKit::WebContext::applicationBecameOccluded):
        * WebKit2.xcodeproj/project.pbxproj:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        DownloadProxy objects should know which DownloadProxyMap they belong to
        https://bugs.webkit.org/show_bug.cgi?id=105102

        Reviewed by Andy Estes.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::create):
        (WebKit::DownloadProxy::DownloadProxy):
        * UIProcess/Downloads/DownloadProxy.h:
        (WebKit):
        (DownloadProxy):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):

2012-12-15  Andy Estes  <aestes@apple.com>

        [WebKit2] Move CustomProtocolManager to Shared/
        https://bugs.webkit.org/show_bug.cgi?id=105103

        Reviewed by Sam Weinig.

        CustomProtocolManager can be instantiated either in the NetworkProcess or the WebProcess, so it should live in Shared/.

        * DerivedSources.make: Update the path where CustomProtocolManager.messages.in can be found.
        * Shared/Network/CustomProtocols/CustomProtocolManager.h: Renamed from Source/WebKit2/WebProcess/Network/CustomProtocols/CustomProtocolManager.h.
        * Shared/Network/CustomProtocols/CustomProtocolManager.messages.in: Renamed from Source/WebKit2/WebProcess/Network/CustomProtocols/CustomProtocolManager.messages.in.
        * Shared/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm: Renamed from Source/WebKit2/WebProcess/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2012-12-15  Sam Weinig  <sam@webkit.org>

        Try to fix the Qt build.

        * Target.pri:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Get rid of DownloadProxyMap::downloads()
        https://bugs.webkit.org/show_bug.cgi?id=105100

        Reviewed by Sam Weinig.

        Add the needed member functions to DownloadProxyMap and remove the downloads() member function.

        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::downloadFinished):
        (WebKit::DownloadProxyMap::processDidClose):
        (WebKit):
        * UIProcess/Downloads/DownloadProxyMap.h:
        (WebKit::DownloadProxyMap::isEmpty):
        (DownloadProxyMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::downloadFinished):

2012-12-15  Sam Weinig  <sam@webkit.org>

        Move calculation of caches sizes based on the cache model to CacheModel.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=105098

        Reviewed by Anders Carlsson.

        Move calculation of caches sizes based on the cache model to CacheModel.h/cpp so
        that it can be used by more than just the WebProcess.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Shared/CacheModel.cpp: Added.
        (WebKit):
        (WebKit::calculateCacheSizes):
        * Shared/CacheModel.h:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.cpp:
        * WebProcess/WebProcess.h:
        (WebProcess):
        * win/WebKit2.vcproj:

2012-12-15  Anders Carlsson  <andersca@apple.com>

        DownloadProxyMap shouldn't be a singleton after all
        https://bugs.webkit.org/show_bug.cgi?id=105099

        Reviewed by Sam Weinig.

        Make the DownloadProxyMap be per context instead, and get rid of the m_downloads hash map from WebContext.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        (WebKit::DownloadProxy::didCancel):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::~DownloadProxyMap):
        * UIProcess/Downloads/DownloadProxyMap.h:
        (DownloadProxyMap):
        (WebKit::DownloadProxyMap::downloads):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::createDownloadProxy):
        (WebKit::WebContext::downloadFinished):
        * UIProcess/WebContext.h:
        (WebContext):

2012-12-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Disambiguate "background color" and "contents as solid color" on GraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=104842

        Reviewed by Simon Fraser.

        Rename overloads in coordinated graphics to account for the rename in GraphicsLayer.

        * Shared/CoordinatedGraphics/CoordinatedLayerInfo.h:
        (CoordinatedLayerInfo):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToSolidColor):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-12-15  Christophe Dumez  <christophe.dumez@intel.com>

        [GTK][WK2] Memory leak in ChunkedUpdateDrawingArea::paintIntoUpdateChunk()
        https://bugs.webkit.org/show_bug.cgi?id=105095

        Reviewed by Martin Robinson.

        Adopt the pointer returned by cairo_create() in
        ChunkedUpdateDrawingArea::paintIntoUpdateChunk() to avoid leaking
        memory.

        * WebProcess/WebPage/gtk/ChunkedUpdateDrawingAreaGtk.cpp:
        (WebKit::ChunkedUpdateDrawingArea::paintIntoUpdateChunk):

2012-12-15  Mark Lam  <mark.lam@apple.com>

        Added #if ENABLE(SQL_DATABASE) around WebPlatformStrategies::getDatabaseServer().
        https://bugs.webkit.org/show_bug.cgi?id=104934..

        Not reviewed.

        Greening the Qt Linux Release Minimal bot.

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

2012-12-15  Mark Lam  <mark.lam@apple.com>

        Re-landing patch for "Introducing the DatabaseStrategy and database servers".
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Not reviewed.

        Merged from r137767. Previously reviewed by Sam Weinig.

        * CMakeLists.txt:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createDatabaseStrategy):
        (WebKit):
        (WebKit::WebPlatformStrategies::getDatabaseServer):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-12-14  Anders Carlsson  <andersca@apple.com>

        DownloadProxy objects should be message receivers
        https://bugs.webkit.org/show_bug.cgi?id=105068

        Reviewed by Andreas Kling.

        This simplifies the WebContext message dispatch code somewhat.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didReceiveMessage):
        (WebKit::DownloadProxy::didReceiveSyncMessage):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createDownloadProxy):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):

2012-12-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137767.
        http://trac.webkit.org/changeset/137767
        https://bugs.webkit.org/show_bug.cgi?id=105062

        Broke Mac builds. (Requested by mlam on #webkit).

        * CMakeLists.txt:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-12-14  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12874760> NetworkProcess loads may get stuck when WebProcess quits
        https://bugs.webkit.org/show_bug.cgi?id=105056

        Reviewed by Anders Carlsson.

        Make response maps per-connection.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose): Cancel waiting for responses
        from WebProcess, they will never arrive.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit::NetworkConnectionToWebProcess::willSendRequestResponseMap):
        (WebKit::NetworkConnectionToWebProcess::canAuthenticateAgainstProtectionSpaceResponseMap):
        Maps now live here.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose): Added a FIXME.

        (WebKit::NetworkResourceLoader::willSendRequest):
        (WebKit::NetworkResourceLoader::willSendRequestHandled):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceHandled):
        Handle the cases where we can't send a request, or can't expect a response any more.

        * Shared/BlockingResponseMap.h:
        (BlockingResponseMap):
        (BlockingResponseMap::BlockingResponseMap):
        (BlockingResponseMap::~BlockingResponseMap):
        (BlockingResponseMap::waitForResponse):
        (BlockingResponseMap::didReceiveResponse):
        (BlockingResponseMap::cancel):
        (BlockingBoolResponseMap):
        (BlockingBoolResponseMap::BlockingBoolResponseMap):
        (BlockingBoolResponseMap::~BlockingBoolResponseMap):
        (BlockingBoolResponseMap::waitForResponse):
        (BlockingBoolResponseMap::didReceiveResponse):
        (BlockingBoolResponseMap::cancel):
        Added an ability to cancel, and slightly beefed up overall.

2012-12-14  Anders Carlsson  <andersca@apple.com>

        DownloadProxyMap should keep track of outstanding DownloadProxy objects
        https://bugs.webkit.org/show_bug.cgi?id=105053

        Reviewed by Andreas Kling.

        This is more work towards removing the m_downloads map from every WebContext object.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::didFinish):
        (WebKit::DownloadProxy::didFail):
        (WebKit::DownloadProxy::didCancel):
        * UIProcess/Downloads/DownloadProxyMap.cpp:
        (WebKit::DownloadProxyMap::createDownloadProxy):
        (WebKit):
        (WebKit::DownloadProxyMap::downloadFinished):
        * UIProcess/Downloads/DownloadProxyMap.h:
        (DownloadProxyMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createDownloadProxy):

2012-12-14  Mark Lam  <mark.lam@apple.com>

        Introducing the DatabaseStrategy and database servers.
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Reviewed by Sam Weinig.

        The database server is currently a placeholder that does nothing.

        * CMakeLists.txt:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createDatabaseStrategy):
        (WebKit):
        (WebKit::WebPlatformStrategies::getDatabaseServer):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-12-14  Alexey Proskuryakov  <ap@apple.com>

        Resource loads sometimes stall
        https://bugs.webkit.org/show_bug.cgi?id=104976

        Apply the same quick an dirty fix to BlockingBoolResponseMap.

        * Shared/BlockingResponseMap.h:
        (BlockingBoolResponseMap::didReceiveResponse):

2012-12-14  Anders Carlsson  <andersca@apple.com>

        Add a DownloadsProxyMap class in preparation for moving the downloads map away from WebContext
        https://bugs.webkit.org/show_bug.cgi?id=104980

        Reviewed by Andreas Kling.

        Currently the DownloadProxyMap doesn't really do anything; this initial change is to make sure that
        adding the new files won't break any builds.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * UIProcess/Downloads/DownloadProxyMap.cpp: Added.
        (WebKit):
        (WebKit::DownloadProxyMap::shared):
        (WebKit::DownloadProxyMap::DownloadProxyMap):
        (WebKit::DownloadProxyMap::~DownloadProxyMap):
        (WebKit::DownloadProxyMap::createDownloadProxy):
        * UIProcess/Downloads/DownloadProxyMap.h: Added.
        (WebKit):
        (DownloadProxyMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createDownloadProxy):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-12-14  Anders Carlsson  <andersca@apple.com>

        Fix assertion failure when the network process is enabled
        https://bugs.webkit.org/show_bug.cgi?id=105040
        <rdar://problem/12883632>

        Reviewed by Alexey Proskuryakov.

        Make sure that we don't call into the download manager when running with a network process.

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

2012-12-14  Michelangelo De Simone  <michelangelo@webkit.org>

        [CSS Shaders] Remove code for the other mesh box types (border-box | padding-box | content-box)
        https://bugs.webkit.org/show_bug.cgi?id=103776

        Reviewed by Dean Jackson.

        The MeshBoxType has been removed and the code has been refactored. The specs will be updated shortly
        and therefore this feature - even though it was not fully implemented yet - shall not be used anymore.

        In this patch we remove everything but the parsing code, which shall be addressed in a different patch
        (see: https://bugs.webkit.org/show_bug.cgi?id=103778).

        Specification to be updated: http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#ltboxgt

        Existing tests have been updated and new parsing legacy cases have been added.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/WebCustomFilterOperation.h:
        (WebCore::WebCustomFilterOperation::create):
        (WebCore::WebCustomFilterOperation::WebCustomFilterOperation):

2012-12-14  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12880750> RGRESSION: Crash when emptying cookie jar
        https://bugs.webkit.org/show_bug.cgi?id=105038

        Reviewed by Jessie Berlin.

        Handle null context, which is used for cookie management functions.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookiesEnabled):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::getHostnamesWithCookies):
        (WebKit::WebPlatformStrategies::deleteCookiesForHostname):
        (WebKit::WebPlatformStrategies::deleteAllCookies):

2012-12-14  Alberto Garcia  <agarcia@igalia.com>

        [GTK] When in private mode WebKitGTK+ should not save HTTP authentication credentials to the persistent storage
        https://bugs.webkit.org/show_bug.cgi?id=104910

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:
        (WebKit::WebKit2GtkAuthenticationDialog::WebKit2GtkAuthenticationDialog):
        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h:
        (WebKit2GtkAuthenticationDialog):
        GtkAuthenticationDialog has a new credential storage mode
        parameter, so add it here too.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewHandleAuthenticationChallenge):
        When creating the GtkAuthenticationDialog, set the credential
        storage mode using the private browsing setting from the current
        page.

2012-12-14  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Fix EFL build after r137718
        https://bugs.webkit.org/show_bug.cgi?id=105018

        Unreviewed build fix.

        The problem was that UNUSED_PARAM(size) was left in the code
        for non-existent variable 'size'.

        * UIProcess/efl/PageClientDefaultImpl.cpp:
        (WebKit::PageClientDefaultImpl::updateViewportSize):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):

2012-12-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Do not pass size to updateViewportSize
        https://bugs.webkit.org/show_bug.cgi?id=104994

        Reviewed by Gyuyoung Kim.

        There is no need to pass size to updateViewportSize as we
        have direct access to it. This makes the code differ less
        from Qt.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::pageDidRequestScroll):
        * UIProcess/efl/PageClientBase.h:
        (PageClientBase):
        * UIProcess/efl/PageClientDefaultImpl.cpp:
        (WebKit::PageClientDefaultImpl::updateViewportSize):
        * UIProcess/efl/PageClientDefaultImpl.h:
        (PageClientDefaultImpl):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        * UIProcess/efl/PageClientLegacyImpl.h:
        (PageClientLegacyImpl):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (PageViewportControllerClientEfl):

2012-12-13  Sanghyup Lee  <sh53.lee@samsung.com>

        Fix build warning
        https://bugs.webkit.org/show_bug.cgi?id=104978

        Reviewed by Kentaro Hara.

        Initialize parameter 'downloadID' to fix 'unused parameter' build warning.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        Resource loads sometimes stall
        https://bugs.webkit.org/show_bug.cgi?id=104976

        Reviewed by Anders Carlsson.

        Quick and dirty partial fix.

        * Shared/BlockingResponseMap.h: (BlockingResponseMap::didReceiveResponse):
        Wake up all threads, so that non-sequential responses don't break us. This is still
        horribly inefficient,but should improve behavior quite a bit.

2012-12-13  Seokju Kwon  <seokju.kwon@gmail.com>

        Fix unused parameter compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=104907

        Reviewed by Kentaro Hara.

        Use UNUSED_PARAM macro to fix build warning -Wunused-parameter
        when ENABLE_INSPECTOR is disabled.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorGetPage):
        (WKInspectorIsVisible):
        (WKInspectorIsFront):
        (WKInspectorShow):
        (WKInspectorClose):
        (WKInspectorShowConsole):
        (WKInspectorShowResources):
        (WKInspectorShowMainResourceForFrame):
        (WKInspectorIsAttached):
        (WKInspectorAttach):
        (WKInspectorDetach):
        (WKInspectorIsDebuggingJavaScript):
        (WKInspectorToggleJavaScriptDebugging):
        (WKInspectorIsProfilingJavaScript):
        (WKInspectorToggleJavaScriptProfiling):
        (WKInspectorIsProfilingPage):
        (WKInspectorTogglePageProfiling):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetInspector):

2012-12-13  Seokju Kwon  <seokju.kwon@gmail.com>

        [QT][GTK][EFL] Add guard for WebInspectorServer
        https://bugs.webkit.org/show_bug.cgi?id=104889

        Reviewed by Kenneth Rohde Christiansen.

        Add ENABLE(INSPECTOR_SERVER) guard around platform-specific implementation for WebInspectorServer.

        * UIProcess/InspectorServer/efl/WebInspectorServerEfl.cpp:
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:

2012-12-13  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Reorder messages to CoordinatedLayerTreeHostProxy
        https://bugs.webkit.org/show_bug.cgi?id=103843

        Reviewed by Noam Rosenthal.

        Clarify LayerTreeRenderer::setRootLayerID() can be called only once during its
        lifecycle. LayerTreeRenderer, CoordinatedLayerTreeHost and CoordinatedLayerTreeHostProxy
        have the same lifecycle to WebPage and the root layer is reused even if loading
        new page, so it is impossible to call LayerTreeRenderer::setRootLayerID() more
        than twice.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setRootLayerID):

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12838354> DOM cookie access functions should respect private browsing
        https://bugs.webkit.org/show_bug.cgi?id=104691

        Reviewed by Anders Carlsson.

        Remove obsolete FIXMEs, and fix one function that I overlooked.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        (WebKit::NetworkConnectionToWebProcess::getHostnamesWithCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookiesForHostname):
        (WebKit::NetworkConnectionToWebProcess::deleteAllCookies):

2012-12-13  Anders Carlsson  <andersca@apple.com>

        DownloadManager shouldn't call the web process directly
        https://bugs.webkit.org/show_bug.cgi?id=104946

        Reviewed by Antti Koivisto.

        Introduce the needed DownloadManager::Client member functions and have Download call them instead of calling the web process directly.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::Download):
        (WebKit::Download::~Download):
        (WebKit::Download::connection):
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::DownloadManager):
        (WebKit::DownloadManager::didCreateDownload):
        (WebKit::DownloadManager::didDestroyDownload):
        (WebKit::DownloadManager::connection):
        * WebProcess/Downloads/DownloadManager.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didCreateDownload):
        (WebKit::WebProcess::didDestroyDownload):
        * WebProcess/WebProcess.h:

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12838354> Per-Tab WebProcess: DOM cookie access functions should respect private browsing
        https://bugs.webkit.org/show_bug.cgi?id=104691

        Reviewed by Sam Weinig.

        Pass private browsing state from local context to remote one.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::networkingContext):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        (WebKit::NetworkConnectionToWebProcess::getHostnamesWithCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookiesForHostname):
        (WebKit::NetworkConnectionToWebProcess::deleteAllCookies):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/mac/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::inPrivateBrowsingMode):
        (WebKit::RemoteNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookiesEnabled):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::getHostnamesWithCookies):
        (WebKit::WebPlatformStrategies::deleteCookiesForHostname):
        (WebKit::WebPlatformStrategies::deleteAllCookies):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::inPrivateBrowsingMode):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext::inPrivateBrowsingMode):

2012-12-13  Anders Carlsson  <andersca@apple.com>

        Get rid of DownloadManager::shared
        https://bugs.webkit.org/show_bug.cgi?id=104939

        Reviewed by Andreas Kling.

        Move the DownloadManager singleton to WebProcess and stub out a DownloadManager::Client class.

        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::DownloadManager):
        * WebProcess/Downloads/DownloadManager.h:
        (Client):
        (WebKit::DownloadManager::Client::~Client):
        (DownloadManager):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertHandleToDownload):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadManager):
        (WebKit):
        (WebKit::WebProcess::shouldTerminate):
        (WebKit::WebProcess::downloadRequest):
        (WebKit::WebProcess::cancelDownload):
        (WebKit::WebProcess::startTransfer):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-12-12  Andy Estes  <aestes@apple.com>

        [WebKit2] Only register NSNotificationCenter observers once per WebContext
        https://bugs.webkit.org/show_bug.cgi?id=104879

        Reviewed by Alexey Proskuryakov.

        WebContext was mistakenly registering NSNotificationCenter observers
        every time a new web process was created. In a multi-WebProcess world,
        this caused duplicate observers to be needlessly registered. Fix this
        by registering observers at WebContext creation time (and fix a related
        bug where two of the observers were never unregistered).

        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitialize): Register observers when initializing the context.
        (WebKit::WebContext::platformInitializeWebProcess): Don't register observers here.
        (WebKit::WebContext::platformInvalidateContext): Unregister observers when invalidating the context.
        (WebKit::WebContext::registerNotificationObservers):
        (WebKit::WebContext::unregisterNotificationObservers):

2012-12-13  Anders Carlsson  <andersca@apple.com>

        Download objects should keep track of their associated DownloadManager object
        https://bugs.webkit.org/show_bug.cgi?id=104936

        Reviewed by Andreas Kling.

        This is the first step towards eliminating DownloadManager::shared.

        * WebProcess/Downloads/Download.cpp:
        (WebKit::Download::create):
        (WebKit::Download::Download):
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * WebProcess/Downloads/Download.h:
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):

2012-12-13  Anders Carlsson  <andersca@apple.com>

        Remove unused initiatingPage parameter from download objects
        https://bugs.webkit.org/show_bug.cgi?id=104933

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Downloads/Download.h:
        (Download):
        * WebProcess/Downloads/DownloadManager.cpp:
        (WebKit::DownloadManager::startDownload):
        (WebKit::DownloadManager::convertHandleToDownload):
        * WebProcess/Downloads/DownloadManager.h:
        (DownloadManager):
        * WebProcess/Downloads/cfnet/DownloadCFNet.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        * WebProcess/Downloads/curl/DownloadCurl.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        * WebProcess/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        * WebProcess/Downloads/qt/DownloadQt.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::startDownload):
        (WebKit::WebFrame::convertHandleToDownload):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::downloadRequest):

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12870065> Frequent NetworkProcess crashes due to null connection when closing tabs
        https://bugs.webkit.org/show_bug.cgi?id=104922

        Reviewed by Anders Carlsson.

        Don't zero out connection pointers when a connection closes. There doesn't appear
        to be any reason to do this.

        Tested by hitting breakpoints in all relevant objects destructors to confirm that
        this doesn't introduce leaks.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose):

2012-12-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Update the way we set the cookies policy
        https://bugs.webkit.org/show_bug.cgi?id=104915

        Reviewed by Kenneth Rohde Christiansen.

        We are mistakenly assigning the cookie policy to the persistent storage
        type which is not correct. This was caused by r137432 and is making
        the unit tests fail.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):

2012-12-13  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix painting on Mac with retina display
        https://bugs.webkit.org/show_bug.cgi?id=104574

        Unreviewed, removing leftover API test.

        This hunk somehow did not make it into the final patch.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_devicePixelRatio.qml: Removed.

2012-12-13  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix painting on Mac with retina display
        https://bugs.webkit.org/show_bug.cgi?id=104574

        Reviewed by Kenneth Rohde Christiansen.

        Since HiDPI support has been added and enabled in Qt we ended up
        painting incorrectly scaled content on high-resolution screens.
        Because the intrinsic device pixel ratio is always taken into
        account by Qt when painting to high-resolution screens we should
        automatically obtain the scale ratio from the window in which the
        item is rendered instead of setting it in QML.

        Qt does not make it possible to override the device pixel ratio
        of the native window, therefore our experimental QML API for setting
        a custom value is of no use any more and should be removed.

        This patch fixes the scaling issue on Mac retina display by querying
        the underlying window for the device scale factor and applying it to
        the backing store and the scene-graph rendering of the content node.
        Additionally removes the experimental API and related API tests.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPage::updatePaintNode):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewLegacyPrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView::newWebView):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHostProxy::deviceScaleFactor):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * UIProcess/qt/QtWebPageSGNode.cpp:
        (WebKit::ContentsSGNode::ContentsSGNode):
        (WebKit::ContentsSGNode::render):
        (WebKit::ContentsSGNode::clipRect):
        (ContentsSGNode):
        (WebKit::QtWebPageSGNode::QtWebPageSGNode):
        (WebKit::QtWebPageSGNode::devicePixelRatio):
        (WebKit):
        (WebKit::QtWebPageSGNode::setRenderer):
        * UIProcess/qt/QtWebPageSGNode.h:
        (QtWebPageSGNode):

2012-12-13  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] API tests failing because Vibration API is using unsigned as duration since r137410
        https://bugs.webkit.org/show_bug.cgi?id=104914

        Reviewed by Kenneth Rohde Christiansen.

        Update the tests to reflect the data type coming from WebCore.

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

2012-12-13  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Device pixel ratio lost upon relaunch of the web process
        https://bugs.webkit.org/show_bug.cgi?id=104913

        Reviewed by Simon Hausmann.

        Use setIntrinsicDeviceScaleFactor instead of setCustomDeviceScaleFactor
        when setting the device pixel ratio to make the setting permanent and
        make sure it is set as part of the web process creation parameters.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_device_pixel_ratio_set):

2012-12-13  Jerome Pasion  <jerome.pasion@digia.com>

        [Qt] Doc: Fixing Qt WebKit reference documentation.

        Reviewed by Simon Hausmann.

        Fixes:
        -added \module for C++ classes and \qmlmodule for QML types
        -added links to the Qt WebKit Examples pages
        -fixed the qhp settings for Qt Creator

        Task-number: QTBUG-28583
        Task-number: QTBUG-28418
        Task-number: QTBUG-27646

        * UIProcess/API/qt/qquickwebview.cpp:

2012-12-13  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [EFL][GTK] Don't call deprecated g_type_init when glib => 2.35
        https://bugs.webkit.org/show_bug.cgi?id=103209

        Reviewed by Kenneth Rohde Christiansen.

        g_type_init() is deprecated from 2.35.0 onwards. Don't call it
        in that case to avoid warnings and/or build failure.

        Also, remove a call to g_type_init() from WebProcessMainGtk():
        It is not needed if gtk_init() is called.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):

2012-12-13  Joaquim Rocha  <jrocha@igalia.com>

        REGRESSION (r137432): The /webkit2/WebKitCookieManager/accept-policy unit test is failing
        https://bugs.webkit.org/show_bug.cgi?id=104790

        Reviewed by Carlos Garcia Campos.

        The cookies accept policy and the cookies persistent storage type
        were not being correctly assigned.

        * UIProcess/WebContext.cpp: Set the default value of the cookie
        accept policy.
        (WebKit::WebContext::WebContext):
        * UIProcess/gtk/WebContextGtk.cpp: Fix setting the cookies persistent
        storage type (it was mistakenly assigning the policy instead) and
        set the accept policy which was missing.
        (WebKit::WebContext::platformInitializeWebProcess):

2012-12-13  Jon Lee  <jonlee@apple.com>

        plugin snapshotting accepts bad snapshot after 5 seconds
        https://bugs.webkit.org/show_bug.cgi?id=104886
        <rdar://problem/12838753>

        Reviewed by Maciej Stachowiak.

        * WebProcess/Plugins/PluginView.cpp: Increase to 60 tries, equating to a little over 60 seconds total.

2012-12-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        NetworkInfoController needs to support destructor
        https://bugs.webkit.org/show_bug.cgi?id=104642

        Reviewed by Kentaro Hara.

        Though NetworkInfoController can be referenced by each port in order to update network status change,
        there is no virtual interface to destroy it. Beside each port client also needs to be destroyed when
        controller is destroyed.

        * UIProcess/efl/NetworkInfoProvider.cpp:
        (NetworkInfoProvider::networkInfoControllerDestroyed):
        * UIProcess/efl/NetworkInfoProvider.h:
        (NetworkInfoProvider):
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.cpp:
        (WebKit::WebNetworkInfoClient::networkInfoControllerDestroyed):
        (WebKit):
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.h:
        (WebNetworkInfoClient):

2012-12-12  Andy Estes  <aestes@apple.com>

        Rename currentMousePosition() to lastKnownMousePosition() and mark it as OVERRIDE.

        * WebProcess/Plugins/PDF/PDFPlugin.h:

2012-12-12  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Refactor duplicate code into EflInspectorUtilities
        https://bugs.webkit.org/show_bug.cgi?id=104329

        Reviewed by Kenneth Rohde Christiansen.

        Remove duplicated work to get the resource path for inspector.
        And use WebCore::inspectorResourcePath().

        * UIProcess/InspectorServer/efl/WebInspectorServerEfl.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorBaseURL):

2012-12-12  Mark Lam  <mark.lam@apple.com>

        Encapsulate externally used webdatabase APIs in DatabaseManager.
        https://bugs.webkit.org/show_bug.cgi?id=104741.

        Reviewed by Sam Weinig.

        Use DatabaseManager instead of accessing DatabaseTracker, AbstractDatabase,
        and DatabaseContext directly. This is to prepare for upcoming webkit2
        refactoring.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::initialize):
        (WebKit::WebDatabaseManager::WebDatabaseManager):
        (WebKit::WebDatabaseManager::getDatabasesByOrigin):
        (WebKit::WebDatabaseManager::getDatabaseOrigins):
        (WebKit::WebDatabaseManager::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManager::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManager::deleteAllDatabases):
        (WebKit::WebDatabaseManager::setQuotaForOrigin):
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-12-12  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12862512> Crashes in NetworkResourceLoadScheduler::receivedRedirect
        https://bugs.webkit.org/show_bug.cgi?id=104844

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::receivedRedirect): The load may be already
        canceled.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponse): Expanded logging a little.

2012-12-12  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix the build on Mac

        Unreviewed build fix.

        Add missing virtual destructor with empty
        definition to fix missing vtable error
        in test util's LoadStartedCatcher.

        * UIProcess/API/qt/tests/util.h:
        (LoadStartedCatcher::~LoadStartedCatcher):

2012-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make LOG() work in WebProcess and NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=104718

        Reviewed by Tim Horton.

        * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess):
        Initialize WebCore and WebKit2 logging.

        * Platform/Logging.cpp: (WebKit::initializeLogChannelsIfNecessary):
        Added Network and NetworkScheduling. Re-ordered to match declaration order,
        alphabetical clearly doesn't help here.

        * WebProcess/WebProcess.cpp: (WebKit::WebProcess::WebProcess): Initialize WebKit2
        logging in addition to WebCore.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::WebContext): Initialize WebKit2
        logging in addition to WebCore.

2012-12-12  Simon Pena  <spena@igalia.com>

        [GTK] Add sections documentation to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=104484

        Reviewed by Martin Robinson.

        Many of the sections in the WebKit2 GTK+ API documentation were
        missing. This commit adds new documentation, in some cases
        adapting it from WebKitGtk+ and in others writing it from the
        scratch.

        It also removes the WebKitWebViewBase class from the documentation
        index, since it is not really relevant.

        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        * UIProcess/API/gtk/WebKitDownload.cpp:
        * UIProcess/API/gtk/WebKitError.cpp:
        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        * UIProcess/API/gtk/WebKitFindController.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        * UIProcess/API/gtk/WebKitPlugin.cpp:
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        * UIProcess/API/gtk/WebKitURIRequest.cpp:
        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        * UIProcess/API/gtk/WebKitVersion.cpp:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_class_init):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:

2012-12-12  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL [WebGL] [Wk2] Resizing the canvas breaks WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=104535.

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext3DEfl does not re-create the surface on canvas resize, this
        conflicted with the logic in coordinated graphics Layer.
        CoordinatedGraphicsLayer checks for GraphicsSurfaceToken to decide if the surface
        in UI-Process should be recreated or not. With this
        patch we also check for size of the platform Layer.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-12-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137438.
        http://trac.webkit.org/changeset/137438
        https://bugs.webkit.org/show_bug.cgi?id=104798

        assertion reached when removing tile (Requested by tmpsantos
        on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::CoordinatedGraphicsLayer::setContentsScale):
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::adjustVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::notifyFlushRequired):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::layerTreeTileUpdatesAllowed):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):

2012-12-12  Mario Sanchez Prada  <mario@webkit.org>

        [GTK][WK2] New API to detect display/execution of insecure content
        https://bugs.webkit.org/show_bug.cgi?id=104578

        Reviewed by Martin Robinson.

        Added new API and documentation for detecting insecure content.

        Implemented needed functions from C API's WKPageLoaderClient

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didDisplayInsecureContentForFrame): Implemented.
        (didRunInsecureContentForFrame): Ditto.
        (attachLoaderClientToView): Added newly implemented functions.

        Added new 'insecure-content-detected' signal to API.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init): Installed new signal.
        (webkitWebViewInsecureContentDetected): Helper function aded to
        private API to emit the new signal from the page loader client.
        * UIProcess/API/gtk/WebKitWebView.h:
        (_WebKitWebViewClass): Added new signal.

        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Added prototype of the
        new helper function webkitWebViewInsecureContentDetected().

        Added new unit tests.

        * UIProcess/API/gtk/tests/TestSSL.cpp:
        (testSSL): Updated to the new variable name for the https server.
        (testInsecureContent): New unit test.
        (httpsServerCallback): Renamed from serverCallback() and updated
        to return HTML content linking to external resources in an
        insecure (plain http) server, to be used by the new test.
        (httpServerCallback): New callback for a new http server, that
        will serve a script and an image when requested.
        (beforeAll): Run the new http server, besides the https one.
        (afterAll): Delete both the http and the https server.

        Updated documentation with new API.

        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Added references
        to the new WebKitInsecureContentEvent enum type.

2012-12-12  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor TiledBackingStore code in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=103959

        Reviewed by Kenneth Rohde Christiansen.

        Currently, CoordinatedGraphicsLayer has complex code related to TiledBackingStore.
        It has two problem.
        1. CoordinatedGraphicsLayer hacks TiledBackingStore to prevent
        TiledBackingStore from asynchronously sending UpdateTile message to UI
        Process.
        2. CreateTile and RemoveTile message can be sent to UI Process at any time.

        This patch makes CoordinatedGraphicsLayer use TiledBackingStore more explicitly.
        It means only during flushing layer states, CoordinatedGraphicsLayer
        calls methods of TiledBackingStore, which indirectly call createTile(),
        updateTile() and removeTile().

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::setVisibleContentRectTrajectoryVector):
        (WebCore::CoordinatedGraphicsLayer::setContentsScale):
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreHasPendingTileCreation):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::setNeedsVisibleRectAdjustment):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::notifyFlushRequired):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):

2012-12-12  Joaquim Rocha  <jrocha@igalia.com>

        [GTK] Cookies' storage path and policy are not set when the WebProcess is killed and relaunched
        https://bugs.webkit.org/show_bug.cgi?id=104370

        Reviewed by Carlos Garcia Campos.

        This issue happens on ports that use Soup and causes problems like not finding the stored cookies
        nor their policy when the WebProcess is relaunched. As an example of a problem caused by this,
        a previously logged in user will not be logged in again when the process is relaunched and the
        policy used is always the same one.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode cookies' persistent storage path,
        storage type and acceptance policy.
        (WebKit::WebProcessCreationParameters::decode): Decode cookies' persistent storage path,
        storage type and acceptance policy.
        * Shared/WebProcessCreationParameters.h: Create 3 variables to hold the values mentioned above.
        (WebProcessCreationParameters):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy): Call WebCookieManagerProxySoup::setCookieAcceptPolicy.
        * UIProcess/WebCookieManagerProxy.h: Declare new Soup's methods setCookieAcceptPolicy, cookieAcceptPolicy and
        cookiePersistentStorage as well as the variables m_cookieAcceptPolicy and m_cookiePersistentStorage.
        (WebCookieManagerProxy):
        * UIProcess/efl/WebContextEfl.cpp: Assign the parameters' cookiePersistentStoragePath and
        cookiePersistentStorageType with the respective values.
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/gtk/WebContextGtk.cpp: Assign the parameters' cookiePersistentStoragePath and
        cookiePersistentStorageType with the respective values.
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/soup/WebCookieManagerProxySoup.cpp:
        (WebKit::WebCookieManagerProxy::setCookiePersistentStorage): Assign the m_cookiePersistentStorage pair
        with the method's parameters.
        (WebKit):
        (WebKit::WebCookieManagerProxy::getCookiePersistentStorage): Implement this getter.
        * WebProcess/Cookies/WebCookieManager.h: Declare setCookiePersistentStorage.
        (WebCookieManager):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Set the cookies' persistent storage and policy
        using the WebCookieManager's methods.

2012-12-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Duplicated WebPageGroup initialization
        https://bugs.webkit.org/show_bug.cgi?id=103229

        Reviewed by Kenneth Rohde Christiansen.

        WebPageGroup does not need to be created in creating EwkView when the pageGroupRef is 0
        because the default WebPageGroup(m_defaultPageGroup) is created in WebContext constructor.

        As a side effect on the duplicated initialization, pageGroupID increases even when the EwkView
        is created with default context.

        * UIProcess/API/efl/ewk_view.cpp:
        (createEwkView):

2012-12-11  Sam Weinig  <sam@webkit.org>

        Add API to set the maximum number of processes allowed in a WKContext
        https://bugs.webkit.org/show_bug.cgi?id=104769

        Reviewed by Dan Bernstein.

        Switch from using NSUserDefaults to a WKContext API to set the maximum number of processes
        for a context.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetMaximumNumberOfProcesses):
        (WKContextGetMaximumNumberOfProcesses):
        * UIProcess/API/C/WKContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setMaximumNumberOfProcesses):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        (WebKit::WebContext::maximumNumberOfProcesses):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitialize):

2012-12-11  Kihong Kwon  <kihong.kwon@samsung.com>

        Vibration API: IDL type doesn't match implementation type
        https://bugs.webkit.org/show_bug.cgi?id=103899

        Reviewed by Kentaro Hara.

        According to WebIDL, "unsigned long" corresponds to "unsigned" in the platform.
        Therefore unsigned long need to be changed to unsigned for the Vibration API.
        - Change a parameter type of vibrate function from uint64_t to uint_32_t.

        * UIProcess/API/C/WKVibration.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/WebVibrationProvider.cpp:
        (WebKit::WebVibrationProvider::vibrate):
        * UIProcess/WebVibrationProvider.h:
        (WebVibrationProvider):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::vibrate):
        * UIProcess/WebVibrationProxy.h:
        (WebVibrationProxy):
        * UIProcess/WebVibrationProxy.messages.in:
        * UIProcess/efl/VibrationClientEfl.cpp:
        (VibrationClientEfl::vibrateCallback):
        * UIProcess/efl/VibrationClientEfl.h:
        (VibrationClientEfl):
        * WebProcess/WebCoreSupport/WebVibrationClient.cpp:
        (WebKit::WebVibrationClient::vibrate):
        * WebProcess/WebCoreSupport/WebVibrationClient.h:
        (WebVibrationClient):

2012-12-11  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12857870> [WK2 NetworkProcess] Cannot load HTTPS sites
        https://bugs.webkit.org/show_bug.cgi?id=104732

        Reviewed by Anders Carlsson.

        * Shared/BlockingResponseMap.h: (BlockingBoolResponseMap::waitForResponse):
        Fixed to make sense.

2012-12-11  Xianzhu Wang  <wangxianzhu@chromium.org>

        Add window.internals.mainThreadScrollReasonsAsText for testing slow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=104714

        Reviewed by Eric Seidel.

        Export symbol Page::mainThreadScrollingReasonsAsText().

        * win/WebKit2.def.in:

2012-12-11  Gwang Yoon Hwang  <ryumiel@company100.net>

        Coordinated Graphics: Rename LayerTreeCoordinator to CoordinatedLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=104641

        Reviewed by Noam Rosenthal.

        The name of LayerTreeCoordinator does not match LayerTreeHost.  This
        patch renames it to CoordinatedLayerTreeHost. And make a getter for
        CoordinatedLayerTreeHostProxy in QQuickWebPagePrivate to make a cleaner code.

        No new tests - just a refactoring.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * Platform/CoreIPC/MessageID.h:
        * Target.pri:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::layerTreeRenderer):
        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::paint):
        (QQuickWebPagePrivate::coordinatedLayerTreeHostProxy):
        (QQuickWebPage::updatePaintNode):
        (QQuickWebPagePrivate::updateSize):
        * UIProcess/API/qt/qquickwebpage_p_p.h:
        (WebKit):
        (QQuickWebPagePrivate):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::setSize):
        (QRawWebView::layerTreeRenderer):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp.
        (WebKit):
        (WebKit::CoordinatedLayerTreeHostProxy::CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::~CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::updateViewport):
        (WebKit::CoordinatedLayerTreeHostProxy::dispatchUpdate):
        (WebKit::CoordinatedLayerTreeHostProxy::createTileForLayer):
        (WebKit::CoordinatedLayerTreeHostProxy::updateTileForLayer):
        (WebKit::CoordinatedLayerTreeHostProxy::removeTileForLayer):
        (WebKit::CoordinatedLayerTreeHostProxy::createUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHostProxy::removeUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHostProxy::deleteCompositingLayer):
        (WebKit::CoordinatedLayerTreeHostProxy::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHostProxy::setCompositingLayerState):
        (WebKit::CoordinatedLayerTreeHostProxy::setCompositingLayerChildren):
        (WebKit::CoordinatedLayerTreeHostProxy::setCompositingLayerFilters):
        (WebKit::CoordinatedLayerTreeHostProxy::removeCustomFilterProgram):
        (WebKit::CoordinatedLayerTreeHostProxy::createCustomFilterProgram):
        (WebKit::CoordinatedLayerTreeHostProxy::didRenderFrame):
        (WebKit::CoordinatedLayerTreeHostProxy::createImageBacking):
        (WebKit::CoordinatedLayerTreeHostProxy::updateImageBacking):
        (WebKit::CoordinatedLayerTreeHostProxy::clearImageBackingContents):
        (WebKit::CoordinatedLayerTreeHostProxy::removeImageBacking):
        (WebKit::CoordinatedLayerTreeHostProxy::setContentsSize):
        (WebKit::CoordinatedLayerTreeHostProxy::setLayerAnimations):
        (WebKit::CoordinatedLayerTreeHostProxy::setAnimationsLocked):
        (WebKit::CoordinatedLayerTreeHostProxy::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHostProxy::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHostProxy::requestAnimationFrame):
        (WebKit::CoordinatedLayerTreeHostProxy::animationFrameReady):
        (WebKit::CoordinatedLayerTreeHostProxy::didChangeScrollPosition):
        (WebKit::CoordinatedLayerTreeHostProxy::createCanvas):
        (WebKit::CoordinatedLayerTreeHostProxy::syncCanvas):
        (WebKit::CoordinatedLayerTreeHostProxy::destroyCanvas):
        (WebKit::CoordinatedLayerTreeHostProxy::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHostProxy::setBackgroundColor):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h.
        (WebKit):
        (CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::layerTreeRenderer):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in: Renamed from Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in.
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::animationFrameReady):
        (WebKit::LayerTreeRenderer::updateViewport):
        (WebKit::LayerTreeRenderer::renderNextFrame):
        (WebKit::LayerTreeRenderer::purgeBackingStores):
        (WebKit::LayerTreeRenderer::detach):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit):
        (LayerTreeRenderer):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didReceiveCoordinatedLayerTreeHostProxyMessage):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit):
        (WebKit::DrawingAreaProxy::coordinatedLayerTreeHostProxy):
        (DrawingAreaProxy):
        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl):
        (WebKit::DrawingAreaProxyImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxyImpl::didReceiveCoordinatedLayerTreeHostProxyMessage):
        (WebKit::DrawingAreaProxyImpl::setVisibleContentsRect):
        * UIProcess/DrawingAreaProxyImpl.h:
        (WebKit):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveMessage):
        * UIProcess/efl/PageClientBase.cpp:
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setRendererActive):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp.
        (WebKit):
        (WebKit::CoordinatedLayerTreeHost::create):
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::setLayerFlushSchedulingEnabled):
        (WebKit::CoordinatedLayerTreeHost::scheduleLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::cancelPendingLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::setShouldNotifyAfterNextScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::invalidate):
        (WebKit::CoordinatedLayerTreeHost::setNonCompositedContentsNeedDisplay):
        (WebKit::CoordinatedLayerTreeHost::scrollNonCompositedContents):
        (WebKit::CoordinatedLayerTreeHost::forceRepaint):
        (WebKit::CoordinatedLayerTreeHost::forceRepaintAsync):
        (WebKit::CoordinatedLayerTreeHost::sizeDidChange):
        (WebKit::CoordinatedLayerTreeHost::didInstallPageOverlay):
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay):
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayNeedsDisplay):
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayOpacity):
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::initializeRootCompositingLayerIfNeeded):
        (WebKit::CoordinatedLayerTreeHost::syncLayerState):
        (WebKit::CoordinatedLayerTreeHost::syncLayerChildren):
        (WebKit::CoordinatedLayerTreeHost::createCanvas):
        (WebKit::CoordinatedLayerTreeHost::syncCanvas):
        (WebKit::CoordinatedLayerTreeHost::destroyCanvas):
        (WebKit::CoordinatedLayerTreeHost::syncLayerFilters):
        (WebKit::CoordinatedLayerTreeHost::checkCustomFilterProgramProxies):
        (WebKit::CoordinatedLayerTreeHost::removeCustomFilterProgramProxy):
        (WebKit::CoordinatedLayerTreeHost::disconnectCustomFilterPrograms):
        (WebKit::CoordinatedLayerTreeHost::detachLayer):
        (WebKit::updateOffsetFromViewportForSelf):
        (WebKit::updateOffsetFromViewportForLayer):
        (WebKit::CoordinatedLayerTreeHost::syncFixedLayers):
        (WebKit::CoordinatedLayerTreeHost::lockAnimations):
        (WebKit::CoordinatedLayerTreeHost::unlockAnimations):
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::syncDisplayState):
        (WebKit::CoordinatedLayerTreeHost::didPerformScheduledLayerFlush):
        (WebKit::CoordinatedLayerTreeHost::layerFlushTimerFired):
        (WebKit::CoordinatedLayerTreeHost::createPageOverlayLayer):
        (WebKit::CoordinatedLayerTreeHost::destroyPageOverlayLayer):
        (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::LayerTreeHost::supportsAcceleratedCompositing):
        (WebKit::CoordinatedLayerTreeHost::createTile):
        (WebKit::CoordinatedLayerTreeHost::updateTile):
        (WebKit::CoordinatedLayerTreeHost::removeTile):
        (WebKit::CoordinatedLayerTreeHost::createUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHost::removeUpdateAtlas):
        (WebKit::CoordinatedLayerTreeHost::visibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::setLayerAnimations):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::graphicsLayerFactory):
        (WebKit::CoordinatedLayerTreeHost::scheduleAnimation):
        (WebKit::CoordinatedLayerTreeHost::animationFrameReady):
        (WebKit::CoordinatedLayerTreeHost::renderNextFrame):
        (WebKit::CoordinatedLayerTreeHost::layerTreeTileUpdatesAllowed):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHost::beginContentUpdate):
        (WebKit::CoordinatedLayerTreeHost::scheduleReleaseInactiveAtlases):
        (WebKit::CoordinatedLayerTreeHost::releaseInactiveAtlasesTimerFired):
        (WebKit::CoordinatedLayerTreeHost::setBackgroundColor):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h.
        (WebKit):
        (CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::layerTreeContext):
        (WebKit::CoordinatedLayerTreeHost::pageOverlayShouldApplyFadeWhenPainting):
        (WebKit::CoordinatedLayerTreeHost::pauseRendering):
        (WebKit::CoordinatedLayerTreeHost::resumeRendering):
        (WebKit::CoordinatedLayerTreeHost::deviceScaleFactorDidChange):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.messages.in: Renamed from Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.messages.in.
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didReceiveCoordinatedLayerTreeHostMessage):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.cpp:
        (WebKit::LayerTreeHost::create):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        (WebKit::WebPage::didReceiveMessage):

2012-12-11  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12857080> Per-Tab WebProcess: Blue lines between menu tabs at apple.com
        https://bugs.webkit.org/show_bug.cgi?id=104709

        Reviewed by Sam Weinig.

        Data URLs were broken. Removing a no longer valid optimization for now.

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

2012-12-11  Michael Pruett  <michael@68k.org>

        [JSC] Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=104423

        Reviewed by Oliver Hunt.

        Add tests for serialization and deserialization mechanisms of
        the JSC implementation of SerializedScriptValue. Similar tests
        already exist for the V8 implementation.

        * win/WebKit2.def.in:

2012-12-11  Jon Lee  <jonlee@apple.com>

        Initialize new web processes with list of auto-start origins for plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=103219
        <rdar://problem/12747219>

        Reviewed by Anders Carlsson.

        Serialize the set of hashes into a vector as a parameter in web process creation.

        * Shared/WebProcessCreationParameters.h: Add a parameter for the origin hashes.

        * Shared/WebProcessCreationParameters.cpp: Encode/decode that parameter.
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::autoStartOriginsCopy): Return a vector copy with contents from the
        hash set.
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        (PlugInAutoStartProvider):

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess): Populate the parameter with the contents of the set.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Add the items in the vector to the web process' copy of the set.

2012-12-11  Andreas Kling  <akling@apple.com>

        CoreIPC: ArgumentEncoder should have an inline buffer.
        <http://webkit.org/b/104622>

        Reviewed by Anders Carlsson.

        Add a 4K inline buffer to CoreIPC::ArgumentEncoder to avoid malloc/free churn.
        It was dominating the transient allocations graph in Instruments.

        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::grow):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (CoreIPC::ArgumentEncoder::buffer):
        (ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::usesInlineBuffer):

2012-12-11  Mike West  <mkwst@chromium.org>

        Web Inspector: ConsoleTypes should not expose MessageType - it should be private to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=66371

        Reviewed by Pavel Feldman.

        Drops WebCore::MessageLevel from the addMessageToConsole method.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::addMessageToConsole):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2012-12-11  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] Increase the timeout of the API unit tests
        https://bugs.webkit.org/show_bug.cgi?id=104666

        Reviewed by Kenneth Rohde Christiansen.

        Palliative fix until we find out why the tests are taking so long.

        * PlatformEfl.cmake:

2012-12-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Qt][EFL][WK2] Resizing the window doesn't always result in right content position
        https://bugs.webkit.org/show_bug.cgi?id=104416

        Reviewed by Simon Hausmann.

        Make sure the client is notified about position and scale changed done by us.
        Rename the m_*IsLocked to m_pending*Change as that makes the code more obvious.

        Patch verified with both Qt and EFL.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::didRenderFrame): Notify client and pixel align.
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        (WebKit::PageViewportController::applyScaleAfterRenderingContents):
        (WebKit::PageViewportController::applyPositionAfterRenderingContents):
        * UIProcess/PageViewportController.h:
        (PageViewportController):

2012-12-11  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] Use unsigned integers for UpdateAtlas IDs
        https://bugs.webkit.org/show_bug.cgi?id=104654

        Reviewed by Kenneth Rohde Christiansen.

        UpdateAtlas currently uses *signed* integer type for its identifier.
        Due to the way we generate those IDs, it is safer to use *unsigned*
        integers. This is because the generated ID will overflow at some
        point and the C and C++ language standards say that overflow of a
        signed value is undefined behaviour.

        This patch switches to unsigned integer type for UpdateAtlas IDs
        since unsigned integers are guaranteed to wrap around on overflow.

        * Shared/SurfaceUpdateInfo.h:
        (SurfaceUpdateInfo):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createUpdateAtlas):
        (WebKit::LayerTreeCoordinatorProxy::removeUpdateAtlas):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTileClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createUpdateAtlas):
        (WebKit::LayerTreeCoordinator::removeUpdateAtlas):
        (WebKit::LayerTreeCoordinator::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::~UpdateAtlas):
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h:
        (UpdateAtlasClient):
        (UpdateAtlas):

2012-12-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Create a ewk view object with new context for API tests
        https://bugs.webkit.org/show_bug.cgi?id=103692

        Reviewed by Gyuyoung Kim. 

        Bug 103229 fixes the issue which PageGroupID increased even though
        the EwkView was created with default context. If the Bug 103229 is
        resolved, the EwkViews with same context will have same setting preferences.

        Currently, WebKit2/EFL API test is creating the ewk view object
        with the default context so the setting values set previously may
        influence the following tests. So this patch created a ewk view object
        with a new context instead of default one.

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

2012-12-10  Dan Winship  <danw@gnome.org>

        [Soup] Fix spelling of "initiating" in API.

        Reviewed by Martin Robinson.

        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::send):

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

        [WK2] Add a user default to limit the number of web processes
        https://bugs.webkit.org/show_bug.cgi?id=104606

        Reviewed by Sam Weinig.

        When the limit is reached, we'll reuse an existing process with fewest pages.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize m_webProcessCountLimit.
        (WebKit::WebContext::platformInitialize): Added a hook for reading the preference,
        empty implementation on most platforms.
        (WebKit::WebContext::createNewWebProcess): Changed to return a raw pointer. The new
        process is put into a vector anyway, so there is no ownership transfer.
        (WebKit::WebContext::warmInitialProcess): Don't create a new process if that would
        exceed the limit.
        (WebKit::WebContext::createNewWebProcessRespectingProcessCountLimit): Added a new
        function that wither creates a new process, or picks an existing one.
        (WebKit::WebContext::createWebPage): Call the above new function instead of
        unconditionally creating a process.

        * UIProcess/WebContext.h: createNewWebProcess is no private. All clients should
        respect the process count limit.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::reattachToWebProcess):
        Respect the process count limit.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded): Register the new default.
        (WebKit::WebContext::platformInitialize): Read the default into a WebContext
        member variable.
        (WebKit::WebContext::platformInitializeWebProcess): Moved registerUserDefaultsIfNeeded()
        from here to platformInitialize(), as that's a better place for it. Also added a
        FIXME for an unrelated issue.

2012-12-10  Jon Lee  <jonlee@apple.com>

        Build fix.

        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::WebPlugInClient): Remove unneeded m_page variable.
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        (WebPlugInClient):

2012-12-10  Jon Lee  <jonlee@apple.com>

        Keep track of plug-in snapshots clicked by user
        https://bugs.webkit.org/show_bug.cgi?id=103206
        <rdar://problem/12746483>

        Reviewed by Anders Carlsson.

        Create a new provider class for the web context that maintains a mapping of the plug-in origins
        allowed to auto-start for a specific page origin.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Create and set WebPlugInClient.

        Implement WebCore::PlugInClient.
        * WebProcess/WebCoreSupport/WebPlugInClient.cpp: Added.
        (WebKit::WebPlugInClient::WebPlugInClient):
        (WebKit::WebPlugInClient::~WebPlugInClient):
        (WebKit::WebPlugInClient::pageDestroyed):
        (WebKit::WebPlugInClient::isAutoStartOrigin): Forward to WebProcess.
        (WebKit::WebPlugInClient::addAutoStartOrigin): Forward to WebProcess.
        * WebProcess/WebCoreSupport/WebPlugInClient.h: Added.

        * WebProcess/WebProcess.cpp: Maintains a copy of the hash set.
        (WebKit::WebProcess::isPlugInAutoStartOrigin): Look for the hash in the set.
        (WebKit::WebProcess::addPlugInAutoStartOrigin): Tell the UI process to add the hash for the page.
        (WebKit::WebProcess::didAddPlugInAutoStartOrigin): Add the hash to the cached set.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add DidAddPlugInAutoStartOrigin.

        Add the auto-start provider.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Initialize the provider.
        (WebKit::WebContext::addPlugInAutoStartOriginHash): Forward to the provider.
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in: Add AddPlugInAutoStartOriginHash.

        The provider class maintains a map of page domains to hashes, and a set of all the hashes.
        The latter will be used to initialize new web processes without having to crawl through the
        whole map.
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp: Added.
        (WebKit::PlugInAutoStartProvider::PlugInAutoStartProvider):
        (WebKit::PlugInAutoStartProvider::addAutoStartOrigin): Add the origin to the map and set. Tell
        all processes to add the origin to their local copies.
        * UIProcess/Plugins/PlugInAutoStartProvider.h: Added.

        Add PlugInAutoStartProvider and WebPlugInClient.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-12-10  Anders Carlsson  <andersca@apple.com>

        Add WKPageSetInvalidMessageFunction stub
        https://bugs.webkit.org/show_bug.cgi?id=104614
        <rdar://problem/12841671>

        Reviewed by Mark Rowe.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetInvalidMessageFunction):
        * UIProcess/API/C/WKPagePrivate.h:

2012-12-09  Antti Koivisto  <antti@apple.com>

        Factor node traversal into standalone functions
        https://bugs.webkit.org/show_bug.cgi?id=104507

        Reviewed by Eric Seidel.

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

2012-12-10  Eduardo Lima Mitev  <elima@igalia.com>

        [GTK] Expose HitTestResult::scrollbar() condition in API
        https://bugs.webkit.org/show_bug.cgi?id=104369

        Reviewed by Carlos Garcia Campos.

        This patch populates WebCore::HitTestResult::scrollbar() condition
        in WebKitHitTestResult public API, and includes a corresponding unit
        test.

        * Shared/WebHitTestResult.cpp: Adds new isScrollbar member to
        encoding and decoding methods to carry the scrollbar condition
        from Web process to UI process.
        (WebKit::WebHitTestResult::Data::encode):
        (WebKit::WebHitTestResult::Data::decode):
        * Shared/WebHitTestResult.h:
        (Data): Adds new bool member isScrollbar.
        (WebKit::WebHitTestResult::Data::Data): Initializes isScrollbar from
        WebCore::HitTestResult::scrollbar().
        (WebKit::WebHitTestResult::isScrollbar): Method that returns value
        of isScrollbar member.
        (WebHitTestResult):
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkitHitTestResultCreate): Adds scrollbar condition to context upon
        initialization.
        (webkitHitTestResultCompare): Adds comparison of scrollbar condition.
        (webkit_hit_test_result_context_is_scrollbar): Public accessor for
        scrollbar presence in context.
        * UIProcess/API/gtk/WebKitHitTestResult.h: Adds new flag
        WEBKIT_HIT_TEST_RESULT_CONTEXT_SCROLLBAR to
        WebKitHitTestResultContext enum.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Adds new API symbol
        to the corresponding documentation sections.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewMouseTarget): Updates mouse-target
        test to include assertions for hitting scrollbar condition, and
        an new HTML to privide a positive case.

2012-12-10  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Remove CSS3_BACKGROUND feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=104539

        Reviewed by Antonio Gomes.

        As discussed on webkit-dev it is not needed to keep this feature flag 
        as support for <position> type is a small feature that is already 
        implemented by three other UAs. It was useful while landing this 
        feature as partial bits were landed one after one.

        * Configurations/FeatureDefines.xcconfig:

2012-12-10  Alberto Garcia  <agarcia@igalia.com>

        WebKitWebViewBase produces a warning if compiled with gcc
        https://bugs.webkit.org/show_bug.cgi?id=104561

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.h:
        since this file can be included from C code, use void to
        explicitly specify that webkit_web_view_base_get_type() doesn't
        have parameters. Otherwise we get "warning: function declaration
        isn't a prototype" with -Wstrict-prototypes.

2012-12-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: remove unneeded 'treatAsInitialValue' parameter from PageViewportControllerClient::setContentsScale
        https://bugs.webkit.org/show_bug.cgi?id=104544

        Reviewed by Kenneth Rohde Christiansen.

        Removed 'treatAsInitialValue' parameter from PageViewportControllerClient::setContentsScale()
        as it was not used by anyone.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didRenderFrame):
        * UIProcess/PageViewportControllerClient.h:
        (PageViewportControllerClient):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (PageViewportControllerClientEfl):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::setContentsScale):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-12-10  Zoltan Nyul  <zoltan.nyul@intel.com>

        Implement testRunner.setViewModeMediaFeature() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=103886

        Reviewed by Kenneth Rohde Christiansen.

        Add support for TestRunner::setViewModeMediaFeature().
        This functionality is needed by the following LayoutTests:
        fast/media/media-query-list-02.html
        fast/media/media-query-list-03.html
        fast/media/media-query-list-04.html
        fast/media/media-query-list-05.html
        fast/media/media-query-list-06.html
        fast/media/media-query-list-07.html
        fast/media/view-mode-media-feature.html

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetViewMode):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setViewMode):
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2012-12-10  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix QtWebProcess discovery on Windows
        https://bugs.webkit.org/show_bug.cgi?id=104552

        Reviewed by Jocelyn Turcotte.

        Make sure to look for QtWebProcess.exe on Windows instead of QtWebProcess.

        * Shared/qt/ProcessExecutablePathQt.cpp:
        (WebKit::executablePath):

2012-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Bring Harfbuzz-ng support to Gtk
        https://bugs.webkit.org/show_bug.cgi?id=92098

        Reviewed by Gustavo Noronha Silva.

        Add a HarfBuzz dependency.

        * GNUmakefile.am: Add FreeType/HarfBuzz CFLAGS/LIBS to the libraries.

2012-12-10  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Use QLibraryInfo::LibraryExecutablesPath unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=104541

        Reviewed by Jocelyn Turcotte.

        We now depend on a Qt 5 version that is guaranteed to have this API, so we
        can remove the configure checks for it.

        * PluginProcess.pro:
        * Shared/qt/ProcessExecutablePathQt.cpp:
        (WebKit::executablePath):
        * WebProcess.pro:

2012-12-10  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build without QtQuick 2

        Unreviewed trivial build fix.

        This function is defined in QtWebContext, which is only used when QtQuick2 is available.

        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInvalidateContext):

2012-12-10  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove the dependency of ShareableSurface from Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=100819

        Reviewed by Kenneth Rohde Christiansen.

        It is a follow-up patch of r137117.

        There are two changes
        1. Add a const qualifier to supportsAlpha().
        2. Use << instead of encode() when using ArgumentEncoder.

        * Shared/CoordinatedGraphics/CoordinatedSurface.h:
        (WebKit::CoordinatedSurface::supportsAlpha):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::Handle::encode):
        (WebKit::WebCoordinatedSurface::copyToTexture):

2012-12-10  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove the dependency of ShareableSurface from Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=100819

        Reviewed by Kenneth Rohde Christiansen.

        WebCoordinatedSurface::copyToTexture should return early if the backend
        is GraphicsSurface.

        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp:
        (WebKit::WebCoordinatedSurface::copyToTexture):

2012-12-10  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Add CoordinatedSurface to remove the dependency of ShareableSurface from Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=100819

        Reviewed by Noam Rosenthal.

        Internal Review by Gwang Yoon Hwang and Jae Hyun Park.

        It is a preparation patch for Threaded Coordinated Graphics on WK1.

        Create a CoordinatedSurface class that can be the base class both for
        the current IPC-based ShareableSurface, renamed here to
        WebCoordinatedSurface, and to a future thread-based surface
        implementation.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedSurface.h: Added.
        (WebCore):
        (WebKit):
        (CoordinatedSurface):
        (WebKit::CoordinatedSurface::~CoordinatedSurface):
        (WebKit::CoordinatedSurface::supportsAlpha):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp: Renamed from Source/WebKit2/Shared/ShareableSurface.cpp.
          Extends CoordinatedSurface.
        (WebKit):
        (WebKit::WebCoordinatedSurface::Handle::Handle):
        (WebKit::WebCoordinatedSurface::Handle::encode):
        (WebKit::WebCoordinatedSurface::Handle::decode):
        (WebKit::CoordinatedSurface::create):
        (WebKit::WebCoordinatedSurface::create):
        (WebKit::WebCoordinatedSurface::createWithSurface):
        (WebKit::WebCoordinatedSurface::createGraphicsContext):
        (WebKit::WebCoordinatedSurface::WebCoordinatedSurface):
        (WebKit::WebCoordinatedSurface::~WebCoordinatedSurface):
        (WebKit::WebCoordinatedSurface::createHandle):
        (WebKit::WebCoordinatedSurface::copyToTexture):
        * Shared/CoordinatedGraphics/WebCoordinatedSurface.h: Renamed from Source/WebKit2/Shared/ShareableSurface.h.
        (WebCore):
        (WebKit):
        (WebCoordinatedSurface):
        (Handle):
        (WebKit::WebCoordinatedSurface::Handle::graphicsSurfaceToken):
        (WebKit::WebCoordinatedSurface::isBackedByGraphicsSurface):
        * Target.pri:
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):
        (WebKit::CoordinatedBackingStoreTile::setBackBuffer):
        (WebKit::CoordinatedBackingStore::updateTile):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (WebKit):
        (CoordinatedBackingStoreTile):
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createUpdateAtlas):
        (WebKit::LayerTreeCoordinatorProxy::updateImageBacking):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::updateImageBacking):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (TileUpdate):
        (WebKit::LayerTreeRenderer::TileUpdate::TileUpdate):
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:
        (WebKit::CoordinatedImageBacking::update):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:
        (Coordinator):
        (CoordinatedImageBacking):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::updateImageBacking):
        (WebKit::LayerTreeCoordinator::createUpdateAtlas):
        (WebKit::LayerTreeCoordinator::beginContentUpdate):
        (WebKit::LayerTreeCoordinator::releaseInactiveAtlasesTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h:
        (UpdateAtlasClient):
        (UpdateAtlas):
        (WebKit::UpdateAtlas::supportsAlpha):

2012-12-09  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Reorder messages to LayerTreeCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=103843

        Reviewed by Noam Rosenthal.

        Send SetRootCompositingLayer message to the UI process before
        flushing compositing states of layer tree.

        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::setRootLayerID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::initializeRootCompositingLayerIfNeeded):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-12-09  Jon Lee  <jonlee@apple.com>

        [WK2] Move button image to injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=104107
        <rdar://problem/12813842>

        Reviewed by Simon Fraser.

        Rely on the injected bundle to create the image used for the button in snapshotted plug-ins.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::plugInStartLabelImage): Forward the call to the injected bundle UI client.
        * WebProcess/WebCoreSupport/WebChromeClient.h: Implement plugInStartLabelImage().

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::plugInStartLabelImage): Convert the WebCore enums to WK API enums.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:

        * WebProcess/InjectedBundle/API/c/WKBundlePage.h: Expose a new callback to generate the button image.

        * Shared/API/c/cg/WKImageCG.cpp:
        (WKImageCreateFromCGImage): Refactor to use GraphicsContext methods so that the image is flipped appropriately.

2012-12-09  Kangil Han  <kangil.han@samsung.com>

        Fix unused parameter compile warnings
        https://bugs.webkit.org/show_bug.cgi?id=104463

        Reviewed by Kentaro Hara.

        Remove compile warning messages by omitting parameter name.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createCanvas):

2012-12-08  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL][WK2] Add Remote Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=98705

        Reviewed by Gyuyoung Kim.

        Add Remote Web Inspector to EFL port.
        The WebInspectorSever will be started during WebKit context initialization.
        The IP address and port number for the server can be set in WEBKIT_INSPECTOR_SERVER.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * UIProcess/InspectorServer/WebInspectorServer.h:
        (WebInspectorServer):
        * UIProcess/InspectorServer/WebSocketServer.h:
        (WebSocketServer):
        * UIProcess/InspectorServer/efl/WebInspectorServerEfl.cpp: Added.
        (WebKit):
        (WebKit::inspectorResourcePath):
        (WebKit::WebInspectorServer::platformResourceForPath):
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
        (WebKit::connectionCallback):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::initializeInspectorServer):
        (WebKit):
        (WebKit::WebContext::platformInitializeWebProcess):
        * config.h:

2012-12-08  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Make building the WebKit2 GIR file conditional on building the WebKit2 library.

        * GNUmakefile.am:

2012-12-08  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove unused headers
        https://bugs.webkit.org/show_bug.cgi?id=104428

        Reviewed by Kentaro Hara.

        Header inclusion cleanup.
        Remove <WebCore/NotImplement.h>.

        * Platform/qt/WorkQueueQt.cpp:
        * Platform/win/WorkQueueWin.cpp:
        * Shared/qt/ShareableBitmapQt.cpp:
        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        * UIProcess/win/TextCheckerWin.cpp:
        * UIProcess/win/WebContextMenuProxyWin.cpp:
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:

2012-12-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Remove unused source file from PlatformEfl.cmake
        https://bugs.webkit.org/show_bug.cgi?id=104430

        Reviewed by Kentaro Hara.

        Shared/API/c/gtk/WKGraphicsContextGtk.cpp is not used for building WebKit2/EFL.

        * PlatformEfl.cmake:

2012-12-07  Jer Noble  <jer.noble@apple.com>

        Allow the WebProcess access to the CoreMedia preferences file.
        https://bugs.webkit.org/show_bug.cgi?id=104320
        <rdar://problem/10904519>

        Reviewed by Alexey Proskuryakov.

        Allow read access to ~/Library/Preferences/com.apple.coremedia.plist and com.apple.avfoundation.plist
        by the WebProcess. The QuickTime.plugin uses CoreMedia for playback, so allow PluginProcess
        to access those preferences as well.

        * PluginProcess/mac/com.apple.WebKit.PluginProcess.sb.in:
        * WebProcess/com.apple.WebProcess.sb.in:

2012-12-07  Tim Horton  <timothy_horton@apple.com>

        [wk2] WebProcessServiceForWebKitDevelopment should forward stdout and stderr to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=104418

        Reviewed by Simon Fraser.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToWebProcessServiceForWebKitDevelopment): Send stdout and stderr file descriptors to the WebProcess.
        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm:
        (WebProcessServiceForWebKitDevelopmentEventHandler): Replace the WebProcess' stdout and stderr with those from the UIProcess.

2012-12-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136993.
        http://trac.webkit.org/changeset/136993
        https://bugs.webkit.org/show_bug.cgi?id=104415

        This patch breaks the mac build (Requested by cabanier on
        #webkit).

        * win/WebKit2.def.in:

2012-12-07  Alexey Proskuryakov  <ap@apple.com>

        There is no need to change cached resource storage policy through ResourceHandleClient
        https://bugs.webkit.org/show_bug.cgi?id=104413

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        Deleted overrides of the removed willCacheResponse.

2012-12-07  Alexey Proskuryakov  <ap@apple.com>

        Network process should use a correct storage session in private browsing mode
        <rdar://problem/12838490>
        https://bugs.webkit.org/show_bug.cgi?id=104401

        Reviewed by Brady Eidson.

        Notify NetworkProcess when it needs to create or destroy a private browsing session,
        and add a NetworkResourceLoadParameters member telling if the particular resource
        should be requested using it.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        (WebKit::NetworkConnectionToWebProcess::getHostnamesWithCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookiesForHostname):
        (WebKit::NetworkConnectionToWebProcess::deleteAllCookies):
        Added another dummy argument to dummy networking context.

        * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess):
        Ensure private browsing session if it's needed due to a persistent preference, not
        an API call at runtime (which is handled below as ensure/destroy).

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::start): Pass private browsing state to RemoteNetworkingContext
        used for loading.
        (WebKit::NetworkResourceLoader::willCacheResponse): Added an implemntation that
        matches WebCore, but may be not needed.

        * NetworkProcess/mac/RemoteNetworkingContext.h: (WebKit::RemoteNetworkingContext::create):
        Store privateBrowsingEnabled flag.

        * NetworkProcess/mac/RemoteNetworkingContext.mm: (WebKit::RemoteNetworkingContext::storageSession):
        Return a private session when it's in use.

        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        Pass privateBrowsingEnabled flag to the new process.

        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::inPrivateBrowsingMode):
        Pass inPrivateBrowsingMode flag for the request.

        * UIProcess/Network/NetworkProcessManager.h: (WebKit::NetworkProcessManager::process):
        Exposed, so that we can send messages without going through NetworkProcessManager.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::usesNetworkProcess):
        (WebKit::anyContextUsesNetworkProcess):
        (WebKit::WebContext::willStartUsingPrivateBrowsing):
        (WebKit::WebContext::willStopUsingPrivateBrowsing):
        Notify NetworkProcess when entering or exiting private browsing.

        * UIProcess/WebContext.h: Exposed usesNetworkProcess() for the new static function
        anyContextUsesNetworkProcess to use.

        * WebProcess/Network/WebResourceLoadScheduler.cpp: (WebKit::WebResourceLoadScheduler::scheduleLoad):
        Put current private browsing state over in NetworkResourceLoadParameters.

2012-12-07  Helder Correia  <helder.correia@nokia.com>

        [CoordGfx] Variable name starts with upper case character
        https://bugs.webkit.org/show_bug.cgi?id=104327

        Reviewed by Noam Rosenthal.

        Just fixing a typo.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):

2012-12-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2][EFL][Qt] Pixel alignment is wrong in some cases involving a non-integral content scale
        https://webkit.org/b/103519

        Reviewed by Noam Rosenthal.

        This patch removes the blurriness by pixel aligning the layers. It
        does not fully remove the shaking, only minimizes it.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::transformFromScene):
        (EwkViewImpl::displayTimerFired):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::pagePosition):

            As the pixel alignment of the main layer is moved to the
            PageViewportController, rename discretePagePosition to just
            pagePosition. It now returns a FloatPoint but the positions
            should still be discrete.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::setVisibleContentsRect):
        (WebKit::LayerTreeCoordinatorProxy::didChangeScrollPosition):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::didChangeScrollPosition):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::visibleContentsRect):
        (WebKit::LayerTreeCoordinator::setVisibleContentsRect):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.messages.in:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebCore):
        (WebKit::LayerTreeHost::setVisibleContentsRect):

            Change the internal scroll position/visible contents rect
            to be represented as float positions. The rounding to integer
            values not happens just before setFixesVisibleContentsRect.
            This makes it possible to know our exact positions and
            calculate proper scroll deltas.

        (WebKit::LayerTreeRenderer::setLayerState):

            Group anchor point, position and size together.

        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::boundContentsPosition):
        (WebKit::PageViewportController::boundContentsPositionAtScale):
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::didChangeContentsVisibility):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::visibleContentsSize):
        (WebKit::PageViewportController::applyPositionAfterRenderingContents):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::focusEditableArea):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::nearestValidVisibleContentsRect):

            Some renaming as what was called viewportPos was actually the
            contents position. Rename clampViewportToContents to
            boundContentsPosition and remove scale argument which is has
            direct access to.

            Make the boundContentsPosition allow one extra pixel in each
            orientation to allow for pixel alignment of fixed position layers

        (WebKit::isIntegral):
        (WebKit):
        (WebKit::PageViewportController::pixelAlignedFloatPoint):

            Introduce way to pixel align the main contents layer. Only in
            use for EFL so far.

        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::contentPosition):
        (PageViewportControllerClientEfl):

            Store the contents position as a FloatPoint.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::isIntegral):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::computePositionRelativeToBase):
        (WebCore::CoordinatedGraphicsLayer::computePixelAlignment):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):

            Pixel align layers when the effective scale is not an integer
            value. This code is based on code from GraphicsLayerCA.

2012-12-07  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r136770): Assertion failure in sendMessage() whenever WebProcess crashes
        https://bugs.webkit.org/show_bug.cgi?id=104392

        Reviewed by Anders Carlsson.

        * Shared/ChildProcessProxy.cpp: (WebKit::ChildProcessProxy::sendMessage): Changed
        back to using m_conection where it can be null.

2012-12-07  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] Add ewk_settings APIs for text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=103342

        Reviewed by Kenneth Rohde Christiansen.

        Add ewk_settings_text_autosizing_enabled_get / set() functions.
        Text autosizing is disabled by default.

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

2012-12-06  Rick Byers  <rbyers@chromium.org>

        CSS cursor property should support webkit-image-set
        https://bugs.webkit.org/show_bug.cgi?id=99493

        Reviewed by Beth Dakin.

        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2012-12-06  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics: Rename WebLayerTreeInfo to CoordinatedLayerInfo
        https://bugs.webkit.org/show_bug.cgi?id=103983

        Reviewed by Noam Rosenthal.

        This patch refactors WebLayerTreeInfo in 2 areas.

        1. WebLayerTreeInfo is only used by Coordinated Graphics. So, the file
        should be located in WebKit2/Shared/CoordinatedGraphics instead of
        WebKit2/Shared.

        2. The name of WebLayerTreeInfo is incorrect. Currently,
        WebLayerTreeInfo only has WebLayerInfo struct. Also, it is hard to know
        what WebLayer is since we don't use that name anymore. More appropriate
        name for WebLayerInfo would be CoordinatedLayerInfo.

        No new test, because no behavioral change.

        * CMakeLists.txt:
        * Scripts/webkit2/messages.py:
        (headers_for_type):
        * Shared/CoordinatedGraphics/CoordinatedLayerInfo.cpp: Renamed from Source/WebKit2/Shared/WebLayerTreeInfo.cpp.
        (WebKit):
        (WebKit::CoordinatedLayerInfo::encode):
        (WebKit::CoordinatedLayerInfo::decode):
        * Shared/CoordinatedGraphics/CoordinatedLayerInfo.h: Renamed from Source/WebKit2/Shared/WebLayerTreeInfo.h.
        (WebKit):
        (WebKit::CoordinatedLayerInfo::CoordinatedLayerInfo):
        (CoordinatedLayerInfo):
        * Shared/LayerTreeContext.h:
        (LayerTreeContext):
        * Shared/efl/LayerTreeContextEfl.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * Shared/qt/LayerTreeContextQt.cpp:
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * Target.pri:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::removeTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::deleteCompositingLayer):
        (WebKit::LayerTreeCoordinatorProxy::setRootCompositingLayer):
        (WebKit::LayerTreeCoordinatorProxy::setCompositingLayerState):
        (WebKit::LayerTreeCoordinatorProxy::setCompositingLayerChildren):
        (WebKit::LayerTreeCoordinatorProxy::setCompositingLayerFilters):
        (WebKit::LayerTreeCoordinatorProxy::setLayerAnimations):
        (WebKit::LayerTreeCoordinatorProxy::createCanvas):
        (WebKit::LayerTreeCoordinatorProxy::syncCanvas):
        (WebKit::LayerTreeCoordinatorProxy::destroyCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (WebKit):
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::createLayer):
        (WebKit::LayerTreeRenderer::createCanvas):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::destroyCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::deleteLayer):
        (WebKit::LayerTreeRenderer::ensureLayer):
        (WebKit::LayerTreeRenderer::setRootLayerID):
        (WebKit::LayerTreeRenderer::createTile):
        (WebKit::LayerTreeRenderer::removeTile):
        (WebKit::LayerTreeRenderer::updateTile):
        (WebKit::LayerTreeRenderer::ensureRootLayer):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        (WebKit::LayerTreeRenderer::setLayerAnimations):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit):
        (LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::layerByID):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::layerByIDMap):
        (WebCore::toCoordinatedLayerID):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::id):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::syncLayerState):
        (WebKit::LayerTreeCoordinator::syncLayerChildren):
        (WebKit::LayerTreeCoordinator::createCanvas):
        (WebKit::LayerTreeCoordinator::syncCanvas):
        (WebKit::LayerTreeCoordinator::destroyCanvas):
        (WebKit::LayerTreeCoordinator::syncLayerFilters):
        (WebKit::LayerTreeCoordinator::createTile):
        (WebKit::LayerTreeCoordinator::updateTile):
        (WebKit::LayerTreeCoordinator::removeTile):
        (WebKit::LayerTreeCoordinator::setLayerAnimations):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136900.
        http://trac.webkit.org/changeset/136900
        https://bugs.webkit.org/show_bug.cgi?id=104318

        Unreviewed build for Windows port. (Requested by rfong on
        #webkit).

        * win/WebKit2.def.in:

2012-12-06  Jon Lee  <jonlee@apple.com>

        Retry snapshots if they are too empty
        https://bugs.webkit.org/show_bug.cgi?id=104174
        <rdar://problem/12820146>

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PluginView.h: Add a new variable that keeps track of the number of times we've
        retried to come up with a snapshot.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView): Initialize the count to 0.
        (WebKit::isAlmostSolidColor): Figure out if the image is almost a solid color by overlaying
        a grid of dots, and calculate the differences among them. If the average color difference is greater than
        a threshold, we consider it to have meaningful content. For now we expect a minimum size and a specific
        bitmap image format, otherwise we return early.
        (WebKit::PluginView::pluginSnapshotTimerFired): If we have a snapshot image to look at, and if it is
        evaluated to be too empty, then try again.

2012-12-06  Tony Chang  <tony@chromium.org>

        Unreviewed, Apple Win Debug build fix.

        * win/WebKit2.def.in: Add 2 symbols that are needed by the debug build.

2012-12-06  Alexey Proskuryakov  <ap@apple.com>

        Track private browsing session in network process
        https://bugs.webkit.org/show_bug.cgi?id=104281

        Reviewed by Jessie Berlin.

        Added ensure/destroy messages that match what's done in WebProcess. Also similarly,
        ensuring a private session may happen on demand if network process has been restarted
        after a crash, or if private browsing is enabled via a persistent preference.

        Eventually, we should find a way to share code between WebFrameNetworkingContext
        and RemoteNetworkingContext.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        (WebKit::NetworkProcess::destroyPrivateBrowsingSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/mac/RemoteNetworkingContext.h:
        (RemoteNetworkingContext):
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::privateBrowsingStorageSessionIdentifierBase):
        (WebKit::RemoteNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase):
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::RemoteNetworkingContext::destroyPrivateBrowsingSession):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (NetworkProcessCreationParameters):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::platformInitializeNetworkProcess):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2012-12-06  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Remove ENABLE_GLIB_SUPPORT CMake variable
        https://bugs.webkit.org/show_bug.cgi?id=104278

        Reviewed by Brent Fulgham.

        The guards are not required as it is always set for EFL.

        * PlatformEfl.cmake:
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-12-06  Tony Chang  <tony@chromium.org>

        REGRESSION(r135082): Restore the ability to insert author level style sheets from script
        https://bugs.webkit.org/show_bug.cgi?id=104042

        Reviewed by Antti Koivisto.

        Update exports for Internals.cpp.

        * win/WebKit2.def.in:

2012-12-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix QWebKitTest's notification of device pixel ratio change
        https://bugs.webkit.org/show_bug.cgi?id=104269

        Unreviewed, trivialy fixing last minute change.

        Move signal emission to the correct place.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):

2012-12-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix QWebKitTest's notification of device pixel ratio change
        https://bugs.webkit.org/show_bug.cgi?id=104269

        Reviewed by Kenneth Rohde Christiansen.

        Since the ViewportInfoItem of MiniBrowser is created before the
        WebView finishes construction, thus before the viewport controller
        has been instantiated, the shown device pixel ratio was incorrect.
        Additionally QWebKitTest's notification signal was also not emitted
        when the value changed.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136788.
        http://trac.webkit.org/changeset/136788
        https://bugs.webkit.org/show_bug.cgi?id=104260

        Asserts on EFL WebKit2 Debug bot (Requested by yael on
        #webkit).

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::setRootLayerID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r136795.
        http://trac.webkit.org/changeset/136795
        https://bugs.webkit.org/show_bug.cgi?id=104257

        Asserts on EFL WebKit2 Debug bot (Requested by yael on
        #webkit).

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setRootLayerID):

2012-12-06  Shinya Kawanaka  <shinyak@chromium.org>

        Internals.getElementByIdInShadowRoot is nonsense now.
        https://bugs.webkit.org/show_bug.cgi?id=104241

        Reviewed by Kent Tamura.

        * win/WebKit2.def.in:

2012-12-06  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Context clients should unregister themselves when destroyed
        https://bugs.webkit.org/show_bug.cgi?id=104113

        Reviewed by Kenneth Rohde Christiansen.

        Make sure the context clients (History and Download clients)
        unregister themselves when destroyed to make sure their
        callback functions are never called after the client objects
        have been destroyed (i.e. when the parent Ewk_Context has
        been destroyed).

        This addresses crashing issues after a Ewk_Context object
        gets unref'd and destroyed.

        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::ContextHistoryClientEfl):
        (WebKit):
        (WebKit::ContextHistoryClientEfl::~ContextHistoryClientEfl):
        * UIProcess/efl/ContextHistoryClientEfl.h:
        (ContextHistoryClientEfl):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::~DownloadManagerEfl):
        (WebKit):
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):

2012-12-05  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Reorder messages to LayerTreeCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=103843

        Reviewed by Noam Rosenthal.

        Clarify LayerTreeRenderer::setRootLayerID() can be called only once during its
        lifecycle. LayerTreeRenderer, LayerTreeCoordinator and LayerTreeCoordinatorProxy
        have the same lifecycle to WebPage and the root layer is reused even if loading
        new page, so it is impossible to call LayerTreeRenderer::setRootLayerID() more
        than twice.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setRootLayerID):

2012-12-05  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Regenerate .def files on changes
        https://bugs.webkit.org/show_bug.cgi?id=104136

        Reviewed by Tim Horton.

        The new .def file generator is not regenerating the link
        export definitions once it creates the definition file
        the first time. You must clean the build directory for
        new symbols to be added (or removed).

        * win/WebKit2.vcproj: Change the WebKit2.def file reference to
          point to the generated version of the file.
        * win/WebKit2ExportGenerator.vcproj: Add WebKit2.def.in as a source
          file that participates in the build so that Visual Studio knows
          to build the project when the file changes.
        * win/WebKit2ExportGeneratorBuildCmd.cmd: Added. Refactor build
          command into its own shell script.
        * win/WebKit2ExportGeneratorPostBuild.cmd: Call new BuildCmd script.
        * win/WebKit2ExportGeneratorPreBuild.cmd: Delete the old generator
          and definition files to ensure a clean build.

2012-12-05  Halton Huo  <halton.huo@intel.com>

        [CMake] Unify coding style for CMake files
        https://bugs.webkit.org/show_bug.cgi?id=103605

        Reviewed by Laszlo Gombos.

        Update cmake files(.cmake, CMakeLists.txt) with following style rules:
        1. Indentation
        1.1 Use spaces, not tabs.
        1.2 Four spaces as indent.
        2. Spacing
        2.1 Place one space between control statements and their parentheses.
            For eg, if (), else (), elseif (), endif (), foreach (),
            endforeach (), while (), endwhile (), break ().
        2.2 Do not place spaces between function and macro statements and
            their parentheses. For eg, macro(), endmacro(), function(),
            endfunction().
        2.3 Do not place spaces between a command or function or macro and its
            parentheses, or between a parenthesis and its content. For eg,
            message("testing") not message( "testing") or message ("testing" )
        2.4 No space at line ending.
        3. Lowercase when call commands macros and functions. For eg,
           add_executable() not ADD_EXECUTABLE(), set() not SET().

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * win/WebKit2ExportGenerator.vcproj:
        * win/WebKit2ExportGeneratorCommon.vsprops:

2012-12-05  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Reorder messages to LayerTreeCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=103843

        Reviewed by Noam Rosenthal.

        Send SetRootCompositingLayer message to the UI process in the
        constructor instead of sending it on the first flush.

        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::setRootLayerID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::initializeRootCompositingLayer):
        (WebKit):
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-12-05  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Don't use the C API internally in ewk_cookie_manager
        https://bugs.webkit.org/show_bug.cgi?id=103243

        Reviewed by Gyuyoung Kim.

        Used the C++ classes directly instead of the C API wrappers
        to avoid a lot of toImpl/toAPI casts.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::cookieManager):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (EwkCookieManager::EwkCookieManager):
        (EwkCookieManager::~EwkCookieManager):
        (EwkCookieManager::setPersistentStorage):
        (EwkCookieManager::setHTTPAcceptPolicy):
        (EwkCookieManager::clearHostnameCookies):
        (EwkCookieManager::clearAllCookies):
        (EwkCookieManager::watchChanges):
        (EwkCookieManager::getHostNamesWithCookies):
        (EwkCookieManager::getHTTPAcceptPolicy):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (EwkCookieManager::create):
        (EwkCookieManager):

2012-12-05  No'am Rosenthal  <noam@webkit.org>

        Coordinated Graphics: Enable support for setContentsToBackgroundColor
        https://bugs.webkit.org/show_bug.cgi?id=104128

        Reviewed by Kenneth Rohde Christiansen.

        Enable setContentsToBackgroundColor in CoordinatedGraphicsLayer, and pass it through to the UI process.

        * Shared/WebLayerTreeInfo.h:
        (WebLayerInfo):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerState):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToBackgroundColor):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-12-05  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12809890> Should allow sandbox lookup of com.apple.tccd

        Reviewed by Beth Dakin and Dan Bernstein.

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

2012-12-05  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Would like to queue messages while NetworkProcess is launching
        https://bugs.webkit.org/show_bug.cgi?id=104143

        Reviewed by Anders Carlsson.

        Factored out process launching and message sending code to a ChildProcessProxy class.
        Process closing and crashing code should be moved once we better understand common
        requirements for the processes.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        Added ChildProcessProxy files.

        * Shared/ChildProcessProxy.cpp: Added.
        (WebKit::ChildProcessProxy::ChildProcessProxy):
        (WebKit::ChildProcessProxy::~ChildProcessProxy):
        (WebKit::ChildProcessProxy::fromConnection):
        (WebKit::ChildProcessProxy::connect):
        (WebKit::ChildProcessProxy::terminate):
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::isLaunching):
        (WebKit::ChildProcessProxy::didFinishLaunching):
        (WebKit::ChildProcessProxy::clearConnection):
        * Shared/ChildProcessProxy.h: Added.
        (WebKit::ChildProcessProxy::connection):
        (WebKit::ChildProcessProxy::isValid):
        (WebKit::ChildProcessProxy::canSendMessage):
        (WebKit::ChildProcessProxy::processIdentifier):
        (WebKit::ChildProcessProxy::send):
        (WebKit::ChildProcessProxy::sendSync):
        Moved code from WebProcessProxy. Every ChildProcessProxy is a connection client,
        but every one is a connection queue client, so that latter is passed as an argument.

        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        Removed unused syncMessageSendTimedOut(), thank you OVERRIDE.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getLaunchOptions):
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::setApplicationIsOccluded):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::getLaunchOptions):
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::didFinishLaunching):
        Use shared code.

        * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::fromConnection):
        NetworkProcess inherits from conneciton client privately, so we need to do most
        of the work in ClientProcessProxy, and further upcast here.

        * UIProcess/efl/WebProcessProxyEfl.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/gtk/WebProcessProxyGtk.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/qt/WebProcessProxyQt.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        * UIProcess/win/WebProcessProxyWin.cpp:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        Updated for renaming, platformConnect -> platformGetLaunchOptions().

2012-12-05  Kiran Muppala  <cmuppala@apple.com>

        WebKit2 child processes need to initialize timer coalescing policy on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=103613

        Reviewed by Mark Rowe.

        Set timer coalescing policy of WebKit2 child processes to that of visible applications
        until they can manage the policy based on UI process visibility.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::initializeTimerCoalescingPolicy): Set task_latency and task_throughput QOS tiers as appropriate
        for visible applications.
        (WebKit::ChildProcess::platformInitialize): Add call to initializeTimerCoalescingPolicy.

2012-12-05  Anders Carlsson  <andersca@apple.com>

        Connection::waitForMessage shouldn't use the message ID
        https://bugs.webkit.org/show_bug.cgi?id=104157

        Reviewed by Andreas Kling.

        Pass the message receiver name and message name to waitForMessage and use them for lookups instead of
        the message ID.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::waitForAndDispatchImmediately):

2012-12-05  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics: Move AreaAllocator and UpdateAtlas to CoordinatedGraphics
        https://bugs.webkit.org/show_bug.cgi?id=103864

        Reviewed by Noam Rosenthal.

        AreaAllocator and UpdateAtlas are only used for Coordinated Graphics.
        So, these should be moved to CoordinatedGraphics to clarify the code.

        No new test, because no change of behavior.

        * CMakeLists.txt:
        * Target.pri:
        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/AreaAllocator.cpp.
        (WebKit):
        (WebKit::AreaAllocator::AreaAllocator):
        (WebKit::AreaAllocator::~AreaAllocator):
        (WebKit::AreaAllocator::expand):
        (WebKit::AreaAllocator::expandBy):
        (WebKit::AreaAllocator::release):
        (WebKit::AreaAllocator::overhead):
        (WebKit::AreaAllocator::roundAllocation):
        (WebKit::GeneralAreaAllocator::GeneralAreaAllocator):
        (WebKit::GeneralAreaAllocator::~GeneralAreaAllocator):
        (WebKit::GeneralAreaAllocator::freeNode):
        (WebKit::GeneralAreaAllocator::expand):
        (WebKit::fitsWithin):
        (WebKit::GeneralAreaAllocator::allocate):
        (WebKit::GeneralAreaAllocator::allocateFromNode):
        (WebKit::GeneralAreaAllocator::splitNode):
        (WebKit::GeneralAreaAllocator::updateLargestFree):
        (WebKit::GeneralAreaAllocator::release):
        (WebKit::GeneralAreaAllocator::overhead):
        * WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h: Renamed from Source/WebKit2/WebProcess/WebPage/AreaAllocator.h.
        (WebCore::nextPowerOfTwo):
        (WebCore):
        (WebKit):
        (AreaAllocator):
        (WebKit::AreaAllocator::size):
        (WebKit::AreaAllocator::minimumAllocation):
        (WebKit::AreaAllocator::setMinimumAllocation):
        (WebKit::AreaAllocator::margin):
        (WebKit::AreaAllocator::setMargin):
        (GeneralAreaAllocator):
        (Node):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/UpdateAtlas.cpp.
        (WebKit):
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit::UpdateAtlas::~UpdateAtlas):
        (WebKit::UpdateAtlas::buildLayoutIfNeeded):
        (WebKit::UpdateAtlas::didSwapBuffers):
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h: Renamed from Source/WebKit2/WebProcess/WebPage/UpdateAtlas.h.
        (WebCore):
        (WebKit):
        (UpdateAtlasClient):
        (UpdateAtlas):
        (WebKit::UpdateAtlas::size):
        (WebKit::UpdateAtlas::flags):
        (WebKit::UpdateAtlas::addTimeInactive):
        (WebKit::UpdateAtlas::isInactive):
        (WebKit::UpdateAtlas::isInUse):

2012-12-05  Michael Brüning  <michael.bruning@digia.com>

        Fix compilation for Qt5.0.0 stable branch.
        https://bugs.webkit.org/show_bug.cgi?id=103870

        Reviewed by Simon Hausmann.

        QWindow::pos() and QQuickItem::pos() have been renamed to position().
        Patch by Lars Knoll <lars.knoll@digia.com>

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::setContentRectVisiblePositionAtScale):
        (WebKit::PageViewportControllerClientQt::setViewportPosition):

2012-12-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] EWK2UnitTestBase.ewk_favicon_database_async_icon_get is crashing with new Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=104110

        Reviewed by Laszlo Gombos.

        Unregister the WKFaviconDatabase client in EwkFaviconDatabase
        destructor to avoid crashing if the callbacks get called
        after the EwkFaviconDatabase object has been destroyed (i.e.
        the parent EwkContext object was destroyed).

        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::~EwkFaviconDatabase):

2012-12-05  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] REGRESSION(r135399): It made qmltests::DoubleTapToZoom::test_double_zoomInAndBack() API test fail
        https://bugs.webkit.org/show_bug.cgi?id=103889

        Reviewed by Jocelyn Turcotte.

        The client should always be notified in PageViewportController::didChangeViewportAttributes
        about the changed attributes not only if the minimum scale changed. This ensures that these
        changes are propagated to QWebKitTest and the zoom stack of double-tap-to-zoom is reset correctly.
        Also increase precision of scale comparisons since the current value resulted in flakyness in
        scale related API tests.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeViewportAttributes):
        (WebKit::PageViewportController::updateMinimumScaleToFit):

2012-12-05  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] Use unsigned integers for CoordinatedTile IDs
        https://bugs.webkit.org/show_bug.cgi?id=103816

        Reviewed by Jocelyn Turcotte.

        Use unsigned integer for CoordinatedTile identifier type.
        CoordinatedTile was previously using signed integers for
        its identifier which is unsafe because the generated ID
        will overflow at some point and the C and C++ language
        standards say that overflow of a signed value is undefined
        behaviour.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::createTile):
        (WebKit::CoordinatedBackingStore::removeTile):
        (WebKit::CoordinatedBackingStore::removeAllTiles):
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::removeTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createTile):
        (WebKit::LayerTreeRenderer::removeTile):
        (WebKit::LayerTreeRenderer::updateTile):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit):
        (WebKit::CoordinatedTile::CoordinatedTile):
        (WebKit::CoordinatedTile::~CoordinatedTile):
        (WebKit::CoordinatedTile::updateBackBuffer):
        (WebKit::CoordinatedTile::isReadyToPaint):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTile):
        (CoordinatedTileClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createTile):
        (WebKit::LayerTreeCoordinator::updateTile):
        (WebKit::LayerTreeCoordinator::removeTile):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-12-05  Yuni Jeong  <yhnet.jung@samsung.com>

        [EFL][WK2] Add APIs to get/set private browsing.
        https://bugs.webkit.org/show_bug.cgi?id=102052

        Reviewed by Gyuyoung Kim.

        Private Browsing allows a user to browse the Internet without saving any information about which sites and pages a user has visited.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_private_browsing_enabled_set):
        (ewk_settings_private_browsing_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-12-05  Joaquim Rocha  <jrocha@igalia.com>

        URL schemes registered as local, no access, display isolated and as CORS enabled are not registered again after a web process crash
        https://bugs.webkit.org/show_bug.cgi?id=104013

        Reviewed by Darin Adler.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Iterate through the schemes stored in
        urlSchemesRegisteredAsLocal, urlSchemesRegisteredAsNoAccess,
        urlSchemesRegisteredAsDisplayIsolated and urlSchemesRegisteredAsCORSEnabled and
        call the respective (already existing) methods for registering them.

2012-12-04  Yuni Jeong  <yhnet.jung@samsung.com>

        [EFL][WK2] Add APIs to get/set default font size.
        https://bugs.webkit.org/show_bug.cgi?id=101921

        Reviewed by Gyuyoung Kim.

        Add setting APIs for default font size and a unit test.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_default_font_size_set):
        (ewk_settings_default_font_size_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-12-04  Anders Carlsson  <andersca@apple.com>

        Remove #ifs that are always true
        https://bugs.webkit.org/show_bug.cgi?id=104080

        Reviewed by Andreas Kling.

        __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 is always true, so remove all the #ifs.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeSandbox):
        (WebKit::PluginProcess::platformInitialize):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        (WebKit::DictionaryPopupInfo::decode):
        * Shared/DictionaryPopupInfo.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::phaseForEvent):
        (WebKit::momentumPhaseForEvent):
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        (WebKit::initializeSandbox):
        (WebKit::SharedWorkerProcess::platformInitialize):
        * UIProcess/API/mac/PDFViewController.mm:
        (WebKit::PDFViewScrollView_scrollWheel):
        (WebKit::PDFViewController::pdfKitBundle):
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup):
        (WebKit::PageClientImpl::dismissDictionaryLookupPanel):
        (WebKit::PageClientImpl::recordAutocorrectionResponse):
        (WebKit::PageClientImpl::recommendedScrollbarStyleDidChange):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView displayIfNeeded]):
        (-[WKView draggingUpdated:]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _intrinsicDeviceScaleFactor]):
        (-[WKView _cacheWindowBottomCornerRect]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (+[WKView hideWordDefinitionWindow]):
        * UIProcess/Launcher/mac/EnvironmentVariables.cpp:
        * UIProcess/Launcher/mac/EnvironmentVariables.h:
        (EnvironmentVariables):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        (WebKit::createWebProcessServiceForWebKitDevelopment):
        (WebKit):
        (WebKit::tryPreexistingProcess):
        (WebKit::createProcess):
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        (WebKit::PluginInfoStore::reactivateInactivePlugin):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializePluginProcess):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::pageDidScroll):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::recordAutocorrectionResponse):
        (WebKit::WebPageProxy::handleAlternativeTextUIResult):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::initializeState):
        (WebKit::TextChecker::getGuessesForWord):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (convertRectToScreen):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebKit2Prefix.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_GetValue):
        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):
        * WebProcess/mac/SecItemShimMethods.mm:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::secItemResponse):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcessService/WebProcessServiceMain.mm:
        (main):
        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm:
        (WebProcessServiceForWebKitDevelopmentEventHandler):
        (main):

2012-12-04  Anders Carlsson  <andersca@apple.com>

        Remove more Snow Leopard only code
        https://bugs.webkit.org/show_bug.cgi?id=104079

        Reviewed by Andreas Kling.

        All of the SecKeychainItem code was Snow Leopard only.

        * Shared/mac/SecKeychainItemRequestData.cpp: Removed.
        * Shared/mac/SecKeychainItemRequestData.h: Removed.
        * Shared/mac/SecKeychainItemResponseData.cpp: Removed.
        * Shared/mac/SecKeychainItemResponseData.h: Removed.
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.h:
        * UIProcess/Launcher/mac/DynamicLinkerEnvironmentExtractor.mm:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/WebProcessProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/mac/KeychainItemShimMethods.h: Removed.
        * WebProcess/mac/KeychainItemShimMethods.mm: Removed.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::initializeShim):
        * WebProcess/mac/WebProcessShim.mm:

2012-12-04  Anders Carlsson  <andersca@apple.com>

        Remove PageClient::didChangeScrollbarsForMainFrame
        https://bugs.webkit.org/show_bug.cgi?id=104077

        Reviewed by Andreas Kling.

        The aforementioned function was only used to implement some Snow Leopard specific behavior that we no longer support.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewWillMoveToWindow:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeScrollbarsForMainFrame):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit):
        * UIProcess/efl/PageClientBase.h:
        (PageClientBase):
        * UIProcess/qt/QtPageClient.h:
        * UIProcess/win/WebView.cpp:
        * UIProcess/win/WebView.h:
        (WebView):

2012-12-04  Andy Estes  <aestes@apple.com>

        [WebKit2] WKWebProcessPlugInBrowserContextControllers should be treated as type WKBrowsingContextControllerType for encoding purposes
        https://bugs.webkit.org/show_bug.cgi?id=104063

        Reviewed by Sam Weinig.

        Objective-C message graphs can include browsing context controller
        objects, which are decoded as WKWebProcessPlugInBrowserContextControllers
        in the web process plug-in and as WKBrowsingContextControllers in the UI
        process. Ensure we correctly encode WKWebProcessPlugInBrowserContextControllers
        by treating them as type WKBrowsingContextControllerType.

        * Shared/mac/ObjCObjectGraphCoders.mm:
        (WebKit::typeFromObject):

2012-12-04  Simon Fraser  <simon.fraser@apple.com>

        Show a mini visualizer for the tile cache tiles
        https://bugs.webkit.org/show_bug.cgi?id=104053

        Reviewed by Beth Dakin.

        Plumb through a preference that controls the visibility of a tiled
        scrolling indicator, and parent that layer in the TiledCoreAnimationDrawingArea.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTiledScrollingIndicatorVisible):
        (WKPreferencesGetTiledScrollingIndicatorVisible):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameTiledBacking):
        (WebKit::TiledCoreAnimationDrawingArea::updateDebugInfoLayer):

2012-12-04  Anders Carlsson  <andersca@apple.com>

        Set the visible process name before entering the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=104030
        <rdar://problem/12800317>

        Reviewed by Sam Weinig.

        Pass the UI process name along as a process initialization parameter so we can set it
        before entering the sandbox. Remove the UI process name from WebProcessCreationParameters.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToWebProcessServiceForWebKitDevelopment):
        (WebKit::createWebProcessService):
        (WebKit::createProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/mac/WebProcessInitialization.h:
        (WebProcessInitializationParameters):
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::initializeWebProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcess/mac/WebProcessServiceEntryPoints.h:
        * WebProcess/mac/WebProcessServiceEntryPoints.mm:
        (WebKit::WebProcessServiceEventHandler):
        (initializeWebProcessForWebProcessServiceForWebKitDevelopment):
        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm:
        (WebProcessServiceForWebKitDevelopmentEventHandler):

2012-12-03  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Track private browsing session explicitly
        <rdar://problem/12714532>
        https://bugs.webkit.org/show_bug.cgi?id=103953

        Reviewed by Jessie Berlin.

        * Shared/WebProcessCreationParameters.cpp: (WebKit::WebProcessCreationParameters::encode):
        Fixed a confusing ifdef - this code is inside PLATFORM(WIN), so PLATFORM(MAC)
        makes no sense.

        * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetPrivateBrowsingEnabled):
        This is the only place in WK2 where we can learn that private browsing got disabled -
        no other functions are called when there are no pages open.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::willStartUsingPrivateBrowsing):
        (WebKit::WebContext::willStopUsingPrivateBrowsing):
        Count the number of API calls. We only implement a single shared private browsing
        session, not one per page group as API implies. When private browsing gets disabled,
        we want to destroy its session.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences):
        Ensure a private browsing session if the current page needs it.

        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        Call through to WebFrameNetworkingContext.

2012-12-04  Yuni Jeong  <yhnet.jung@samsung.com>

        [EFL][WK2] Add APIs to toggle plug-ins support.
        https://bugs.webkit.org/show_bug.cgi?id=101920

        Reviewed by Gyuyoung Kim.

        Add setting APIs to toggle plug-ins support and add corresponding API tests.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_plugins_enabled_set):
        (ewk_settings_plugins_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-12-04  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Do not override previously set flags of QQuickWebView when enabling drag&drop
        https://bugs.webkit.org/show_bug.cgi?id=103901

        Reviewed by Jocelyn Turcotte.

        Setting the specific flag instead of resetting all the flags
        when enabling QQuickItem::ItemAcceptsDrops.
        This fixes clipping of the contents of QQuickWebView.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):

2012-12-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Avoid unnecessary heap allocations during drag and drop operations
        https://bugs.webkit.org/show_bug.cgi?id=87938

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDataReceived): Create DragData for the given
        DataObjectGtk in the stack.
        (webkitWebViewBaseDragMotion): Ditto.
        (webkitWebViewBaseDragDrop): Ditto.

2012-12-04  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] Use consistent class names inside Ewk classes
        https://bugs.webkit.org/show_bug.cgi?id=103015

        Reviewed by Gyuyoung Kim.

        WebKit EFL doesn't use '_' in class names.
        This patch removes the remaining uses of '_' inside Ewk classes.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::requestPopupMenu):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (EwkBackForwardList::nextItem):
        (EwkBackForwardList::previousItem):
        (EwkBackForwardList::currentItem):
        (EwkBackForwardList::itemAt):
        (EwkBackForwardList::getFromCacheOrCreate):
        (EwkBackForwardList::createEinaList):
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (EwkBackForwardList):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::cookieManager):
        (EwkContext::databaseManager):
        (EwkContext::ensureFaviconDatabase):
        (EwkContext::faviconDatabase):
        (EwkContext::storageManager):
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (EwkCookieManager::cookiesDidChange):
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (EwkCookieManager::create):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::createOriginList):
        (getDatabaseOriginsCallback):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        (EwkDatabaseManager):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::didChangeIconForPageURL):
        (EwkFaviconDatabase::iconDataReadyForPageURL):
        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::EwkPopupMenu):
        (EwkPopupMenu::~EwkPopupMenu):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (EwkStorageManager::createOriginList):
        (getStorageOriginsCallback):
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (EwkStorageManager):

2012-12-03  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Reorder messages to LayerTreeCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=103843

        Reviewed by Noam Rosenthal.

        Remove updateViewport() in LayerTreeCoordinatorProxy::setRootCompositingLayer()
        because LayerTreeCoordinatorProxy::didRenderFrame() is always called after
        setting the root layer. There is no behaviour changes because setting the root
        layer isn't actually applied to TextureMapperLayer until DidRenderFrame message
        is received.

        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::setRootCompositingLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-12-03  Anders Carlsson  <andersca@apple.com>

        Make it easier to add more web process initialization parameters
        https://bugs.webkit.org/show_bug.cgi?id=103942

        Reviewed by Andreas Kling.

        Add a WebProcessInitializationParameters struct to make it easier to add more initialization
        parameters in the future. Also, fix naming and spelling errors.

        * WebProcess/mac/WebProcessInitialization.h:
        (WebProcessInitializationParameters):
        (WebKit):
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::initializeWebProcess):
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain):
        * WebProcess/mac/WebProcessServiceEntryPoints.h:
        * WebProcess/mac/WebProcessServiceEntryPoints.mm:
        (WebKit::WebProcessServiceEventHandler):
        (webProcessServiceMain):
        (initializeWebProcessForWebProcessServiceForWebKitDevelopment):
        * WebProcessService/WebProcessServiceMain.mm:
        (main):
        * WebProcessServiceForWebKitDevelopment/WebProcessServiceForWebKitDevelopmentMain.mm:
        (WebProcessServiceForWebKitDevelopmentEventHandler):

2012-12-03  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: <embed> and <object> PDFs affect their parent frame's page scale
        https://bugs.webkit.org/show_bug.cgi?id=103286
        <rdar://problem/12752315>

        Reviewed by Dan Bernstein.

        Style fixes after http://trac.webkit.org/changeset/136316.

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

2012-12-03  Alexis Menard  <alexis@webkit.org>

        [Mac] Enable CSS3 background-position offset by default.
        https://bugs.webkit.org/show_bug.cgi?id=103905

        Reviewed by Simon Fraser.

        Turn the flag on by default.

        * Configurations/FeatureDefines.xcconfig:

2012-12-03  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add contents,size,changed signal to the ewk_view API
        https://bugs.webkit.org/show_bug.cgi?id=103094

        Reviewed by Kenneth Rohde Christiansen.

        This patch emits signal to let applications know contents size.
        Applications can use this signal to give some additional behavior such as
        minimap, external scroll for quick movement.

        * UIProcess/API/efl/EwkViewCallbacks.h: Added contents,size,changed signal.
        * UIProcess/API/efl/EwkViewImpl.cpp: Removed dead code.
        * UIProcess/API/efl/EwkViewImpl.h: Ditto.
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.h: Added test case.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (onContentsSizeChanged):
        (TEST_F):
        * UIProcess/efl/PageClientDefaultImpl.cpp: Emitted contents,size,changed signal.
        (WebKit::PageClientDefaultImpl::didChangeContentsSize):
        * UIProcess/efl/PageClientLegacyImpl.cpp: Ditto.
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        Sended DidChangeContentsSize message although TILED_BACKINGSTORE is disabled.

2012-12-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r136292 to make GIT-SVN repositories happy.

        * win/WebKit2ExportGenerator.vcproj: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorCommon.vsprops: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorDebug.vsprops: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorDebugAll.vsprops: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorPostBuild.cmd: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorPreBuild.cmd: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorProduction.vsprops: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorRelease.vsprops: Added property svn:eol-style.
        * win/WebKit2ExportGeneratorReleaseCairoCFLite.vsprops: Added property svn:eol-style.

2012-12-03  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] New resize tests fail
        https://bugs.webkit.org/show_bug.cgi?id=103875

        Reviewed by Jocelyn Turcotte.

        Removes reference to unused viewportSpy, adds clearing the sizeSpy to the init method instead.   

        * UIProcess/API/qt/tests/qmltests/WebView/tst_resize.qml:

2012-12-03  Joaquim Rocha  <jrocha@igalia.com>

        [GTK] Custom URI schemes stop working on Epiphany using WebKit2 after killing the web process
        https://bugs.webkit.org/show_bug.cgi?id=103729

        Reviewed by Carlos Garcia Campos.

        When a URI scheme is registered and the WebProcess is killed,
        those schemes would not work anymore after the process is relaunched.

        This was observed in Epiphany and possibly affects any port that
        uses libsoup.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode the registered URI schemes.
        (WebKit::WebProcessCreationParameters::decode): Decode the registered URI schemes.
        * Shared/WebProcessCreationParameters.h: Add the urlSchemesRegistered Vector to hold the registered URI schemes.
        (WebProcessCreationParameters):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): Assign the parameters.urlSchemesRegistered from the URI schemes
        registered in the WebSoupRequestManagerProxy and removed the notImplemented() call.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): Assign the parameters.urlSchemesRegistered from the URI schemes
        registered in the WebSoupRequestManagerProxy.
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::registerURIScheme): Add the given scheme to the m_registeredURISchemes Vector.
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebKit::WebSoupRequestManagerProxy::registeredURISchemes): Return the m_registeredURISchemes.
        (WebSoupRequestManagerProxy): Define the m_registeredURISchemes to hold the schemes that are registered.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Call m_soupRequestManager.registerURIScheme for each URI scheme
        found in the parameters.
        * WebProcess/soup/WebSoupRequestManager.h: Make registerURIScheme public.
        (WebSoupRequestManager):

2012-12-03  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        CSS Device Adaptation: window.innerWidth returns wrong value if CSS viewport descriptors are applied
        https://bugs.webkit.org/show_bug.cgi?id=103737

        Reviewed by Kenneth Rohde Christiansen.

        ViewportStyleResolver used frame view visibleContentRect size as initial viewport size.
        This however caused a problem when page enabled/disabled CSS stylesheets, having viewport
        descriptors. Viewport descriptors from new stylesheet were applied to the visibleContentRect
        affected already by the viewport descriptors from the previous stylesheet.

        New 'initialViewportSize' property (http://dev.w3.org/csswg/css-device-adapt/#initial-viewport)
        was added to frame view so that viewport descriptors can always be applied to the reliable
        viewport size.

        Both newly added 'initialViewportSize' property and 'fixedVisibleContentRect' property
        are assigned appropriately now in WebPage::sendViewportAttributesChanged().

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

2012-12-02  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Reorder messages to LayerTreeCoordinatorProxy
        https://bugs.webkit.org/show_bug.cgi?id=103843

        Reviewed by Noam Rosenthal.

        Send messages to the UI process by the tree order.
        This is in preparation for refactoring TextureMapper to work in an actor
        model (http://webkit.org/b/103854).

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-12-02  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL][WK2] Update comments of header files which mentions deprecated API
        https://bugs.webkit.org/show_bug.cgi?id=103718

        Reviewed by Gyuyoung Kim.

        Updated comments which mentions XXX_unref() which was replaced to ewk_object_unref()

        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_storage_manager.h:

2012-12-02  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(r134376): ASSERT(!m_mainBackingStore) hits in CoordinatedGraphicsLayer::syncImageBacking().
        https://bugs.webkit.org/show_bug.cgi?id=103845

        Reviewed by Noam Rosenthal.

        flushCompositingStateForThisLayerOnly() calls syncImageBacking() before calling
        updateContentBuffers(). It means there can be the moment that
        CoordinatedGraphicsLayer has m_mainBackingStore although
        shouldHaveBackingStore() return false.
        This patch changes syncImageBacking() to check shouldHaveBackingStore() instead
        of m_mainBackingStore.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::shouldHaveBackingStore):
        (WebCore):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-12-02  Seokju Kwon  <seokju.kwon@gmail.com>

        Rename WebSocketServerGtk.cpp as WebSocketServerSoup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=103743

        Reviewed by Gustavo Noronha Silva.

        EFL port is using a GSocket based implementation as well.
        WebSocketServerSoup can be used together.

        * GNUmakefile.list.am:
        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp: Renamed from Source/WebKit2/UIProcess/InspectorServer/gtk/WebSocketServerGtk.cpp.
        (WebKit):
        (WebKit::connectionCallback):
        (WebKit::WebSocketServer::platformInitialize):
        (WebKit::WebSocketServer::platformListen):
        (WebKit::WebSocketServer::platformClose):

2012-12-02  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] LayerTreeRenderer::removeImageBacking() calls HashMap::find() twice
        https://bugs.webkit.org/show_bug.cgi?id=103815

        Reviewed by Noam Rosenthal.

        Call HashMap::take() in LayerTreeRenderer::removeImageBacking()
        to avoid calling HashMap::find() twice. find() was called once
        explicitly to get an iterator and a second time to remove the
        value from the value from the HashMap. We could have used
        remove(iterator) instead of remove(key) but using take() results
        in simpler code.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::removeImageBacking):

2012-12-02  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Images disappear randomly
        https://bugs.webkit.org/show_bug.cgi?id=103522

        Reviewed by Kenneth Rohde Christiansen.

        Currently, we delete layers before synchronizing layer states of layers. It
        causes flash. This patch deletes layers after the synchronization.

        In addiation, this patch removes updateViewport() in
        LayerTreeCoordinatorProxy::deleteCompositingLayer() because
        LayerTreeCoordinatorProxy::didRenderFrame() is always called after
        deleting layers.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::deleteCompositingLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-12-02  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Revise export definitions to match mac.
        https://bugs.webkit.org/show_bug.cgi?id=103687

        Reviewed by Tim Horton.

        Update export definition files to use the same feature exclusion
        macros as other generated ports.

        * win/WebKit2.def.in: Added additional build macro guards.

2012-12-02  No'am Rosenthal  <noam@webkit.org>

        [CoordinatedGraphics] Crash in TextureMapperLayer::setBackingStore()
        https://bugs.webkit.org/show_bug.cgi?id=103714

        Reviewed by Kenneth Rohde Christiansen.

        Remove a layer from the m_pendingSyncBackingStores map when it is deleted.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::deleteLayer):

2012-12-02  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] MiniBrowser should have a legacy mode
        https://bugs.webkit.org/show_bug.cgi?id=103679

        Reviewed by Kenneth Rohde Christiansen.

        We need a way to create a web view in legacy mode, while still using the default context.
        WKViewCreate creates a legacy view, so change it to create a default context if a context
        was not passed.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):

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

        PDFPlugin: Support PDF form editing in <iframe>s
        https://bugs.webkit.org/show_bug.cgi?id=103287
        <rdar://problem/10326917>

        Reviewed by Dan Bernstein.

        PDFPlugin form editing depends on having a Document that has the same
        size and position as the plugin; this is true not only in the full-main-frame
        case, but also in the <iframe> case. Therefore, we can enable form editing
        for <iframe> PDFPlugins.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::supportsForms): Support form editing whenever
        our Document's widget is our PluginView (which will only be true in the
        full-main-frame or <iframe> case).

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

        PDFPlugin: <embed> and <object> PDFs affect their parent frame's page scale
        https://bugs.webkit.org/show_bug.cgi?id=103286
        <rdar://problem/12752315>

        Reviewed by Dan Bernstein.

        Detecting whether or not a PDFPlugin is a full-page plugin or not is not
        as simple as checking isMainFrame(), because <embed> and <object> will
        cause PDFPlugin to live in the main frame, while still not being full-page.
        We also have to check that the main frame's document is a PluginDocument,
        and whether that PluginDocument's PluginWidget is our PDFPlugin's PluginView.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add isFullFramePlugin.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::isFullFramePlugin): Check whether the main frame is
        backed by a PluginDocument, and that that PluginDocument corresponds
        to this PDFPlugin.
        (WebKit::PDFPlugin::handlesPageScaleFactor): Use isFullFramePlugin.
        (WebKit::PDFPlugin::supportsForms): Use isFullFramePlugin.

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

        [wk2] Use spoolRect instead of snapshots for print preview
        https://bugs.webkit.org/show_bug.cgi?id=103798
        <rdar://problem/12686749>

        Reviewed by Sam Weinig.

        Revert to using spoolRect instead of snapshotting for printing; this was a bogus
        change I made in http://trac.webkit.org/changeset/133935 which was irrelevant to
        the core of that change, and incorrectly disregards the Frame parameter passed to
        beginPrinting, instead using the WebPage's current Frame.

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

2012-11-30  Anders Carlsson  <andersca@apple.com>

        Always listen for the DidFirstLayout layout milestone
        https://bugs.webkit.org/show_bug.cgi?id=103795
        <rdar://problem/12790268>

        Reviewed by Dan Bernstein.

        The DidFirstLayout layout milestone is used to determine when to unfreeze the layer tree, so we always want to listen for it.

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

2012-11-30  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Unreviewed speculative Mac build fix after r136232

        cleanup an oversight from r136235

        * PluginProcess.pro: s/webkit/webkitwidgets/

2012-11-30  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Generate library export symbol file.
        https://bugs.webkit.org/show_bug.cgi?id=103687

        Reviewed by Tim Horton.

        Generate the export definition file based on the compile options
        and port settings. Get rid of the old hand-written file, and use
        a revised master input file that allows using conditional
        settings to generate the output, much like the Mac and other
        ports do.

        * win/WebKit2.def: Removed.
        * win/WebKit2.def.in: Added.
        * win/WebKit2Apple.vsprops:
        * win/WebKit2CFLite.def: Removed.
        * win/WebKit2CFLite.vsprops:
        * win/WebKit2Common.vsprops:
        * win/WebKit2ExportGenerator.vcproj: Added.
        * win/WebKit2ExportGeneratorCommon.vsprops: Added.
        * win/WebKit2ExportGeneratorDebug.vsprops: Added.
        * win/WebKit2ExportGeneratorDebugAll.vsprops: Added.
        * win/WebKit2ExportGeneratorDebugCairoCFLite.vsprops: Added.
        * win/WebKit2ExportGeneratorPostBuild.cmd: Added.
        * win/WebKit2ExportGeneratorPreBuild.cmd: Added.
        * win/WebKit2ExportGeneratorProduction.vsprops: Added.
        * win/WebKit2ExportGeneratorRelease.vsprops: Added.
        * win/WebKit2ExportGeneratorReleaseCairoCFLite.vsprops: Added.

2012-11-30  Tim Horton  <timothy_horton@apple.com>

        (Simple)PDFPlugin: Support conversion of PostScript documents
        https://bugs.webkit.org/show_bug.cgi?id=103289
        <rdar://problem/10235708>

        Reviewed by Dan Bernstein.

        SimplePDFPlugin (and PDFPlugin) should support converting PostScript files
        to PDF before handing them off to their respective backends.

        As PDFPlugin inherits from SimplePDFPlugin, it gets the new functionality automatically.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Add convertPostScriptDataIfNeeded(), and m_isPostScript.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (WebKit::SimplePDFPlugin::pluginInfo): SimplePDFPlugin should claim to support PDF and PostScript.
        (WebKit::convertPostScriptDataSourceToPDF): PS->PDF conversion code, copied from PDFViewController (which I intend to remove).
        (WebKit::SimplePDFPlugin::convertPostScriptDataIfNeeded): Check if the loaded data represents a PS file; if so, convert it.
        (WebKit::SimplePDFPlugin::streamDidReceiveResponse): Check if the loaded data is of MIME type application/postscript, and store that in m_isPostScript.
        (WebKit::SimplePDFPlugin::streamDidFinishLoading): Call convertPostScriptDataIfNeeded when we finish loading.
        (WebKit::SimplePDFPlugin::manualStreamDidReceiveResponse): Ditto from streamDidReceiveResponse.
        (WebKit::SimplePDFPlugin::manualStreamDidFinishLoading): Ditto from streamDidFinishLoading.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Use (Simple)PDFPlugin for PostScript files too.

2012-11-30  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: "Show Definition" context menu item should be implemented
        https://bugs.webkit.org/show_bug.cgi?id=103389
        <rdar://problem/12710751>

        Reviewed by Dan Bernstein.

        Call existing dictionary popup code when the context menu "Show Definition" item is selected.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add showDefinitionForAttributedString and convertFromPDFViewToRootView.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate showDefinitionForAttributedString:atPoint:]): Forward this call to PDFPlugin.
        (WebKit::PDFPlugin::showDefinitionForAttributedString): Create a DictionaryPopupInfo with the necessary information.
        Ask WebPageProxy to show the dictionary popup.
        (WebKit::PDFPlugin::convertFromPDFViewToRootView): Convert a point from PDFLayerController space to the root view space.

2012-11-30  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed trivial Qt build fix:

        Always link against WebProcess against QT += webkit and use webkitwidgets only if available.

        * WebProcess.pro:

2012-11-30  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi  <pierre.rossi@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=99314

        Reviewed by Tor Arne Vestbø.

        This big change separates QtWebKit into QtWebKit and QtWebKitWidgets as
        shared libraries.

        It's a big refactoring that mostly involves moving WebCore dependent
        code into QtWebKit and accessing it through exported QWebFrameAdapter
        and QWebPageAdapter classes.


        * UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro:
        * UIProcess/API/qt/tests/publicapi/publicapi.pro:
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
        * UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro:
        * UIProcess/API/qt/tests/tests.pri:

2012-11-30  Joone Hur  <joone.hur@intel.com>

        [EFL]Drawing artifacts while resizing the view
        https://bugs.webkit.org/show_bug.cgi?id=101288

        Reviewed by Kenneth Rohde Christiansen.

        An Evas GL surface is recreated when the window is resized, but the update of the surface is 
        asynchronously done, which gives Evas a chance of painting the empty surface on the screen.
        As a result, the flickering problem happens while resizing the view.
        So this patch allows to create an Evas GL surface synchronously with the update of the surface.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl): Set m_pendingSurfaceResize to false.
        (EwkViewImpl::displayTimerFired): Create an Evas GL surface.
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::setNeedsSurfaceResize): Added.
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate): Set m_pendingSurfaceResize to true.

2012-11-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: Frame view re-layouts with wrong Fixed Visible Content Rect.
        https://bugs.webkit.org/show_bug.cgi?id=103428

        Reviewed by Kenneth Rohde Christiansen.

        Set now appropriate fixed visible content rect before layout when viewport
        attributes change.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):

2012-11-30  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL] Gardening after r136031 and r136142
        https://bugs.webkit.org/show_bug.cgi?id=103734

        Unreviewed, API test EWK2UnitTestBase.ewk_view_setting_encoding_custom
        is asserting after r136031. So, disabling the test until bug 103732 is
        fixed.

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

2012-11-30  Zeno Albisser  <zeno@webkit.org>

        [Qt] Enable WebGL by default.
        https://bugs.webkit.org/show_bug.cgi?id=103731

        Reviewed by Simon Hausmann.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):

2012-11-30  Mihai Maerean  <mmaerean@adobe.com>

        [CSSRegions] when WebKit uses V8, there should be a single variable to store if the CSS Regions feature is enabled
        https://bugs.webkit.org/show_bug.cgi?id=101192

        Reviewed by Hajime Morita.

        Removed the CSS Regions flag in Settings and switched to using the new flag I have added in RuntimeEnabledFeatures.

        Tests: No new tests because there is no functional change.

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

2012-11-29  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Only plain text can be copied out of PDFs
        https://bugs.webkit.org/show_bug.cgi?id=103591
        <rdar://problem/12555161>

        Reviewed by Alexey Proskuryakov.

        Don't write zero-length data to the pasteboard, just skip the item.

        As mentioned in the comment, we don't expect this to come up, and would like to know if it does,
        so we assert that it doesn't happen in debug builds.

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

2012-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] WebKitWebViewBase creates a GL context for the redirected XComposite window crashing WebKit in Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=103476

        Reviewed by Alejandro G. Castro.

        Create the RedirectedXCompositeWindow with an argument specifying that it
        should never have a GLContext backing it.

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

2012-11-29  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] Add feature flag
        https://bugs.webkit.org/show_bug.cgi?id=103694

        Reviewed by Adam Barth.

        This flag will guard the implementation of the HTMLTemplateElement.
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html

        * Configurations/FeatureDefines.xcconfig:

2012-11-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Forward cookie jar calls to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=103457

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        Added messages to maniputate CookieJar in network process.

        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp: Removed unnecessary WebCore:: prefixes,
        this file has a using direcive.
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        (WebKit::NetworkConnectionToWebProcess::getHostnamesWithCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookiesForHostname):
        (WebKit::NetworkConnectionToWebProcess::deleteAllCookies):
        Added implementations that use PlatformCookieJar in the network process.

        * Scripts/webkit2/messages.py: (struct_or_class):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        Added support for Cookie.
        
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::cookiesForDOM):
        (WebKit::WebPlatformStrategies::setCookiesFromDOM):
        (WebKit::WebPlatformStrategies::cookiesEnabled):
        (WebKit::WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebKit::WebPlatformStrategies::getRawCookies):
        (WebKit::WebPlatformStrategies::deleteCookie):
        (WebKit::WebPlatformStrategies::getHostnamesWithCookies):
        (WebKit::WebPlatformStrategies::deleteCookiesForHostname):
        (WebKit::WebPlatformStrategies::deleteAllCookies):
        When using the network process, forward cookie calls to it.

2012-11-29  Kiran Muppala  <cmuppala@apple.com>

        Instantiate snapshot plugins in a PluginProcess with muted audio
        https://bugs.webkit.org/show_bug.cgi?id=101536

        Reviewed by Anders Carlsson.

        Plugins created for generation of a snapshot should be instantiated in a separate process with
        muted audio so that any sound generated during the snapshot process is not audible to the user.

        * Configurations/WebKit2.xcconfig: Add CoreAudio to the list of linked frameworks.
        * PluginProcess/PluginProcess.h: Add PluginProcess::Type enum with values for regular and
        snapshot process types. Provide DefaultHash and IsInteger template specializations for the enum
        so that PluginProcessConnectionManager can store it in a HashMap.
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::muteAudio):
        (WebKit::PluginProcess::platformInitialize): Mute audio if the process creation parameters indicate
        that the plugin process type is snapshot process.
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        (WebKit::PluginProcessCreationParameters::decode):
        * Shared/Plugins/PluginProcessCreationParameters.h: Add processType process creation parameter.
        * UIProcess/Plugins/PluginProcessManager.cpp:
        (WebKit::PluginProcessManager::getPluginProcessConnection): Add process type parameter.
        (WebKit::PluginProcessManager::getSitesWithData): Forward message to regular plugin process only.
        (WebKit::PluginProcessManager::clearSiteData): Forward message to regular plugin process only.
        (WebKit::PluginProcessManager::pluginProcessWithPath): Add process type parameter.
        (WebKit::PluginProcessManager::getOrCreatePluginProcess): Ditto.
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::create): Add process type parameter.
        (WebKit::PluginProcessProxy::PluginProcessProxy): Ditto.
        (WebKit::PluginProcessProxy::didClose): Include process type with the plugin process crashed message.
        (WebKit::PluginProcessProxy::didFinishLaunching): Set process type process creation parameter.
        * UIProcess/Plugins/PluginProcessProxy.h:
        (WebKit::PluginProcessProxy::processType):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginProcessConnection): Pass along process type parameter to
        PluginProcessManager.
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in: Add process type parameter to GetPluginProcessConnection message.
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection): Add process type parameter.
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::create): Ditto.
        (WebKit::PluginProcessConnection::processType): Ditto.
        * WebProcess/Plugins/PluginProcessConnectionManager.cpp:
        (WebKit::PluginProcessConnectionManager::getPluginProcessConnection): Add process type parameter.
        (WebKit::PluginProcessConnectionManager::removePluginProcessConnection): Use process type in addition to
        plugin path to find the connection to remove.
        (WebKit::PluginProcessConnectionManager::pluginProcessCrashed): Add process type parameter.
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::create): Ditto.
        (WebKit::PluginProxy::PluginProxy): Ditto.
        (WebKit::PluginProxy::initialize): Add process type parameter in call to
        PluginProcessConnectionManager::getPluginProcessConnection.
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Determine process type based on display state of plugin element and
        pass it to PluginProxy::create.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::pluginProcessCrashed): Pass along process type parameter to
        PluginProcessConnectionManager.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Add process type parameter to PluginProcessCrashed message.

2012-11-29  Anders Carlsson  <andersca@apple.com>

        Initialize m_xpcConnection to null if the identifier doesn't have an XPC connection
        https://bugs.webkit.org/show_bug.cgi?id=103689

        Reviewed by Darin Adler.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformInitialize):

2012-11-29  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] Use OwnPtr for LayerMap's layers in LayerTreeRenderer
        https://bugs.webkit.org/show_bug.cgi?id=103650

        Reviewed by Noam Rosenthal.

        We currently store raw pointers to WebCore::GraphicsLayer in the LayerMap
        meaning that we need to delete them manually. This patch leverages smart
        pointers and stores layers as OwnPtr in the LayerMap so that the layers
        are owned by the HashMap and we don't have to handle memory manually.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::deleteLayer):
        (WebKit::LayerTreeRenderer::ensureLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:

2012-11-29  Anders Carlsson  <andersca@apple.com>

        Add a minimumLayoutWidth WKView property
        https://bugs.webkit.org/show_bug.cgi?id=103660
        <rdar://problem/11791729>

        Reviewed by Beth Dakin.

        When minimumLayoutWidth is set to a positive value, the WKView will update its intrinsic content size given the layout width.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::intrinsicContentSizeDidChange):
        Call the WKView.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView intrinsicContentSize]):
        Override the intrinsicContentSize getter.

        (-[WKView _setIntrinsicContentSize:]):
        Update the intrinsic content size and mark it as invalid.

        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        By default, the WKView should have no intrinsic size.

        (-[WKView minimumLayoutWidth]):
        (-[WKView setMinimumLayoutWidth:]):
        Call through to the WebPageProxy object.

        * UIProcess/API/mac/WKViewPrivate.h:
        Add the SPI here.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::minimumLayoutWidthDidChange):
        (WebKit::DrawingAreaProxy::didUpdateGeometry):
        (WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange):
        Add empty stubs.

        * UIProcess/DrawingAreaProxy.messages.in:
        Update the DidUpdateGeometry signature and add IntrinsicContentSizeDidChange.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Initialize the minimum layout width.

        (WebKit::WebPageProxy::setMinimumLayoutWidth):
        Update the minimum layout width and call the drawing area proxy.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::minimumLayoutWidth):
        Add getter.

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        (TiledCoreAnimationDrawingAreaProxy):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::minimumLayoutWidthDidChange):
        Update the geometry if needed.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
        Update the intrinsic content size.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange):
        Call through to WebPageProxy::intrinsicContentSizeDidChange.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
        Pass along the minimum layout width.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::intrinsicContentSizeDidChange):
        Call through to the page client.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::contentsSizeChanged):
        Call DrawingArea::mainFrameContentSizeChanged.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::mainFrameContentSizeChanged):
        Add empty stub.

        (WebKit::DrawingArea::updateGeometry):
        Update signature.

        * WebProcess/WebPage/DrawingArea.messages.in:
        Add minimumLayoutWidth to UpdateGeometry.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        If the content size change is not coming from updateGeometry, send an InstrinsicContentSizeDidChange message.

        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        If m_minimumLayoutWidth is positive, do an initial layout pass to figure out the height of the page and then do another
        layout with the viewport set to that height.

2012-11-29  Anders Carlsson  <andersca@apple.com>

        CoreIPC::Connection should retain its xpc_connection_t
        https://bugs.webkit.org/show_bug.cgi?id=103671
        <rdar://problem/12717331>

        Reviewed by Beth Dakin.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::platformInitialize):
        Retain the xpc_connection_t object here to balance the xpc_object_release in platformInvalidate.

2012-11-29  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Unreviewed build fix.  Build was failing
        because the export definition file included a debug-only
        symbol.  It's not needed and shouldn't be included for export.

        * win/WebKit2.def: Don't require notSolidColor to be exported.
        * win/WebKit2CFLite.def: Ditto.

2012-11-29  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Only plain text can be copied out of PDFs
        https://bugs.webkit.org/show_bug.cgi?id=103591
        <rdar://problem/12555161>

        Reviewed by Alexey Proskuryakov.

        Enable rich data to be copied from PDFKit to the pasteboard.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add writeItemsToPasteboard.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate writeItemsToPasteboard:withTypes:]): Move implementation to PDFPlugin.
        (WebKit::PDFPlugin::writeItemsToPasteboard): Don't round-trip through WebCore for pasteboard operations,
        use WebContext directly. This provides a simple way to hand over a buffer for complex pasteboard types
        (RTF, HTML, etc.). Use this interface for arbitrary non-plain-text pasteboard data that PDFKit hands us.

2012-11-29  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [WebKit2] Embed the HTTP authentication dialog into the WebView
        https://bugs.webkit.org/show_bug.cgi?id=103277

        Reviewed by Carlos Garcia Campos.

        Embed the WebKit2 HTTP authentication dialog into the WebView. Add the dialog as a child
        of the WebKitWebViewBase container (like the web inspector).

        We do not yet properly handle pages that require authentication for more than one resource.
        As that is an uncommon situation, it will be handled in another patch.

        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp:
        (WebKit::drawSignal): We have to override the draw signal of the dialog to draw
        a GtkWindow background on the widget. This is required because the widget doesn't
        have a real GtkWindow to draw its background.
        (WebKit::loadChangedSignal): When a new load starts in the WebView destroy the dialog. This
        is so that the dialog doesn't stick around when the user chooses to navigate away from the
        page requiring authentication.
        (WebKit::WebKit2GtkAuthenticationDialog::WebKit2GtkAuthenticationDialog): Create an eventbox
        and frame to hold the dialog contents. Also append the 'background' widget class to the
        event box, so that it can draw a GtkWindow background in the draw signal handler.
        (WebKit::WebKit2GtkAuthenticationDialog::~WebKit2GtkAuthenticationDialog): Disconnect the
        load status changed signal handler.
        (WebKit::WebKit2GtkAuthenticationDialog::show): When it's time to show the dialog, add it to
        WebKitWebViewBase.
        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h: Add some new methods for handling the
        embedded dialog.
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didReceiveAuthenticationChallengeInFrame): Collapse the creation of the dialog into one line.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate): Add the dialog as a property of the private structure.
        (webkitWebViewChildIsInternalWidget): Added this helper used for determining when a child widget
        is "internal" (ie the web inspector or the authentication dialog).
        (webkitWebViewBaseContainerAdd): Only add non-internal widgets to the children map.
        (webkitWebViewBaseAddAuthenticationDialog): Added.
        (webkitWebViewBaseAddWebInspector): Added this more-foolproof method of adding a web inspector
        to the WebView. This also aligns it with the way the authentication dialog is added.
        (webkitWebViewBaseContainerRemove): When removing the authentication dialog, zero out the
        field in the private structure.
        (webkitWebViewBaseContainerForall): Add support for the authentication dialog here too.
        (webkitWebViewBaseChildMoveResize): Don't pass on move_resize events to internal children.
        (webkit_web_view_base_init): Zero out the authentication dialog member on init.
        (webkitWebViewBaseDraw): If the authentication dialog is active, draw a shadow over web content.
        (resizeWebKitWebViewBaseFromAllocation): Make the authentication dialog centered in the view.
        (webkitWebViewBaseKeyPressEvent): Pass on key events to the authentication dialog if active.
        (webkitWebViewBaseButtonPressEvent): If the authentication dialog is active don't pass button events
        to web content.
        (webkitWebViewBaseButtonReleaseEvent):  Ditto.
        (webkitWebViewBaseScrollEvent): Ditto.
        (webkitWebViewBaseMotionNotifyEvent): Ditto.
        (webkitWebViewBaseFocus): Pass on focus events to the authentication dialog so that tabbing between
        elements in the dialog works correctly.
        (webkit_web_view_base_class_init): Hook up the focus event.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Add new methods for adding the authentication dialog
        and the web inspector.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::createInspectorWindow): Use the new method for adding the web inspector.

2012-11-29  Andrei Bucur  <abucur@adobe.com>

        Fix the build after r136095
        https://bugs.webkit.org/show_bug.cgi?id=103629

        Unreviewed.

        Add a static_cast to fix the build.

        * Shared/mac/ObjCObjectGraphCoders.mm:
        (WebKit::ObjCObjectGraphEncoder::baseEncode):

2012-11-29  Christophe Dumez  <christophe.dumez@intel.com>

        [CoordinatedGraphics] Have LayerTreeRenderer::ensureLayer() return the layer
        https://bugs.webkit.org/show_bug.cgi?id=103645

        Reviewed by Noam Rosenthal.

        The current LayerTreeRenderer code keep calling ensureLayer() and then
        LayerMap::find() to retrieve the layer. Since ensureLayer() already has
        a pointer to the layer, we can simply have the function return it.
        This is slightly more efficient and it makes the code a bit simpler.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::ensureLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:

2012-11-29  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: User events are sent to web page before it is shown
        https://bugs.webkit.org/show_bug.cgi?id=101753

        Reviewed by Jocelyn Turcotte.

        User events are suppressed on WEB process side while drawing area is frozen.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::wheelEvent):
        (WebKit::WebPage::keyEvent):
        (WebKit::WebPage::gestureEvent):
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::sendIfEventCannotBeHandled):
        (WebKit):
        (WebKit::WebPage::didCompletePageTransition):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2012-11-29  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Possible to resize out of bounds 
        https://bugs.webkit.org/show_bug.cgi?id=103521

        Reviewed by Jocelyn Turcotte.

        Enforce the viewportBounds after resize, and ensure a user fitted page remains
        fit on viewport resize, but not on content growth.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_resize.qml: Added.
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):

2012-11-29  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Commit the preedit string in the input method when focus is about to be moved.
        https://bugs.webkit.org/show_bug.cgi?id=97774

        Reviewed by Kenneth Rohde Christiansen.

        Implements the handler for willSetInputMethodState in WebKit2 in Qt.
        This is needed to tell the input method instance in Qt to commit its
        preedit content when the focus has moved to another node to prevent a
        bug where the old preedit string was kept as the preedit string and
        the editor moved focus back to the old node when continuing to enter
        text via the input method.

        This behavior is analog to the behavior of the QtQuick text input
        elements.

        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebViewPrivate::handleWillSetInputMethodState):
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        (QRawWebViewPrivate):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::handleWillSetInputMethodState):
        (WebKit):
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleWillSetInputMethodState):
        (WebKit):
        * UIProcess/qt/QtWebPageEventHandler.h:
        (QtWebPageEventHandler):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit::WebPageProxy::willSetInputMethodState):
        (WebKit):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::willSetInputMethodState):

2012-11-28  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] The WebView should be flickable only using touch events
        https://bugs.webkit.org/show_bug.cgi?id=100964

        Reviewed by Kenneth Rohde Christiansen.

        Let a user interacting with the WebView using a mouse the same way that a
        desktop browser would.
        This allows normal behaviors like text selecting, hover events, mouse cursors
        as well as avoid touch highlighting and touch adjustment.

        To do so we let all mouse events to be handled by the page directly instead
        of sending them to QtWebPageEventHandler. Since unhandled mouse events aren't
        pushed back to the PageClient like touch events does, this have the intended
        behavior of not letting mouse events affect QQuickFlickable.

        * UIProcess/API/qt/qquickwebview.cpp:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewFlickablePrivate):

2012-11-29  Andras Becsi  <andras.becsi@digia.com>

        [Qt] Fix installation of QtWebProcess binary
        https://bugs.webkit.org/show_bug.cgi?id=101735

        Reviewed by Simon Hausmann.

        If available use QLibraryInfo::LibraryExecutablesPath to find
        the web process and the plugin process and deploy both helper
        processes to QT_INSTALL_LIBEXECS.

        The effective fallback used to find the helper processes becomes:
            1. Application directory
            2. Qt library executables directory (QLibraryInfo::LibraryExecutablesPath)
            3. Qt binaries directory (QLibraryInfo::BinariesPath)
            4. No absolute path used

        * PluginProcess.pro:
        * Shared/qt/ProcessExecutablePathQt.cpp:
        (WebKit::executablePath):
        * WebProcess.pro:

2012-11-28  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Generate big_button_theme.edj
        https://bugs.webkit.org/show_bug.cgi?id=103511

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::pathForTheme):
        (EWK2UnitTest):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        (EWK2UnitTestEnvironment):
        * UIProcess/API/efl/tests/resources/big_button_theme.edj: Removed.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Modified to use generated big_button_theme.edj
        (TEST_F):

2012-11-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135973.
        http://trac.webkit.org/changeset/135973
        https://bugs.webkit.org/show_bug.cgi?id=103604

        It made API test crash on EFL bots (Requested by gyuyoung on
        #webkit).

        * UIProcess/API/efl/ewk_view.cpp:
        (createEwkView):

2012-11-28  Michael Pruett  <michael@68k.org>

        IndexedDB: Remove duplicate toWireString() and createFromWire() methods in JSC SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=103554

        Reviewed by Kentaro Hara.

        In r135022, duplicate createFromWire() and toWireString() methods
        were added to the JSC version of SerializedScriptValue. In
        order to allow the JSC SerializedScriptValue to compile when
        ENABLE(INDEXED_DATABASE) is turned on, these new methods have
        been removed and the old methods have been moved outside the
        ENABLE(INDEXED_DATABASE) guard.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-28  Sam Weinig  <sam@webkit.org>

        Fix 32bit build.

        * Shared/mac/ObjCObjectGraphCoders.mm:
        (WebKit::WebContextObjCObjectGraphDecoderImpl::decode):
        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):

2012-11-28  Sam Weinig  <sam@webkit.org>

        Add an objc object graph wrapper and coder for WKConnection message bodies
        https://bugs.webkit.org/show_bug.cgi?id=103589

        Reviewed by Anders Carlsson.

        Adds a new type of UserMessageCoder for objc object graphs that allows encoding/decoding
        WKBrowsingContextController across the wire.

        * Shared/APIClient.h:
        (APIClient):
        (WebKit::APIClient::client):
        Add accessor for the ClientInterface.

        * Shared/APIObject.h:
        Add new TypeObjCObjectGraph type.

        * Shared/mac/ObjCObjectGraph.h: Added.
        (ObjCObjectGraph):
        (WebKit::ObjCObjectGraph::create):
        (WebKit::ObjCObjectGraph::root):
        (WebKit::ObjCObjectGraph::ObjCObjectGraph):
        (WebKit::ObjCObjectGraph::type):
        * Shared/mac/ObjCObjectGraph.mm: Added.
        Wraps 

        * Shared/mac/ObjCObjectGraphCoders.h: Added.
        (WebContextObjCObjectGraphEncoder):
        (WebContextObjCObjectGraphDecoder):
        (InjectedBundleObjCObjectGraphEncoder):
        (InjectedBundleObjCObjectGraphDecoder):
        * Shared/mac/ObjCObjectGraphCoders.mm: Added.
        (WebKit::typeFromObject):
        (ObjCObjectGraphEncoder):
        (WebKit::ObjCObjectGraphEncoder::baseEncode):
        (WebKit::ObjCObjectGraphEncoder::ObjCObjectGraphEncoder):
        (ObjCObjectGraphDecoder):
        (WebKit::ObjCObjectGraphDecoder::baseDecode):
        (WebKit::ObjCObjectGraphDecoder::ObjCObjectGraphDecoder):
        (WebContextObjCObjectGraphEncoderImpl):
        (WebKit::WebContextObjCObjectGraphEncoderImpl::WebContextObjCObjectGraphEncoderImpl):
        (WebKit::WebContextObjCObjectGraphEncoderImpl::encode):
        (WebContextObjCObjectGraphDecoderImpl):
        (WebKit::WebContextObjCObjectGraphDecoderImpl::WebContextObjCObjectGraphDecoderImpl):
        (WebKit::WebContextObjCObjectGraphDecoderImpl::decode):
        (InjectedBundleObjCObjectGraphEncoderImpl):
        (WebKit::InjectedBundleObjCObjectGraphEncoderImpl::InjectedBundleObjCObjectGraphEncoderImpl):
        (WebKit::InjectedBundleObjCObjectGraphEncoderImpl::encode):
        (InjectedBundleObjCObjectGraphDecoderImpl):
        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::InjectedBundleObjCObjectGraphDecoderImpl):
        (WebKit::InjectedBundleObjCObjectGraphDecoderImpl::decode):
        (WebKit::WebContextObjCObjectGraphEncoder::WebContextObjCObjectGraphEncoder):
        (WebKit::WebContextObjCObjectGraphEncoder::encode):
        (WebKit::WebContextObjCObjectGraphDecoder::WebContextObjCObjectGraphDecoder):
        (WebKit::WebContextObjCObjectGraphDecoder::decode):
        (WebKit::InjectedBundleObjCObjectGraphEncoder::InjectedBundleObjCObjectGraphEncoder):
        (WebKit::InjectedBundleObjCObjectGraphEncoder::encode):
        (WebKit::InjectedBundleObjCObjectGraphDecoder::InjectedBundleObjCObjectGraphDecoder):
        (WebKit::InjectedBundleObjCObjectGraphDecoder::decode):
        Added.

        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (+[WKBrowsingContextController _browsingContextControllerForPageRef:]):
        * UIProcess/API/mac/WKBrowsingContextControllerInternal.h:
        Expose the accessor to get the WKPageRef from a WKBrowsingContextController and add a 
        new method to get a WKBrowsingContextController from a WKPageRef.

        * UIProcess/API/mac/WKConnection.mm:
        (-[WKConnection sendMessageWithName:body:]):
        (didReceiveMessage):
        Switch WKConnection to use ObjCObjectGraph to encode the messageBody.

        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        (WebKit::WebContextUserMessageDecoder::decode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        (WebKit::InjectedBundleUserMessageDecoder::decode):
        Proxy to ObjCObjectGraph coders when user message encoding/decoding ObjCObjectGraph APIObjects.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (-[WKWebProcessPlugInController _browserContextControllerForBundlePageRef:]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
        Add method to get WKWebProcessPlugInController from the WKBundlePageRef.

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

2012-11-28  Sergio Villar Senin  <svillar@igalia.com>

        [WK2][Qt] Add drag&drop support to Flickable webView
        https://bugs.webkit.org/show_bug.cgi?id=100778

        Reviewed by Jocelyn Turcotte.

        Enable the ItemAcceptsDrops flag in the flickable WebView. This
        will allow the WebView to receive drag&drop events.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):

2012-11-28  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Move Distribution stuffs from ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=103481

        Reviewed by Hajime Morita.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-28  Tim Horton  <timothy_horton@apple.com>

        [mac] Dictionary lookup bubble loses intrarange formatting
        https://bugs.webkit.org/show_bug.cgi?id=103496
        <rdar://problem/12762172>

        Reviewed by Alexey Proskuryakov.

        Pass an NSAttributedString (made via WebHTMLConverter on the WebProcess side) through
        when showing dictionary popups, so that we preserve more formatting in the yellow dictionary
        highlight. Also, remove the fontInfo member from DictionaryPopupInfo, since we don't need it anymore.

        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode): Don't encode the now-removed fontInfo member.
        (WebKit::DictionaryPopupInfo::decode): Don't decode the now-removed fontInfo member.
        * Shared/DictionaryPopupInfo.h: Remove the fontInfo member.
        * UIProcess/API/mac/PageClientImpl.h:
        (PageClientImpl): didPerformDictionaryLookup should take an AttributedString instead of a plain String, and
        no longer needs to take the page scale factor.
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didPerformDictionaryLookup): Use the AttributedString we're handed from the WebProcess
        instead of constructing one ourselves; this way, we have all the attributes instead of just a single font.
        * UIProcess/PageClient.h:
        (PageClient): didPerformDictionaryLookup should take an AttributedString instead of a plain String.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): didPerformDictionaryLookup should take an AttributedString instead of a plain String.
        * UIProcess/WebPageProxy.messages.in: DidPerformDictionaryLookup should take an AttributedString instead of a plain String.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::didPerformDictionaryLookup): didPerformDictionaryLookup should take an AttributedString instead of a plain String.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::performDictionaryLookupForRange): performDictionaryLookupForRange should hand WebPageProxy an AttributedString
        constructed via WebHTMLConverter instead of a plain text string paired with a single font descriptor.
        Also, scale the size of every font attribute by the current pageScaleFactor.

2012-11-28  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash when requesting favicon.
        https://bugs.webkit.org/show_bug.cgi?id=102689

        Reviewed by Brent Fulgham.

        * win/WebKit2CFLite.def: Link fixes.
        * win/WebKit2.def: Link fixes.

2012-11-28  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r135962): m_pendingSyncBackingStores needs to be cleared in LayerTreeRenderer::purgeGLResources()
        https://bugs.webkit.org/show_bug.cgi?id=103527

        Reviewed by Jocelyn Turcotte.

        Make sure m_pendingSyncBackingStores is cleared in
        LayerTreeRenderer::purgeGLResources() to avoid trying to assign
        backing store to layers after everything has been invalidated.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::purgeGLResources):

2012-11-28  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r135962): ASSERTION FAILED: !m_pedningSyncBackingStores.contains(layer)
        https://bugs.webkit.org/show_bug.cgi?id=103498

        Reviewed by Kenneth Rohde Christiansen.

        We hit the !m_pedningSyncBackingStores.contains(layer) assertion
        in LayerTreeRenderer when 2 asynchronous backing store operations
        are pending. The current code checks if the layer already has a
        backing store in its guard but this is insufficient as it is not
        checking the m_pendingSyncBackingStores hash for pending backing
        store changes.

        In this patch, we improve the guards in createBackingStoreIfNeeded()
        and removeBackingStoreIfNeeded() to check not only if the layer has
        already a backing store but also check m_pendingSyncBackingStores
        for pending changes. This is safer and it allows for optimizations
        in the cases where we have both a removal and a creation pending.
        In those cases, we can simply cancel the pending operation instead
        of queueing a new one.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::getBackingStore):
        (WebKit::LayerTreeRenderer::createBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::removeBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::commitPendingBackingStoreOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:

2012-11-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] MiniBrowser rendering should not get blurry when scrolled down with different scale values
        https://bugs.webkit.org/show_bug.cgi?id=103079

        Reviewed by Simon Hausmann.

        The problem was caused because we moved the page inside our viewport
        in non-discrete units.

        Now instead of changing the content visible in our viewport by
        applying scale, and then transforming the CSS offset, we now first
        discretely position the page in UI coordinates.

        This patch also removes some dead code.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::transformFromScene):
        (EwkViewImpl::displayTimerFired):

           Transform according to the page position.

        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::setPagePosition): Now stores a float.
        (EwkViewImpl::discretePagePosition): Returns the discrete page position.
        (EwkViewImpl):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        (WebKit::PageClientLegacyImpl::pageDidRequestScroll):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition): Convert to page position.
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::scaleFactor): Use the value
        from the view directly.
        (WebKit::PageViewportControllerClientEfl::contentPosition):
        (PageViewportControllerClientEfl):

2012-11-28  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2][AC] No need to export GL properties from EwkViewImpl class
        https://bugs.webkit.org/show_bug.cgi?id=103505

        Reviewed by Kenneth Rohde Christiansen.

        No need to export GL data members from EwkViewImpl class, 
        those are internal implementation objects not used by anyone outside the class.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::createGLSurface):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        (EwkViewImpl::evasGLContext):
        (EwkViewImpl::evasGLSurface):

2012-11-28  Joone Hur  <joone.hur@intel.com>

        [EFL][WK2][AC] Clear the viewport with white color
        https://bugs.webkit.org/show_bug.cgi?id=103495

        When initializing a GL surface, we should clear the buffer with white color.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createGLSurface):

2012-11-27  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Duplicated WebPageGroup initialization
        https://bugs.webkit.org/show_bug.cgi?id=103229

        Reviewed by Gyuyoung Kim.

        WebPageGroup does not need to be created in creating EwkView when the pageGroupRef is 0
        because the default WebPageGroup(m_defaultPageGroup) is created in WebContext constructor.

        As a side effect on the duplicated initialization, pageGroupID increases even when the EwkView
        is created with default context.

        * UIProcess/API/efl/ewk_view.cpp:
        (createEwkView):

2012-11-27  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(r135620): ASSERT(m_state.drawsContent && m_state.contentsVisible && !m_size.isEmpty()) hits in TextureMapperLayer::paintSelf().
        https://bugs.webkit.org/show_bug.cgi?id=103171

        Reviewed by Noam Rosenthal.

        Ensure that TextureMapperLayer has a backing store when the layer has
        drawsContent and contentsVisible properties and the size of the layer is not
        empty.

        LayerTreeRenderer::setLayerState() must not set a backing store to
        TextureMapperLayer because setLayerState() just changes states of
        GraphicsLayerTextureMapper instead of TextureMapperLayer.

        Now LayerTreeRenderer::flushLayerChanges() sets a backing store as well as layer
        states to TextureMapperLayer.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::getBackingStore):
        (WebKit::LayerTreeRenderer::prepareContentBackingStore):
        (WebKit::LayerTreeRenderer::createBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::removeBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::commitPendingBackingStoreOperations):
        (WebKit::LayerTreeRenderer::flushLayerChanges):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebCore):

2012-11-27  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Should not be able to edit read-only text annotations
        https://bugs.webkit.org/show_bug.cgi?id=103387
        <rdar://problem/12752313>

        Reviewed by Alexey Proskuryakov.

        Don't allow read-only annotations to become active.

        * WebKit2.xcodeproj/project.pbxproj: Add PDFAnnotationTextWidgetDetails.h.
        * WebProcess/Plugins/PDF/PDFAnnotationTextWidgetDetails.h: Added.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::setActiveAnnotation): Bail if the annotation is read-only.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm: Move PDFAnnotationTextWidget details category to PDFAnnotationTextWidgetDetails.h

2012-11-27  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor code managing a backing store in LayerTreeRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=103298

        Reviewed by Noam Rosenthal.

        This patch makes LayerTreeRenderer assign a content backing store to
        TextureMapperLayer only in setLayerState(). Currently, createTile() can assign
        the backing store to TextureMapperLayer and it can break the invariant condition
        of TextureMapperLayer: TextureMapperLayer can have its own backing store only if
        the layer has following conditions: drawsContent, contentsVisible and non empty
        size.

        In addition, the modified code about creating and removing a backing store
        matches the same purpose code of CoordinatedGraphicsLayer and
        GraphicsLayerTextureMapepr.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::layerShouldHaveBackingStore):
        (WebKit):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::getBackingStore):
        (WebKit::LayerTreeRenderer::prepareContentBackingStore):
        (WebKit::LayerTreeRenderer::createBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::removeBackingStore):
        (WebKit::LayerTreeRenderer::resetBackingStoreSizeToLayerSize):
        (WebKit::LayerTreeRenderer::createTile):
        (WebKit::LayerTreeRenderer::removeTile):
        (WebKit::LayerTreeRenderer::updateTile):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):
            This method does not create a backing store anymore because flushCompositingStateForThisLayerOnly()
            can create a backing store if needed. Moreover, we must sync a layer state prior to creating a backing store
            after this patch, because LayerTreeRenderer::createTile() does not create a backing store anymore.

2012-11-27  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadData):

2012-10-22  Jer Noble  <jer.noble@apple.com>

        [WK2] [Mac] WebKit Full Screen API should use NSWindow full screen API.
        https://bugs.webkit.org/show_bug.cgi?id=100025

        Reviewed by Dan Bernstein.

        Use the NSWindow full screen API when taking the WebView full screen. To facility the case where the browser window is already
        in full screen mode, no longer hide the browser window when entering full screen. Instead, provide a placeholder view with 
        instructions to click the placeholder to exit full screen.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController init]): Set self as the window's delegate; enable window's full screen action.
        (-[WKFullScreenWindowController dealloc]): Clear our window's delegate.
        (-[WKFullScreenWindowController applicationDidChangeScreenParameters:]): Remove reference to _updateWindowAndDockForFullScreen.
        (-[WKFullScreenWindowController enterFullScreen:]):  Ditto. Create a WKFullScreenPlaceholderView instead of generic NSImageView.
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): Ditto. Call NSWindow enterFullScreen: API.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Show the warning view.
        (-[WKFullScreenWindowController exitFullScreen]): Hide the warning view.
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]): Add special case where we are exiting
            from full screen mode when the full screen window is not on screen.
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): Remove reference to _updateMenuAndDockForFullScreen.
        (-[WKFullScreenWindowController customWindowsToEnterFullScreenForWindow:]): Added. Return the background window and the full screen window.
        (-[WKFullScreenWindowController customWindowsToExitFullScreenForWindow:]): Ditto.
        (-[WKFullScreenWindowController window:startCustomAnimationToEnterFullScreenWithDuration:]): Added. Call through to _startEnterFullScreenAnimationWithDuration:
        (-[WKFullScreenWindowController window:startCustomAnimationToExitFullScreenWithDuration:]): Added. Call through to _startExitFullScreenAnimationWithDuration:

2012-11-27  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] 3D pixel tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=102833

        Reviewed by Kenneth Rohde Christiansen.

        Added an API for generating a snapshot, to be used from WebKitTestRunner.

        * PlatformEfl.cmake:
        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewGetSnapshot):
        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::onFaviconChanged):
        (EwkViewImpl::takeSnapshot):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/SnapshotImageGL.cpp: Added.
        (getImageFromCurrentTexture):
        * UIProcess/API/efl/SnapshotImageGL.h: Added.

2012-11-27  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Page scale factor should affect subframe PDFs
        https://bugs.webkit.org/show_bug.cgi?id=103291
        <rdar://problem/12555249>

        Reviewed by Darin Adler.

        For subframe PDFs, hand PDFKit the pageScaleFactor for the parent page
        so it can scale its drawing appropriately.

        * WebProcess/Plugins/PDF/PDFPlugin.h: Add updatePageAndDeviceScaleFactors.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Call updatePageAndDeviceScaleFactors
        instead of manually updating PDFLayerController's device scale factor.
        (WebKit::PDFPlugin::updatePageAndDeviceScaleFactors): Hand PDFLayerController
        the "underlying" (non-zoom) content scale, which is the product of the
        device scale and the page scale.
        (WebKit::PDFPlugin::contentsScaleFactorChanged): Use updatePageAndDeviceScaleFactors.
        (WebKit::PDFPlugin::geometryDidChange): Use updatePageAndDeviceScaleFactors to keep
        PDFLayerController's notion of the page scale up to date when the plugin's
        geometry changes.

2012-11-27  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Scroll bars do not grow on hover
        https://bugs.webkit.org/show_bug.cgi?id=103382
        <rdar://problem/12555262>

        Reviewed by Beth Dakin.

        PDFPlugin needs to forward relevant mouse events to the scrollbars.
        In addition, it needs to implement currentMousePosition so ScrollableArea and friends
        can find the mouse position at arbitrary times.

        I also took this opportunity to factor some coordinate space conversion functions out.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (WebKit::PDFPlugin::currentMousePosition): Added. Return the last mouse position in our coordinate space.
        (WebKit::PDFPlugin::convertFromRootViewToPlugin): Added.
        (WebKit::PDFPlugin::convertFromPluginToPDFView): Added.
        (PDFPlugin):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromRootViewToPlugin): Convert a point from content space to plugin space, via the transform we get in geometryDidChange.
        (WebKit::PDFPlugin::convertFromPluginToPDFView): Convert a point from plugin space to PDFLayerController's flipped coordinate space.
        (WebKit::PDFPlugin::geometryDidChange): Use convertFromPluginToPDFView.
        (WebKit::PDFPlugin::nsEventForWebMouseEvent): Cache the mouse position in plugin space instead of PDFLayerController space. Use our new conversion functions.
        (WebKit::PDFPlugin::handleMouseEvent): Forward relevant mouse events to scrollbars:
        Determine which scrollbar the mouse is over now, and which it was previously over, and use that to:
        If the mouse is moved over a scrollbar, send mouseEntered to the scrollbar.
        If the mouse is moved out of a scrollbar, send mouseExited to the scrollbar.
        If the mouse is currently over a scrollbar, send mouseMoved/Up/Down to the scrollbar instead of PDFLayerController.
        If the mouse is currently over the scroll corner, bail, because nobody should get those events.

2012-11-27  Dan Bernstein  <mitz@apple.com>

        Entering Tab View after a bunch of YouTube pages were opened in background tabs makes all of them start playing simultaneously
        https://bugs.webkit.org/show_bug.cgi?id=103358

        Reviewed by Adele Peterson.

        To fix this, this patch adds WKPageSetMayStartMediaWhenInWindow(), which allows the client to
        prevent media from starting automatically when the view is put in a window.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Encode mayStartMediaWhenInWindow.
        (WebKit::WebPageCreationParameters::decode): Decode mayStartMediaWhenInWindow.
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters): Added boolean member mayStartMediaWhenInWindow.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMayStartMediaWhenInWindow): Added. Calls through to WebPageProxy.
        * UIProcess/API/C/WKPagePrivate.h: Declared WKPageSetMayStartMediaWhenInWindow.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Added initializiation of m_mayStartMediaWhenInWindow
        to true, the value matching the current behavior.
        (WebKit::WebPageProxy::setMayStartMediaWhenInWindow): Added. Updates
        m_mayStartMediaWhenInWindow and sends a message to the Web process to do the same.
        (WebKit::WebPageProxy::creationParameters): Changed to set mayStartMediaWhenInWindow in the
        process creation parameters.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Declared setMayStartMediaWhenInWindow() and added member variable
        m_mayStartMediaWhenInWindow.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialized m_mayStartMediaWhenInWindow from the creation
        parameters.
        (WebKit::WebPage::setIsInWindow): Made starting of media upon being added to a window
        conditional on m_mayStartMediaWhenInWindow.
        (WebKit::WebPage::setMayStartMediaWhenInWindow): Added. Sets m_mayStartMediaWhenInWindow. If
        already in a window when changing from false to true, starts m_setCanStartMediaTimer.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Declared setMayStartMediaWhenInWindow() and added member variable m_mayStartMediaWhenInWindow.
        * WebProcess/WebPage/WebPage.messages.in: Added SetMayStartMediaWhenInWindow.

2012-11-27  Pratik Solanki  <psolanki@apple.com>

        objc/objc-runtime.h does not exist on all PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=101780

        Reviewed by Brent Fulgham.

        Clean up header includes so we don't include objc/objc-runtime.h.

        * PluginProcess/mac/PluginProcessShim.mm:
        * UIProcess/API/mac/PDFViewController.mm:

2012-11-27  Alexey Proskuryakov  <ap@apple.com>

        [WK2] WebPageProxy::relatedPages() cannot assume that this page is known to process
        https://bugs.webkit.org/show_bug.cgi?id=103433
        <rdar://problem/12543513>

        Reviewed by Jessie Berlin.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::relatedPages): Removed an incorrect
        assertion, and modified code to not rely on its condition being true.

2012-11-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][Qt][WK2] Tiles not always painted
        https://bugs.webkit.org/show_bug.cgi?id=103271

        Reviewed by Kenneth Rohde Christiansen.

        The problem turned up because visible content was synchromized before the new fixed
        layout size had been applied in the web process.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeViewportSize):
        (WebKit::PageViewportController::didChangeViewportAttributes):

2012-11-27  Yael Aharon  <yael.aharon@intel.com>

        [EFL] Graphics layer edges are sometimes very pixelated
        https://bugs.webkit.org/show_bug.cgi?id=103302

        Reviewed by Kenneth Rohde Christiansen.

        The call setEnableEdgeDistanceAntialiasing(true) was lost in the refactoring of
        http://trac.webkit.org/changeset/135401.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):

2012-11-27  KwangYong Choi  <ky0.choi@samsung.com>

        [X11] Allow empty plugin name and description during scan plugin
        https://bugs.webkit.org/show_bug.cgi?id=103234

        Reviewed by Simon Hausmann.

        Empty entries should be allowed when split the output string of scan plugin
        because the plugin name and the description can be empty string.

        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2012-11-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135819.
        http://trac.webkit.org/changeset/135819
        https://bugs.webkit.org/show_bug.cgi?id=103388

        It broke many tests on Qt and EFL WK2 platforms (Requested by
        Ossy on #webkit).

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyRelatedPages):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setIsInWindow):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-11-27  Kyungjin Kim  <gen.kim@samsung.com>

        [WK2] Expose Accelerated2dCanvas flag set and get in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=103008

        Reviewed by Gyuyoung Kim.

        Fix API names in WKPreferences from 2d to 2D.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAccelerated2DCanvasEnabled):
        (WKPreferencesGetAccelerated2DCanvasEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:

2012-11-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135786.
        http://trac.webkit.org/changeset/135786
        https://bugs.webkit.org/show_bug.cgi?id=103379

        It made 3 plugin tests timeout on several platforms (Requested
        by Ossy on #webkit).

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::linkClicked):

2012-11-27  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove the maskTarget member of CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=103297

        Reviewed by Noam Rosenthal.

        Remove the maskTarget member of CoordinatedGraphicsLayer, which is not used.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135822.
        http://trac.webkit.org/changeset/135822
        https://bugs.webkit.org/show_bug.cgi?id=103369

        Undo the revert of r135818, since that change does not affect
        code used by Chromium (Requested by apavlov on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):

2012-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135818.
        http://trac.webkit.org/changeset/135818
        https://bugs.webkit.org/show_bug.cgi?id=103368

        platform/chromium/virtual/threaded/compositing/visibility
        /visibility-simple-webgl-layer.html crash on Mountain Lion
        (Requested by apavlov on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):

2012-11-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/11931191> Entering Tab View after a bunch of YouTube pages were opened in background tabs makes all of them start playing simultaneously
        https://bugs.webkit.org/show_bug.cgi?id=103358

        Reviewed by Adele Peterson.

        To fix this, this patch adds WKPageSetMayStartMediaWhenInWindow(), which allows the client to
        prevent media from starting automatically when the view is put in a window.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Encode mayStartMediaWhenInWindow.
        (WebKit::WebPageCreationParameters::decode): Decode mayStartMediaWhenInWindow.
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters): Added boolean member mayStartMediaWhenInWindow.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMayStartMediaWhenInWindow): Added. Calls through to WebPageProxy.
        * UIProcess/API/C/WKPagePrivate.h: Declared WKPageSetMayStartMediaWhenInWindow.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Added initializiation of m_mayStartMediaWhenInWindow
        to true, the value matching the current behavior.
        (WebKit::WebPageProxy::setMayStartMediaWhenInWindow): Added. Updates
        m_mayStartMediaWhenInWindow and sends a message to the Web process to do the same.
        (WebKit::WebPageProxy::creationParameters): Changed to set mayStartMediaWhenInWindow in the
        process creation parameters.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Declared setMayStartMediaWhenInWindow() and added member variable
        m_mayStartMediaWhenInWindow.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialized m_mayStartMediaWhenInWindow from the creation
        parameters.
        (WebKit::WebPage::setIsInWindow): Made starting of media upon being added to a window
        conditional on m_mayStartMediaWhenInWindow.
        (WebKit::WebPage::setMayStartMediaWhenInWindow): Added. Sets m_mayStartMediaWhenInWindow. If
        already in a window when changing from false to true, starts m_setCanStartMediaTimer.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Declared setMayStartMediaWhenInWindow() and added member variable m_mayStartMediaWhenInWindow.
        * WebProcess/WebPage/WebPage.messages.in: Added SetMayStartMediaWhenInWindow.

2012-11-26  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Set visibility to a mask layer in GraphicsLayer::setContentsVisible().
        https://bugs.webkit.org/show_bug.cgi?id=103297

        Reviewed by Noam Rosenthal.

        GraphicsLayerTextureMapper and CoordinatedGraphicsLayer set the visibility of a
        mask layer in setContentsVisible() and setMaskLayer() like setting a size.
        This patch is needed because RenderLayerBacking does not set the visibility to a
        mask layer like the size.

        This patch does not change user experience because an invisible layer is not
        rendered although the mask layer is rendered. In that sense, it is an
        optimization patch.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):

2012-11-26  Kyungjin Kim  <gen.kim@samsung.com>

        [WK2] Expose Accelerated2dCanvas flag set and get in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=103008

        Reviewed by Gyuyoung Kim.

        Add setting APIs for accelerated 2d canvas in WebKit2.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAccelerated2dCanvasEnabled):
        (WKPreferencesGetAccelerated2dCanvasEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-11-26  Tim Horton  <timothy_horton@apple.com>

        Ensure that plugins are initialized before using handleEditingCommand/isEditingCommandEnabled/shouldAllowScripting
        https://bugs.webkit.org/show_bug.cgi?id=103288

        Reviewed by Dan Bernstein.

        Other PluginView methods that use m_plugin null-check m_plugin and check
        that the plugin has finished initializing before using it. These three
        should do the same thing.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::handleEditingCommand):
        (WebKit::PluginView::isEditingCommandEnabled):
        (WebKit::PluginView::shouldAllowScripting):

2012-11-26  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Subframe PDF context menus are in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=103284
        <rdar://problem/12727972>

        Reviewed by Dan Bernstein.

        Event position is in window coordinates, not content coordinates.
        Since we have no windowToScreen(), use windowToContents and contentsToScreen
        to get to screen coordinate space, which WKPopupContextMenu wants.

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

2012-11-26  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Ctrl-click opens a link in a PDF in addition to context menu
        https://bugs.webkit.org/show_bug.cgi?id=103282
        <rdar://problem/12710892>

        Reviewed by Dan Bernstein.

        Don't send standard mouse events to PDFKit if a click will also show/hide the context menu.

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

2012-11-26  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] Unreviewed build fix after r135767 without Tiled Backing Store
        https://bugs.webkit.org/show_bug.cgi?id=103320

        Unreviewed build fix.

        * WebProcess/Plugins/Plugin.cpp:
        * WebProcess/Plugins/Plugin.h:
        (WebCore):

2012-11-26  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadData):

2012-11-26  Jon Lee  <jonlee@apple.com>

        Pass clicks through to the restarted plugin
        https://bugs.webkit.org/show_bug.cgi?id=102150
        <rdar://problem/12695575>

        Reviewed by Simon Fraser.

        Expose convertToRootView() as a public function for all plugins. It converts the click point
        from local plugin coordinates to root view coordinates. When the events are sent to the
        plugin, the coordinate gets converted back to the local reference frame.
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::convertToRootView): Default implementation should not be reached.
        * WebProcess/Plugins/Plugin.h: Promote convertToRootView() from NetscapePlugin.h.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: An implementation already existed. Make the
        method virtual.
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::convertToRootView): Apply the transform to the provided point to return
        a point in root view coordinates.

        Change the threshold state to PlayingWithPendingMouseClick instead of Playing, since that is
        the earliest state where the plugin is playing.
        * WebProcess/Plugins/PluginView.cpp: Give the snapshot a little more time to generate.
        (WebKit::PluginView::didInitializePlugin): When the plugin has initialized, tell the plugin
        element to dispatch the pending mouse click.
        (WebKit::PluginView::paint):
        (WebKit::PluginView::createWebEvent): Helper function to convert a WebCore mouse event to a
        WebMouseEvent.
        (WebKit::PluginView::handleEvent): If the event is simulated, there is no source event from
        the UI process. So we fabricate one based on the simulated event.
        (WebKit::PluginView::invalidateRect):
        (WebKit::PluginView::isAcceleratedCompositingEnabled):
        * WebProcess/Plugins/PluginView.h:

2012-11-26  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Explicitly link against librt
        https://bugs.webkit.org/show_bug.cgi?id=103194

        Reviewed by Martin Robinson.

        Fixes broken build with undefined references to shm_open / shm_unlink
        symbols. SharedMemoryUnix.cpp uses these so we need to link with -lrt.

        * GNUmakefile.am:

2012-11-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add setting to enable / disable HTML5 local storage functionality
        https://bugs.webkit.org/show_bug.cgi?id=103224

        Reviewed by Laszlo Gombos.

        Add API to ewk_settings to enable / disable the HTML5
        local storage functionality. The functionality is
        enabled by default.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_local_storage_enabled_set):
        (ewk_settings_local_storage_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F): Add API test for ewk_settings_local_storage_enabled_get / set.

2012-11-26  Rafael Brandao  <rafael.lobo@openbossa.org>

        [CoordinatedGraphics] Access to LayerTreeRenderer::m_renderQueue should be thread safe
        https://bugs.webkit.org/show_bug.cgi?id=101341

        Reviewed by Noam Rosenthal.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::syncRemoteContent): The previous swap already clears the
        vector on m_renderQueue. It is also done in a thread-safe way, so clearing it afterward
        can be harmful as we've already released the lock.

2012-11-26  Jaehun Lim  <ljaehun.lim@samsung.com>

        Text Autosizing: Add Text Autosizing APIs for WK2
        https://bugs.webkit.org/show_bug.cgi?id=100633

        Reviewed by Sam Weinig.

        Implement basic Text Autosizing APIs for WK2.
        Text Autosizing is a useful feature for mobile browsers. It adjusts the font size
        of text in wide columns, and makes text more legible.
        This patch adds setting APIs for Text Autosizing in WK2.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTextAutosizingEnabled):
        (WKPreferencesGetTextAutosizingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2012-11-26  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] REGRESSION(r135575): It made all tests assert
        https://bugs.webkit.org/show_bug.cgi?id=103169

        Reviewed by Simon Hausmann.

        This fixes another regression introduced in r135515:
        initializeWebKitQt shouldn't implicitely call initializeWebCoreQt
        since it can be called from WebKit2 to initialize QStyle for testing.
        This would then lead to things such as PlatformStrategies being
        initialized twice.

        * qt/MainQt.cpp: No need to initialize anything if we're not using QStyle.
        (WebKit):
        (main):

2012-11-26  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(134142): ASSERT(!m_size.isZero()) hits in CoordinatedBackingStore::paintToTextureMapper().
        https://bugs.webkit.org/show_bug.cgi?id=103217

        Reviewed by Noam Rosenthal.

        It is possible for CoordinatedBackingStore of directed composited image to not
        have tiles, because CoordinatedImageBacking does not create tiles when the image
        is invisible.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):

2012-11-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: page contents is scaled wrongly
        https://bugs.webkit.org/show_bug.cgi?id=103090

        Reviewed by Kenneth Rohde Christiansen.

        Before this change the page contents scaling in PageViewportController was
        defined all the times by m_rawAttributes.initialScale. If initial scale had not
        been specified in the viewport meta tag it was set to m_minimumScaleToFit inside
        PageViewportController::didChangeViewportAttributes().

        The problem was that m_minimumScaleToFit could have wrong value as contents size
        might have not be updated by the time PageViewportController::didChangeViewportAttributes()
        was invoked.

        The solution is to use m_minimumScaleToFit for contents scaling if initial scale
        is not specified in the viewport meta tag, as it is updated all the time. 
        Also a flag m_initiallyFitToViewport is added to PageViewportController to detect
        whether m_minimumScaleToFit should be used for scaling.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::pageTransitionViewportReady):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        * UIProcess/PageViewportController.h:
        (PageViewportController):

2012-11-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Stop the mess with DECLARE_EWK_VIEW_CALLBACK arg type definition
        https://bugs.webkit.org/show_bug.cgi?id=103187

        Reviewed by Kenneth Rohde Christiansen.

        Now the client should pass to DECLARE_EWK_VIEW_CALLBACK macro exacly the 
        same arg type s/he wants to have in the Ewk_View callback.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        (EvasObjectHolder):
        (EwkViewCallbacks::EvasObjectHolder::EvasObjectHolder):
        (EwkViewCallbacks):

2012-11-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Check errors in EwkView callbacks usage at compile time
        https://bugs.webkit.org/show_bug.cgi?id=103177

        Reviewed by Kenneth Rohde Christiansen.

        Errors in EwkView callbacks usage are now checked at compile time.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        (CallBack):
        (EwkViewCallbacks::CallBack::CallBack):
        (EwkViewCallbacks::CallBack::call):

2012-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135575.
        http://trac.webkit.org/changeset/135575
        https://bugs.webkit.org/show_bug.cgi?id=103169

        It made all tests assert (Requested by Ossy on #webkit).

        * qt/MainQt.cpp:
        (WebKit):
        (main):

2012-11-23  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Implement new CSS3 background-position parsing.
        https://bugs.webkit.org/show_bug.cgi?id=102104

        Reviewed by Julien Chaffraix.

        Protect the new feature behind a feature flag.

        * Configurations/FeatureDefines.xcconfig:

2012-11-23  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Match the behavior of selfOrAncestorHaveNonAffineTransforms() to its name.
        https://bugs.webkit.org/show_bug.cgi?id=103097

        Reviewed by Noam Rosenthal.

        CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms() does
        not check its ancestor. This patch makes this method check its ancestor
        to match its name.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):

2012-11-23  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: LayerTreeRenderer::removeTile() does not remove tiles actually.
        https://bugs.webkit.org/show_bug.cgi?id=103030

        Reviewed by Noam Rosenthal.

        LayerTreeRenderer::removeTile() must add a backing store into
        m_backingStoresWithPendingBuffers. Otherwise, tiles are not removed.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::removeTile):

2012-11-23  Huang Dongsung  <luxtella@company100.net>

        [TexMap] Remove dependency of TextureMapperLayer on GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=103046

        Reviewed by Noam Rosenthal.

        This patch makes GraphicsLayerTextureMapper create its own backing
        store. However, LayerTreeRenderer also creates its own backing store. So
        when LayerTreeRenderer uses GraphicsLayerTextureMapper,
        LayerTreeRenderer needs GraphicsLayerTextureMapper to not create its own
        backing store.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createLayer):
        (WebKit::LayerTreeRenderer::getBackingStore):

2012-11-23  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(r135486): ASSERT(isMainThread()) hit in LayerTreeRenderer::setActive(bool)
        https://bugs.webkit.org/show_bug.cgi?id=103077

        Reviewed by Noam Rosenthal.

        Currently, the painting thread uses purgeGLResources() and setActive().
        QQuickWebPage::updatePaintNode() indirectly calls both methods after
        locking the main thread.

        This patch changes two points.
        1. Remove ASSERT(isMainThread()) in methods that the painting thread can
        call.
        2. Make purgeGLResources() and setActive() call methods of
        LayerTreeCoordinatorProxy via dispatchOnMainThread().

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::renderNextFrame):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        (WebKit):
        (WebKit::LayerTreeRenderer::purgeBackingStores):
        (WebKit::LayerTreeRenderer::setActive):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):

2012-11-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2][AC] EwkViewImpl::transformToScreen() does not retrieve the Ecore_X_Window properly
        https://bugs.webkit.org/show_bug.cgi?id=103133

        Reviewed by Kenneth Rohde Christiansen.

        If accelerated compositing is enabled, EwkViewImpl::transformToScreen() should
        attempt to retrieve the Ecore_X_Window using ecore_evas_gl_x11_window_get() first
        and only fall back to ecore_evas_software_x11_window_get().

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::transformToScreen):

2012-11-23  Wojciech Bielawski  <w.bielawski@samsung.com>

        [WK2][WKTR] WebKitTestRunner needs eventSender.contextClick()
        https://bugs.webkit.org/show_bug.cgi?id=86881

        Reviewed by Kenneth Rohde Christiansen.

        InjectedBundle API extended to retrieve contextMenu entries names.
        WebContextMenu exteded with function to retrieve menu items.
        This API is required by layout tests.
        Common code in WebContextMenu.cpp moved to separate method menuItemsWithUserData().
        Behaviour of dependend methods is unchanged.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageGetContextMenuEntriesNames):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::items):
        (WebKit):
        * WebProcess/WebPage/WebContextMenu.h:
        (WebContextMenu):

2012-11-22  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Avoid initializing PlatformStrategies twice.

        Rubber-stamped by Simon Hausmann.

        This fixes another regression introduced in r135515:
        initializeWebKitQt shouldn't implicitely call initializeWebCoreQt
        since it can be called from WebKit2 to initialize QStyle for testing.
        This would then lead to things such as PlatformStrategies being
        initialized twice.

        * qt/MainQt.cpp: No need to initialize anything if we're not using QStyle.
        (WebKit):
        (main):

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

        [GTK] Use custom private macros to define GObjects
        https://bugs.webkit.org/show_bug.cgi?id=99705

        Reviewed by Martin Robinson.

        Add WEBKIT_DEFINE_TYPE macros, similar and compatible with
        G_DEFINE_TYPE macros, to define GObject types. These macros also
        define the init and finalize functions reducing the GObject
        boilerplate and hiding the placement new syntax that causes some
        confusion. The patch replaces the use of G_DEFINE_TYPE macros by
        WEBKIT_DEFINE_TYPE ones and removes the init and finalize
        implementations, moving custom code when needed to the private
        struct constructor/destructor or constructed/dispose virtual
        methods when appropriate.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        (webkit_back_forward_list_item_class_init):
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        (webkitContextMenuDispose):
        (webkit_context_menu_class_init):
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (_WebKitContextMenuItemPrivate::~_WebKitContextMenuItemPrivate):
        (_WebKitContextMenuItemPrivate):
        (webkit_context_menu_item_class_init):
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (_WebKitCookieManagerPrivate::~_WebKitCookieManagerPrivate):
        (_WebKitCookieManagerPrivate):
        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkit_download_class_init):
        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (webkit_favicon_database_class_init):
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkitFileChooserRequestDispose):
        (webkit_file_chooser_request_class_init):
        * UIProcess/API/gtk/WebKitFindController.cpp:
        (webkit_find_controller_class_init):
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        (webkitFormSubmissionRequestDispose):
        (webkit_form_submission_request_class_init):
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp:
        (webkitGeolocationPermissionRequestDispose):
        (webkit_geolocation_permission_request_class_init):
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkit_hit_test_result_class_init):
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        (webkit_navigation_policy_decision_class_init):
        * UIProcess/API/gtk/WebKitPlugin.cpp:
        (_WebKitPluginPrivate::~_WebKitPluginPrivate):
        (_WebKitPluginPrivate):
        (webkit_plugin_class_init):
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        (webkitPolicyDecisionDispose):
        (webkit_policy_decision_class_init):
        (webkit_policy_decision_use):
        (webkit_policy_decision_ignore):
        (webkit_policy_decision_download):
        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (_WebKitPrintOperationPrivate::~_WebKitPrintOperationPrivate):
        (_WebKitPrintOperationPrivate):
        (webkit_print_operation_class_init):
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        (webkit_response_policy_decision_class_init):
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        (webkit_security_manager_class_init):
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate):
        (_WebKitSettingsPrivate):
        (webkit_settings_class_init):
        * UIProcess/API/gtk/WebKitURIRequest.cpp:
        (webkit_uri_request_class_init):
        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        (webkit_uri_response_class_init):
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (webkit_uri_scheme_request_class_init):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (_WebKitWebInspectorPrivate::~_WebKitWebInspectorPrivate):
        (_WebKitWebInspectorPrivate):
        (webkit_web_inspector_class_init):
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_class_init):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate::~_WebKitWebViewPrivate):
        (_WebKitWebViewPrivate):
        (webkitWebViewConstructed):
        (webkitWebViewDispose):
        (webkit_web_view_class_init):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate):
        (_WebKitWebViewBasePrivate):
        (_WebKitWebViewBasePrivate::~_WebKitWebViewBasePrivate):
        (webkitWebViewBaseDispose):
        (webkitWebViewBaseConstructed):
        (webkit_web_view_base_class_init):
        * UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp:
        (webkit_web_view_base_accessible_class_init):
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        (webkit_window_properties_class_init):

2012-11-22  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Buildfix when ENABLE_NETSCAPE_PLUGIN_API is disabled
        https://bugs.webkit.org/show_bug.cgi?id=103044

        Reviewed by Kentaro Hara.

        enum ProcessType has PluginProcess only if ENABLE(PLUGIN_PROCESS) is enabled.
        So, guard PluginProcess with ENABLE(PLUGIN_PROCESS).

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

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

        [GTK] Split SVG from WebCore to work-around make limitation
        https://bugs.webkit.org/show_bug.cgi?id=97735

        Reviewed by Carlos Garcia Campos.

        Add a new libtool convenience library, libWebCoreSVG.la, to work-around
        make limitation when linking libWebCore.

        * GNUmakefile.am: link libWebCoreSVG.la into libwebkit2gtk.

2012-11-22  Simon Hausmann  <simon.hausmann@digia.com>, Pierre Rossi <pierre.rossi@digia.com>

        [Qt] Separate QWidget dependant code into separate WebKitWidgets static library
        https://bugs.webkit.org/show_bug.cgi?id=102800

        Reviewed by Tor Arne Vestbø.

        This patch separates code that needs to use QWidget related APIs in
        WebKit/qt/WebCoreSupport and Api from code that doesn't. This means for
        example FrameLoaderClientQt.cpp remains in the WebKit1 static library,
        while qwebpage.cpp and qwebframe.cpp become part of the WebKitWidgets
        static library. WebKit1 is compiled without QT += widgets and therefore
        any widget related dependency has been moved "up" and out of WebKit1 into
        the WebKitWidgets library.

        Between the code in WebKit.a and WebKitWidgets.a new adapters and
        interfaces have been introduced, such as QWebPageAdapter and
        QWebFrameAdapter. QWebPageAdapter, when used from WebKit1, is a way to
        call out into the API layer, implemented by QWebPage (QWebPagePrivate).
        The other way around if QWebPage wants to access WebCore or
        WebCoreSupport related functionality, it will go through
        QWebPageAdapater (as base class). The separation in the direction up
        into the API layer is complete with this patch, no code in WebKit1
        depends on QtWidgets. The separation the other way around, code in the
        API layer not using any WebCore types, is not complete yet.

        Some classes such as QWebSettings, QWebElement or
        DumpRenderTreeSupportQt remain in WebKit1. While they are API layer,
        they do not depend on widget related Qt APIs and they make much more
        use of WebCore internal APIs and therefore are easier to keep in
        WebKit1.

        In the future we plan to place a real shared library boundary between
        WebKit1 and WebKitWidgets, by keeping the WebKit1 static library as
        part of the QtWebKit shared library and by turning the WebKitWidgets
        static library into a shared one.

        * qt/MainQt.cpp:
        (WebKit):
        (main):

2012-11-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2][EFL] No need to remove surface before replacing
        https://bugs.webkit.org/show_bug.cgi?id=103055

        Rubberstamped by Simon Hausmann.

        The surface is stored in a OwnPtr which automatically
        frees the existing surface after replacing it with a new
        one. For some reason, this also fixes resizing issues on
        my Nvidia driver.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createGLSurface):
        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

2012-11-22  Christophe Dumez  <christophe.dumez@intel.com>

        WebKitTestRunner needs layoutTestController.setCacheModel
        https://bugs.webkit.org/show_bug.cgi?id=42684

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle C API for WebKitTestRunner to set the
        cache model.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetCacheModel):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setCacheModel):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-11-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        REGRESSION(r135399): Wrong assertion causing an assertion failure: m_rawAttributes.initialScale > 0
        https://bugs.webkit.org/show_bug.cgi?id=102971

        Reviewed by Kenneth Rohde Christiansen.

        m_rawAttributes.initialScale has to be initialized even if m_minimumScaleToFit hasn't changed
        it's value.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeViewportAttributes):

2012-11-22  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Correct the parameters of WebPlatformTouchPoint.
        https://bugs.webkit.org/show_bug.cgi?id=102865

        Reviewed by Kenneth Rohde Christiansen.

        Set the screen position as a third parameter and contents position as
        a fourth parameter of WebPlatformTouchPoint().

        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):

2012-11-22  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove an invisible TiledBackingStore of CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=102894

        Reviewed by Kenneth Rohde Christiansen.

        CoordinatedGraphicsLayer does not need to have a backing store
        if (!drawsContent() || !contentsAreVisible() || m_size.isEmpty()).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):

2012-11-22  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: refactor LayerTreeRenderer.
        https://bugs.webkit.org/show_bug.cgi?id=103004

        Reviewed by Noam Rosenthal.

        This patch changes two subjects.
        1. Add ASSERT(isMainThread()) in all methods that are called in the main thread.
        In addition, make dispatchOnMainThread() use callOnMainThread(const Function<void()>&
        function) instead of its own implementation.

        2. Remove setAccelerationMode() because we don't use m_accelerationMode member
        except for the setter.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createGLSurface):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit):
        (WebKit::LayerTreeRenderer::dispatchOnMainThread):
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::animationFrameReady):
        (WebKit::LayerTreeRenderer::updateViewport):
        (WebKit::LayerTreeRenderer::renderNextFrame):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        (WebKit::LayerTreeRenderer::detach):
        (WebKit::LayerTreeRenderer::setActive):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::createDrawingAreaProxy):

2012-11-21  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Use consistent class names in the clients
        https://bugs.webkit.org/show_bug.cgi?id=102684

        Reviewed by Gyuyoung Kim.

        WebKit EFL classes do not use '_' since r135117 but '_' is still remained
        in some clients classes. This patch removed the '_' to make class names
        to be consistent.

        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::didFail):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::willSubmitForm):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didReceiveAuthenticationChallengeInFrame):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::runOpenPanel):
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::EwkUrlSchemeHandler::EwkUrlSchemeHandler):
        (WebKit::RequestManagerClientEfl::didReceiveURIRequest):
        (WebKit::RequestManagerClientEfl::registerURLSchemeHandler):
        * UIProcess/efl/RequestManagerClientEfl.h:
        (RequestManagerClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.cpp:
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):
        (WebKit::ResourceLoadClientEfl::didFinishLoadForResource):
        (WebKit::ResourceLoadClientEfl::didFailLoadForResource):
        * UIProcess/efl/ResourceLoadClientEfl.h:
        (ResourceLoadClientEfl):

2012-11-21  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] Remove #include "ewk_view_private.h" in PageViewportControllerClientEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102773

        Reviewed by Gyuyoung Kim.

        PageViewportControllerClientEfl.cpp doesn't need to include ewk_view_private.h.

        * UIProcess/efl/PageViewportControllerClientEfl.cpp:

2012-11-21  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: refactor changing children code in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=102896

        Reviewed by Noam Rosenthal.

        When changing children, we don't need to sync a layer state because
        there is no more need to send the parent ID every time the layer tree
        hierarchy changes. So this patch removes didChangeLayerState() in
        methods which change children.

        In addition, purgeBackingStores() does not need to call didChangeChildren()
        because purgeBackingStores() does not change children.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setChildren):
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::removeFromParent):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):

2012-11-21  Huang Dongsung  <luxtella@company100.net>

        REGRESSION(r135212): Fix crash due to an infinite rect.
        https://bugs.webkit.org/show_bug.cgi?id=102891

        Reviewed by Noam Rosenthal.

        When CoordinatedGraphicsLayer has a 3D transform, tiledBackingStoreVisibleRect()
        can calculate an infinite rect. However, TiledBackingStore cannot handle the
        infinite rect. This patch clamps the infinite rect to avoid crash in
        TiledBackingStore.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::clampToContentsRectIfRectIsInfinite):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):

2012-11-21  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Disambiguate innerNodeFramePoint and mainFramePoint
        https://bugs.webkit.org/show_bug.cgi?id=98139

        Reviewed by Julien Chaffraix.

        Switch to using HitTestResult::innerNodeFrame and HitTestResult::innerNodeFramePoint.

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::characterIndexForPoint):

2012-11-21  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed Qt/Windows build fix.
        https://bugs.webkit.org/show_bug.cgi?id=102787

        Remove inclusion of QtQml, which drags in QtNetwork, which drags in qnetworksession.h, which
        defines a member function called "interface". Since windows headers also define a pre-processor
        macro called "interface", it has to do that. However we have now a dependency between combaseapi.h,
        which #defines interface and is included earlier (before qnetworksession.h) and shlwapi.h, which _needs_
        the interface macro and is included afterwards. Since this module-wide QtQml inclusion is unnecessary
        and just slows down the build, this patch removes it.

        * UIProcess/API/qt/qwebkittest_p.h:

2012-11-21  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: refactor LayerTreeRenderer::syncRemoteContent().
        https://bugs.webkit.org/show_bug.cgi?id=102900

        Reviewed by Noam Rosenthal.

        Currently, QQuickWebPage::updatePaintNode() calls
        LayerTreeRenderer::syncRemoteContent() with locking the main thread.
        syncRemoteContent() is heavy, so we should not call syncRemoteContent() in
        updatePaintNode(). Calling syncRemoteContent() in the painting thread is
        thread-safe because syncRemoteContent() does not access any data
        structures, which the main thread use.

        After this patch, syncRemoteContent() is used only internally, so
        syncRemoteContent() becomes private.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):
        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPage::updatePaintNode):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        (QRawWebView::paint):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
        (WebKit::LayerTreeRenderer::ensureRootLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):

2012-11-21  Andras Becsi  <andras.becsi@digia.com>

        [WK2] Viewport meta tag broken after r134801
        https://bugs.webkit.org/show_bug.cgi?id=102801

        Reviewed by Kenneth Rohde Christiansen.

        If the initial-scale attribute is not explicitly specified it is left -1 by the
        viewport meta algorithm and if the content is not scalable the min and max scales
        are restricted by restrictScaleFactorToInitialScaleIfNotUserScalable() which resulted
        in negative scales on the UI side.
        Make sure that the minimum scale to fit the viewport is calculated before restricting
        the scales and use this scale as the initial scale if no explicit initial scale was set.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::pageTransitionViewportReady):
        (WebKit::PageViewportController::didChangeViewportAttributes):
        (WebKit::PageViewportController::updateMinimumScaleToFit):

2012-11-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Support Context Menu
        https://bugs.webkit.org/show_bug.cgi?id=96200

        Reviewed by Laszlo Gombos.

        This patch supports WK2 EFL's context menu as WK1 implementation because we can't use elementary in inside WebKit.
        Only basic functionalities of context menu are supported. Beside this implementation follows GTK's implementation.
        For example, ewk_context_menu_new, ewk_context_menu_item_append, ewk_context_menu_item_remove are supported.

        In addition, ewk_defines.h file is added in order to support cross inclusion as GTK port.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::showContextMenu):
        (EwkViewImpl::hideContextMenu):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_context_menu.cpp: Added.
        (EwkContextMenu::EwkContextMenu):
        (EwkContextMenu::~EwkContextMenu):
        (EwkContextMenu::hide):
        (Ewk_Context_Menu::appendItem):
        (Ewk_Context_Menu::removeItem):
        (EwkContextMenu::contextMenuItemSelected):
        (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.h: Added.
        * UIProcess/API/efl/ewk_context_menu_item.cpp: Added.
        (EwkContextMenuItem::EwkContextMenuItem):
        (ewk_context_menu_item_new):
        (ewk_context_menu_item_new_with_submenu):
        (ewk_context_menu_item_type_get):
        (ewk_context_menu_item_type_set):
        (ewk_context_menu_item_action_get):
        (ewk_context_menu_item_action_set):
        (ewk_context_menu_item_title_get):
        (ewk_context_menu_item_title_set):
        (ewk_context_menu_item_checked_get):
        (ewk_context_menu_item_checked_set):
        (ewk_context_menu_item_enabled_get):
        (ewk_context_menu_item_enabled_set):
        * UIProcess/API/efl/ewk_context_menu_item.h: Added.
        * UIProcess/API/efl/ewk_context_menu_item_private.h: Added.
        (EwkContextMenuItem):
        (EwkContextMenuItem::create):
        (EwkContextMenuItem::action):
        (EwkContextMenuItem::setAction):
        (EwkContextMenuItem::title):
        (EwkContextMenuItem::setTitle):
        (EwkContextMenuItem::type):
        (EwkContextMenuItem::setType):
        (EwkContextMenuItem::checked):
        (EwkContextMenuItem::setChecked):
        (EwkContextMenuItem::enabled):
        (EwkContextMenuItem::setEnabled):
        * UIProcess/API/efl/ewk_context_menu_private.h: Added.
        (WebKit):
        (EwkContextMenu):
        (EwkContextMenu::create):
        (EwkContextMenu::items):
        * UIProcess/API/efl/ewk_defines.h: Added.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp: Added.
        (checkBasicContextMenuItem):
        (showContextMenu):
        (TEST_F):
        * UIProcess/efl/ContextMenuClientEfl.cpp: Added.
        (toContextClientEfl):
        (ContextMenuClientEfl::ContextMenuClientEfl):
        (ContextMenuClientEfl::getContextMenuFromProposedMenu):
        * UIProcess/efl/ContextMenuClientEfl.h: Added.
        (WebKit):
        (ContextMenuClientEfl):
        (WebKit::ContextMenuClientEfl::create):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::createContextMenuProxy):
        * UIProcess/efl/WebContextMenuProxyEfl.cpp: Added.
        (WebKit):
        (WebKit::WebContextMenuProxyEfl::WebContextMenuProxyEfl):
        (WebKit::WebContextMenuProxyEfl::~WebContextMenuProxyEfl):
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        (WebKit::WebContextMenuProxyEfl::hideContextMenu):
        (WebKit::WebContextMenuProxyEfl::contextMenuItemSelected):
        * UIProcess/efl/WebContextMenuProxyEfl.h: Added.
        (WebKit):
        (WebContextMenuProxyEfl):
        (WebKit::WebContextMenuProxyEfl::create):

2012-11-21  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Rename ewk_view_setting_encoding_custom_XXX to ewk_view_custom_encoding_XXX
        https://bugs.webkit.org/show_bug.cgi?id=102867

        Reviewed by Gyuyoung Kim.

        Rename ewk_view_setting_encoding_custom_XXX to ewk_view_custom_encoding_XXX.

        ewk_view_setting_encoding_custom_XXX APIs might be misunderstanded as the "setting" word
        because ewk_view_setting_encoding_custom_set triggers the "reload" operation.
        And ewk_view_setting_XXX is not correct because there is ewk_settings object for settings.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_encoding_custom_get):
        (ewk_view_encoding_custom_set):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-11-20  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Remove unnecessary #include in API test
        https://bugs.webkit.org/show_bug.cgi?id=102674

        Reviewed by Laszlo Gombos.

        Removed duplicated header files from the API test cases.
        Now, EWK2UnitTestBase.h includes the basic header files, 
        so test cases may only include this one and add the addtional
        header files if necessary.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp:
        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp:
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        * UIProcess/API/efl/tests/test_ewk2_context_history_callbacks.cpp:
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        * UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp:
        * UIProcess/API/efl/tests/test_ewk2_object.cpp:
        * UIProcess/API/efl/tests/test_ewk2_popup_menu.cpp:
        * UIProcess/API/efl/tests/test_ewk2_refptr_evas_object.cpp:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:

2012-11-19  Sam Weinig  <sam@webkit.org>

        Simplify WebConnection by removing its underlying CoreIPC::Connection
        https://bugs.webkit.org/show_bug.cgi?id=102771

        Reviewed by Anders Carlsson.

        Instead of having WebConnection subclasses own the CoreIPC::Connection,
        move back to having the WebProcess and WebProcessProxy own it (and be
        its Connection::Client) and use the new MessageReceiver class to vend
        messages to the WebConnection.

        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::WebConnection):
        (WebKit::WebConnection::postMessage):
        (WebKit::WebConnection::didClose):
        (WebKit::WebConnection::didReceiveMessage):
        * Shared/WebConnection.h:
        Make WebConnection both a MessageReceiver and MessageSender
        and add virtual functions for derived classes to fill in.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::create):
        (WebKit::WebConnectionToWebProcess::WebConnectionToWebProcess):
        (WebKit::WebConnectionToWebProcess::invalidate):
        (WebKit::WebConnectionToWebProcess::decodeMessageBody):
        (WebKit::WebConnectionToWebProcess::connection):
        (WebKit::WebConnectionToWebProcess::destinationID):
        (WebKit::WebConnectionToWebProcess::hasValidConnection):
        * UIProcess/WebConnectionToWebProcess.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::~WebProcessProxy):
        (WebKit::WebProcessProxy::fromConnection):
        (WebKit::WebProcessProxy::disconnect):
        (WebKit::WebProcessProxy::addMessageReceiver):
        (WebKit::WebProcessProxy::didClose):
        (WebKit::WebProcessProxy::didReceiveInvalidMessage):
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::connection):
        (WebProcessProxy):
        (WebKit::WebProcessProxy::webConnection):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::create):
        (WebKit::WebConnectionToUIProcess::WebConnectionToUIProcess):
        (WebKit):
        (WebKit::WebConnectionToUIProcess::invalidate):
        (WebKit::WebConnectionToUIProcess::connection):
        (WebKit::WebConnectionToUIProcess::destinationID):
        (WebKit::WebConnectionToUIProcess::hasValidConnection):
        * WebProcess/WebConnectionToUIProcess.h:
        (WebConnectionToUIProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initialize):
        (WebKit::WebProcess::terminate):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::connection):
        (WebKit::WebProcess::webConnectionToUIProcess):
        Move the CoreIPC::Connection back to the processes.

2012-11-20  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add Ewk_Window_Features API and related UI callbacks
        https://bugs.webkit.org/show_bug.cgi?id=99114

        Reviewed by Gyuyoung Kim.

        Added Ewk_Window_Features API so that we can create new windows
        with various window features such as location, size, toolbar, menubar,
        statusbar, locationbar, scrollbar, resizable, and fullscreen.

        UI client callbacks related to window features also implemented
        so that it is possible to retrieve the window object property values.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        (EwkViewCallbacks):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::windowFeatures):
        (EwkViewImpl::createNewPage):
        (EwkViewImpl::closePage):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::toolbarsAreVisible):
        (WebKit):
        (WebKit::PageUIClientEfl::setToolbarsAreVisible):
        (WebKit::PageUIClientEfl::menuBarIsVisible):
        (WebKit::PageUIClientEfl::setMenuBarIsVisible):
        (WebKit::PageUIClientEfl::statusBarIsVisible):
        (WebKit::PageUIClientEfl::setStatusBarIsVisible):
        (WebKit::PageUIClientEfl::isResizable):
        (WebKit::PageUIClientEfl::setIsResizable):
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        * UIProcess/efl/PageUIClientEfl.h:
        (PageUIClientEfl):

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135295.
        http://trac.webkit.org/changeset/135295
        https://bugs.webkit.org/show_bug.cgi?id=102834

        This patch causes assertion to some layout tests on chromium
        (Requested by jianli on #webkit).

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::linkClicked):

2012-11-20  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadURLRequest):
        (WebKit::WebPage::loadData):

2012-11-20  peavo@outlook.com  <peavo@outlook.com>

        WinCairo build fails to link.
        https://bugs.webkit.org/show_bug.cgi?id=102804

        Reviewed by Alexey Proskuryakov.

        * win/WebKit2CFLite.def:

2012-11-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WTR] WebKitTestRunner should be able to run tests using fixed layout
        https://bugs.webkit.org/show_bug.cgi?id=102517

        Reviewed by Kenneth Rohde Christiansen.

        Update EFL private API so we can create a view with fixed layout. We
        can keep this as private as I don't see a real life use case for it
        outside WTR and the WebInspector.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewCreate):
        (WKViewCreateWithFixedLayout):
        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2012-11-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] PageViewportControllerClient::didChangeViewportAttributes called twice
        https://bugs.webkit.org/show_bug.cgi?id=102790

        Reviewed by Kenneth Rohde Christiansen.

        Change updateMinimumScaleToFit to no longer call PageViewportControllerClient::didChangeViewportAttributes,
        but instead return whether it has changed the minimumScaleToFit.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeContentsSize):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):

2012-11-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] No test of double-click to zoom out
        https://bugs.webkit.org/show_bug.cgi?id=102810

        Reviewed by Kenneth Rohde Christiansen.

        Adds tests of zoom-stack behaviour, the ability to restore previous zoom levels. It tests
        that zoom out always goes to lower zoom levels.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_doubleTapToZoom.qml:

2012-11-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Large areas highlighted on touch
        https://bugs.webkit.org/show_bug.cgi?id=97216

        Reviewed by Simon Hausmann.

        Restrict highlighting of scripted event-handlers to inline elements only.

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

2012-11-20  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Zoom logic confused by page and pinch resize
        https://bugs.webkit.org/show_bug.cgi?id=102803

        Reviewed by Kenneth Rohde Christiansen.

        Clear the zoom-out stack after page resize, and ensure the zoom logic can still detect
        zoom-out and zoom-back when the zoom-out stack is empty.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::clearRelativeZoomState):
        (WebKit::PageViewportControllerClientQt::setContentsScale):
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-11-19  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2] Unused parameters on CoordinatedGraphicsLayer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102760

        Reviewed by Laszlo Gombos.

        Because the 'platformLayer' parameter is not used when !USE(GRAPHICS_SURFACE),
        use UNUSED_PARAM macro to fix build warning -Wunused-parameter

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToCanvas):

2012-11-19  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove tiles of a layer when they are off the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=102313

        Reviewed by Noam Rosenthal.

        Currently, we don't remove tiles of the layer with the special properties: a
        transform animation and non affine transform. If a page has a lot of layers with
        a transform animation, we will encounter OOM. So this patch removes the
        privilege of the layer.

        There are two changes.
        1. computeTransformedVisibleRect() calculates a layer transform using the
        current local transform which a transform animation applied.
        2. tiledBackingStoreVisibleRect() calculates a visible
        rect of all layers, even if the layer includes the property: a transform
        animation or non affine transform.

        Test: animations/animation-offscreen-to-onscreen.html

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::effectiveContentsScale):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::hasPendingVisibleChanges):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHasActiveTransformAnimation):
        (WebCore):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-19  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove a texture if an direct composited image is off the viewport.
        https://bugs.webkit.org/show_bug.cgi?id=102449

        Reviewed by Noam Rosenthal.

        Currently, once uploading textures for composited images, Coordinated Graphics
        does not release the textures until all layers using images are destroyed.

        This patch removes a texture if we don't need to render an image. This mechanism
        is similar how TiledBackingStore removes invisible tiles.

        When all layers are invisible, we wait 3 seconds to remove the content
        of the image, because we want to prevent a transform animation from
        creating and destroying a texture over and over again.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::removeAllTiles):
        (WebKit):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::clearImageBackingContents):
        (WebKit):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::clearImageBackingContents):
        (WebKit):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::imageBackingVisible):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp:
        (WebKit::CoordinatedImageBacking::CoordinatedImageBacking):
        (WebKit::CoordinatedImageBacking::addHost):
        (WebKit::CoordinatedImageBacking::removeHost):
        (WebKit::CoordinatedImageBacking::update):
        (WebKit):
        (WebKit::CoordinatedImageBacking::updateVisibilityIfNeeded):
        (WebKit::CoordinatedImageBacking::clearContentsTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h:
        (Coordinator):
        (Host):
        (CoordinatedImageBacking):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::clearImageBackingContents):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135201.
        http://trac.webkit.org/changeset/135201
        https://bugs.webkit.org/show_bug.cgi?id=102725

        Broke all non-Mac WK2 builds. (Requested by rakuco on
        #webkit).

        * Shared/mac/PlatformCertificateInfo.h:
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Authentication/AuthenticationManager.cpp:
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * WebProcess/Authentication/mac/AuthenticationManager.mac.mm: Copied from Source/WebKit2/Shared/mac/PlatformCertificateInfo.mm.
        (WebKit):
        (WebKit::AuthenticationManager::tryUsePlatformCertificateInfoForChallenge):

2012-11-19  Brady Eidson  <beidson@apple.com>

        Move tryUsePlatformCertificateInfoForChallenge from AuthenticationManager to PlatformCertificateInfo.
        https://bugs.webkit.org/show_bug.cgi?id=102718

        Reviewed by Sam Weinig.

        Add the shared PlatformCertificateInfo version of the method:
        * Shared/mac/PlatformCertificateInfo.h:
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::tryUsePlatformCertificateInfoForChallenge):

        Use the new shared version:
        * WebProcess/Authentication/AuthenticationManager.cpp:

        Remove the old member version:
        * WebProcess/Authentication/AuthenticationManager.h:
        * WebProcess/Authentication/mac/AuthenticationManager.mac.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2012-11-19  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: refactor syncCanvas to handle the lifecycle clearly.
        https://bugs.webkit.org/show_bug.cgi?id=102664

        Reviewed by Noam Rosenthal.

        This patch makes sync canvas code handle the lifecycle of the canvas
        GraphicsSurface in the similar style to a directly image compositing and
        an update atlas code. This patch moves the canvas lifecycle handling
        code from LayerTreeRenderer to CoordinatedGraphicsLayer, because
        CoordinatedGraphicsLayer knows best when to create and remove the canvas
        GraphicsSurface.

        After this patch, we can remove the canvas GraphicsSurface in UI Process as soon
        as the canvas platform layer is unset in Web Process.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createCanvas):
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::syncCanvas):
        (WebKit::LayerTreeCoordinatorProxy::destroyCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createCanvas):
        (WebKit):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::destroyCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToCanvas):
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::createCanvasIfNeeded):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createCanvas):
        (WebKit):
        (WebKit::LayerTreeCoordinator::syncCanvas):
        (WebKit::LayerTreeCoordinator::destroyCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-19  Brady Eidson  <beidson@apple.com>

        Replace an unneeded #include with a forward declaration after r135179.

        Reviewed by nobody, but suggested by Alexey Proskuryakov.

        * WebProcess/Network/WebResourceLoader.h:

2012-11-19  Martin Robinson  <mrobinson@igalia.com>

        [GTK] REGRESSION(r134955): Plugins are broken due to unresolved symbol in plugin process
        https://bugs.webkit.org/show_bug.cgi?id=102613

        Unreviewed build fix.

        * GNUmakefile.am: Fix the build after one of my previous patches introduced
        a link dependency on libsecret.

2012-11-19  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Web Inspector crashes if evas_gl is not available
        https://bugs.webkit.org/show_bug.cgi?id=102531

        Reviewed by Kenneth Rohde Christiansen.

        Teach Web Inspector to fallback gracefully to the software path when evas_gl engine is not available.

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

2012-11-19  Brady Eidson  <beidson@apple.com>

        Remove the source files for NetworkRequest from the repository.
        They were obsoleted and removed from the project file awhile ago, but I forgot to nuke the source.

        Unreviewed.

        * NetworkProcess/NetworkRequest.cpp: Removed.
        * NetworkProcess/NetworkRequest.h: Removed.

2012-11-19  Brady Eidson  <beidson@apple.com>

        Add 64-bit specializations for atomicIncrement and atomicDecrement
        https://bugs.webkit.org/show_bug.cgi?id=102702

        Reviewed by Eric Carlson.

        Move away from the Darwin-specific OSAtomicIncrement64Barrier and use WTF::atomicIncrement instead.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::generateWillSendRequestID): Adopt WTF::atomicIncrement.
        (WebKit::generateCanAuthenticateAgainstProtectionSpaceID): Ditto.

        * WebProcess/mac/KeychainItemShimMethods.mm:
        (WebKit::generateSecKeychainItemRequestID): Ditto.

        * WebProcess/mac/SecItemShimMethods.mm:
        (WebKit::generateSecItemRequestID): Ditto.

2012-11-19  Brady Eidson  <beidson@apple.com>

        NetworkProcess Authentication.
        https://bugs.webkit.org/show_bug.cgi?id=102592

        Reviewed by Alexey Proskuryakov.

        This get's basic HTTP authentication working with the NetworkProcess by dispatching authentication
        related events to the WebProcess and relying on existing client APIs to answer them.

        Implement ResourceHandleClient methods related to auth challenges and message them to the WebProcess.
        Also implement messaging back from the WebProcess to response to those auth challenges:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::willSendRequestResponseMap):
        (WebKit::NetworkResourceLoader::willSendRequest):
        (WebKit::NetworkResourceLoader::willSendRequestHandled):
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::didCancelAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::receivedCancellation):
        (WebKit::NetworkResourceLoader::receivedAuthenticationCredential):
        (WebKit::NetworkResourceLoader::receivedRequestToContinueWithoutAuthenticationCredential):
        (WebKit::NetworkResourceLoader::receivedAuthenticationCancellation):
        (WebKit::canAuthenticateAgainstProtectionSpaceResponseMap):
        (WebKit::generateCanAuthenticateAgainstProtectionSpaceID):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceHandled):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.messages.in:

        Implement messaging to response to auth challenges from the NetworkProcess, and implement
        AuthenticationClient to response to auth responses from WebProcess clients:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace):
        (WebKit::WebResourceLoader::didReceiveAuthenticationChallenge):
        (WebKit::WebResourceLoader::didCancelAuthenticationChallenge):
        (WebKit::WebResourceLoader::receivedCredential):
        (WebKit::WebResourceLoader::receivedRequestToContinueWithoutCredential):
        (WebKit::WebResourceLoader::receivedCancellation):
        * WebProcess/Network/WebResourceLoader.h:
        (WebKit::WebResourceLoader::refAuthenticationClient):
        (WebKit::WebResourceLoader::derefAuthenticationClient):
        * WebProcess/Network/WebResourceLoader.messages.in:

        Add a BlockingResponseMap for bool responses, which don't need OwnPtr trickery:
        * Shared/BlockingResponseMap.h:
        (BlockingBoolResponseMap::waitForResponse):
        (BlockingBoolResponseMap::didReceiveResponse):

        Add "allowsStoredCredentials" to NetworkResourceLoadParameters so the NetworkProcess
        already has the answer when the question is asked:
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::allowStoredCredentials):

        Grab the value for "allowsStoredCredentials" when scheduling the load in the NetworkProcess:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):

        Add a FIXME for client certs:
        * WebProcess/Authentication/mac/AuthenticationManager.mac.mm:
        (WebKit::AuthenticationManager::tryUsePlatformCertificateInfoForChallenge):

        Add a FIXME for downloads:
        * WebProcess/Downloads/mac/DownloadMac.mm:

        Remove unused messaging related methods:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        * WebProcess/Network/NetworkProcessConnection.h:

2012-11-19  Kihong Kwon  <kihong.kwon@samsung.com>

        Add PROXIMITY_EVENTS feature
        https://bugs.webkit.org/show_bug.cgi?id=102658

        Reviewed by Kentaro Hara.

        Add PROXIMITY_EVENTS feature to xcode project for WebKit2.

        * Configurations/FeatureDefines.xcconfig:

2012-11-19  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Fix possible crash in EwkViewImpl::displayTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=102682

        Reviewed by Kenneth Rohde Christiansen.

        Add NULL check for DrawingAreaProxy and LayerTreeCoordinatorProxy
        in displayTimerFired() to avoid crashing if those have already
        been destroyed by the time to timer is fired.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::layerTreeRenderer):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):

2012-11-19  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WTR] Memory leak in TestController::initialize()
        https://bugs.webkit.org/show_bug.cgi?id=102616

        Reviewed by Kenneth Rohde Christiansen.

        Export a few additional WTF symbols for windows port.

        * win/WebKit2.def:

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

        [GTK] Test /webkit2/WebKitWebView/create-ready-close is failing after r134586
        https://bugs.webkit.org/show_bug.cgi?id=102668

        Reviewed by Philippe Normand.

        Check only that window properties match when creating a new window
        if the expected window properties has been set. Also remove a
        FIXME and actually check that x and y are equal to the expected
        one, now that the issue is fixed.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:

2012-11-19  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed buildfix.

        Fix -Wdelete-non-virtual-destructor error with gcc 4.7 after r135056.

        * Shared/CoordinatedGraphics/WebCustomFilterProgramProxy.h:
        (WebCustomFilterProgramProxy): This is a polymorphic derived class
        so the destructor should be virtual.

2012-11-19  Christophe Dumez  <christophe.dumez@intel.com>

        [CG][WK2] Assertion in CoordinatedGraphicsLayer::setContentsToImage(WebCore::Image*)
        https://bugs.webkit.org/show_bug.cgi?id=102652

        Reviewed by Kenneth Rohde Christiansen.

        Handle null return of nativeImageForCurrentFrame similarly to Chromium
        port in r130610. This can happen if there is an error early in the
        decoding of an image.

        Test: Already covered by compositing/images/truncated-direct-png-image.html

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):

2012-11-18  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] Remove underscore characters in Ewk class names.
        https://bugs.webkit.org/show_bug.cgi?id=102641

        Reviewed by Gyuyoung Kim.

        WebKit EFL doesn't use '_' in C++ class names.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::settings):
        (EwkViewImpl::backForwardList):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_auth_request.h:
        * UIProcess/API/efl/ewk_auth_request_private.h:
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (EwkBackForwardList::EwkBackForwardList):
        (EwkBackForwardList::nextItem):
        (EwkBackForwardList::previousItem):
        (EwkBackForwardList::currentItem):
        (EwkBackForwardList::itemAt):
        (EwkBackForwardList::size):
        (EwkBackForwardList::backList):
        (EwkBackForwardList::forwardList):
        (EwkBackForwardList::getFromCacheOrCreate):
        (EwkBackForwardList::createEinaList):
        (EwkBackForwardList::update):
        * UIProcess/API/efl/ewk_back_forward_list.h:
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (EwkBackForwardList::create):
        (EwkBackForwardList):
        * UIProcess/API/efl/ewk_color_picker.cpp:
        (EwkColorPicker::EwkColorPicker):
        (EwkColorPicker::setColor):
        (EwkColorPicker::color):
        * UIProcess/API/efl/ewk_color_picker.h:
        * UIProcess/API/efl/ewk_color_picker_private.h:
        (EwkColorPicker::create):
        (EwkColorPicker):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (EwkCookieManager::EwkCookieManager):
        (EwkCookieManager::~EwkCookieManager):
        (EwkCookieManager::setPersistentStorage):
        (EwkCookieManager::setHTTPAcceptPolicy):
        (EwkCookieManager::clearHostnameCookies):
        (EwkCookieManager::clearAllCookies):
        (EwkCookieManager::watchChanges):
        (EwkCookieManager::isWatchingForChanges):
        (EwkCookieManager::getHostNamesWithCookies):
        (EwkCookieManager::getHTTPAcceptPolicy):
        (EwkCookieManager::cookiesDidChange):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (EwkCookieManager::create):
        (EwkCookieManager):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseManager::EwkDatabaseManager):
        (EwkDatabaseManager::getDatabaseOrigins):
        (EwkDatabaseManager::createOriginList):
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_database_manager_private.h:
        (EwkDatabaseManager::create):
        (EwkDatabaseManager):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/API/efl/ewk_error.cpp:
        (EwkError::EwkError):
        (EwkError::url):
        (EwkError::description):
        (EwkError::domain):
        (EwkError::errorCode):
        (EwkError::isCancellation):
        * UIProcess/API/efl/ewk_error.h:
        * UIProcess/API/efl/ewk_error_private.h:
        (EwkError::create):
        (EwkError):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::EwkFaviconDatabase):
        (EwkFaviconDatabase::~EwkFaviconDatabase):
        (EwkFaviconDatabase::iconURLForPageURL):
        (EwkFaviconDatabase::watchChanges):
        (EwkFaviconDatabase::unwatchChanges):
        (EwkFaviconDatabase::iconForPageURL):
        (EwkFaviconDatabase::didChangeIconForPageURL):
        (EwkFaviconDatabase::getIconSurfaceSynchronously):
        (EwkFaviconDatabase::iconDataReadyForPageURL):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (EwkFaviconDatabase::create):
        (EwkFaviconDatabase):
        * UIProcess/API/efl/ewk_file_chooser_request.h:
        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
        * UIProcess/API/efl/ewk_form_submission_request.h:
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        * UIProcess/API/efl/ewk_intent.h:
        * UIProcess/API/efl/ewk_intent_private.h:
        * UIProcess/API/efl/ewk_intent_service.h:
        * UIProcess/API/efl/ewk_intent_service_private.h:
        * UIProcess/API/efl/ewk_navigation_data.h:
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        * UIProcess/API/efl/ewk_object.h:
        * UIProcess/API/efl/ewk_object_private.h:
        (EwkObject::~EwkObject):
        (ewk_object_is_of_type):
        (ewk_object_cast_check):
        (ewk_object_cast):
        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::EwkPopupMenu):
        (EwkPopupMenu::~EwkPopupMenu):
        (EwkPopupMenu::close):
        (EwkPopupMenu::items):
        (EwkPopupMenu::selectedIndex):
        (EwkPopupMenu::setSelectedIndex):
        * UIProcess/API/efl/ewk_popup_menu.h:
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (EwkPopupMenuItem::EwkPopupMenuItem):
        (EwkPopupMenuItem::type):
        (EwkPopupMenuItem::textDirection):
        (EwkPopupMenuItem::text):
        (EwkPopupMenuItem::tooltipText):
        (EwkPopupMenuItem::accessibilityText):
        (EwkPopupMenuItem::hasTextDirectionOverride):
        (EwkPopupMenuItem::isEnabled):
        (EwkPopupMenuItem::isLabel):
        (EwkPopupMenuItem::isSelected):
        * UIProcess/API/efl/ewk_popup_menu_item.h:
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (EwkPopupMenuItem::create):
        (EwkPopupMenuItem):
        * UIProcess/API/efl/ewk_popup_menu_private.h:
        (EwkPopupMenu::create):
        (EwkPopupMenu):
        * UIProcess/API/efl/ewk_resource.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        * UIProcess/API/efl/ewk_security_origin.h:
        * UIProcess/API/efl/ewk_security_origin_private.h:
        * UIProcess/API/efl/ewk_settings.cpp:
        (EwkSettings::preferences):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/ewk_settings_private.h:
        (EwkSettings::create):
        (EwkSettings::EwkSettings):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (EwkStorageManager::EwkStorageManager):
        (EwkStorageManager::getStorageOrigins):
        (EwkStorageManager::createOriginList):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (EwkStorageManager::create):
        (EwkStorageManager):
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_request_private.h:
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_url_response_private.h:
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        * UIProcess/API/efl/tests/test_ewk2_object.cpp:
        (TEST_F):

2012-11-18  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Wrong transform when using software path.
        https://bugs.webkit.org/show_bug.cgi?id=102549

        Reviewed by Kenneth Rohde Christiansen.

        When using the software path, our transform is not correct and results 
        in drawing the wrong part of the page. This becomes more obvious after scrolling.

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

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

        [WK2] REGRESSION: After web process crash a new web process is created for every existing page
        https://bugs.webkit.org/show_bug.cgi?id=102520

        Reviewed by Alexey Proskuryakov.

        When process model is SharedSecondaryProcess a new shared process
        should be created instead of a new process per page.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureSharedWebProcess): Ensure a shared web
        process and return it.
        (WebKit::WebContext::createWebPage): Update to change in
        ensureSharedWebProcess() that returns the shared web process now.
        * UIProcess/WebContext.h:
        (WebContext): Remove relaunchProcessIfNecessary().
        (WebKit::WebContext::sendToAllProcessesRelaunchingThemIfNecessary):
        Use ensureSharedWebProcess() instead of relaunchProcessIfNecessary().
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess): Ensure a shared web
        process for SharedSecondaryProcess model or create a new web
        process for multi-process models.

2012-11-17  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Remove 8-bit related assertion from NetscapePluginModuleX11.
        https://bugs.webkit.org/show_bug.cgi?id=102588

        Reviewed by Andreas Kling.

        Follow-up to r135043: since String::fromUTF8() is not guaranteed
        to give us a 16-bit string, the assertion in
        truncateToSingleLine() will fail in that case.

        This should make the EFL WK2 Debug bot stop failing all
        plugin-related tests because "WebKit Test Plugin" is returned as
        an 8-bit string.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::truncateToSingleLine):

2012-11-17  Alexandru Chiculita  <achicu@adobe.com>

        [Texmap][CSS Shaders] Reuse the precompiled shader for custom filters in TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=101801

        Reviewed by Noam Rosenthal.

        Changed the encoding code for ValidatedCustomFilterOperation to only encode the ID of the program.
        LayerTreeCoordinator makes sure to send the programs in full before the encoder runs.
        LayerTreeRenderer will maintain a HashMap from these IDs to the real CustomFilterProgram.
        The UI process will also receive a message from the WebProcess when the shader is no longer in needed.
        LayerTreeRenderer calls the TextureMapper's removeCachedCustomFilterProgram to notify
        about the removed CustomFilterProgram.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        (CoreIPC):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):
        * Shared/CoordinatedGraphics/WebCustomFilterOperation.h: Added.
        (WebCore):
        (WebCustomFilterOperation):
        (WebCore::WebCustomFilterOperation::create):
        (WebCore::WebCustomFilterOperation::programID):
        (WebCore::WebCustomFilterOperation::WebCustomFilterOperation):
        * Shared/CoordinatedGraphics/WebCustomFilterProgramProxy.h:
        (WebKit::WebCustomFilterProgramProxy::create):
        (WebKit::WebCustomFilterProgramProxy::WebCustomFilterProgramProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::removeCustomFilterProgram):
        (WebKit::LayerTreeCoordinatorProxy::createCustomFilterProgram):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit):
        (WebKit::LayerTreeRenderer::injectCachedCustomFilterPrograms):
        (WebKit::LayerTreeRenderer::createCustomFilterProgram):
        (WebKit::LayerTreeRenderer::removeCustomFilterProgram):
        (WebKit::LayerTreeRenderer::setLayerAnimations):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebCore):
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::checkCustomFilterProgramProxies):
        (WebKit::LayerTreeCoordinator::removeCustomFilterProgramProxy):
        (WebKit::LayerTreeCoordinator::setLayerAnimations):

2012-11-17  Brady Eidson  <beidson@apple.com>

        Add an integer identifier field to AuthenticationChallengeBase.
        https://bugs.webkit.org/show_bug.cgi?id=102593

        Reviewed by Darin Adler.

        Properly encode/decode the identifier when sending the challenge over CoreIPC.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2012-11-17  Balazs Kelemen  <kbalazs@webkit.org>

        8bit-unaware String usage in NetscapePluginModuleX11.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102482

        Reviewed by Michael Saboff.

        String::fromUTF8 is not guaranteed to give a 16 bit string.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::truncateToSingleLine): Do an explicit 16 bit conversion.

2012-11-16  Jaehun Lim  <ljaehun.lim@samsung.com>

        [EFL][WK2] Remove unnecessary #include statemtns
        https://bugs.webkit.org/show_bug.cgi?id=102577

        Reviewed by Anders Carlsson.

        ewk_*_private.h doesn't need to include RefCounted.h after Ewk_Object refactoring.

        * UIProcess/API/efl/ewk_auth_request_private.h:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        * UIProcess/API/efl/ewk_storage_manager.cpp:

2012-11-16  Sam Weinig  <weinig@apple.com>

        Fix the windows build.

        * WebProcess/Cookies/cf/WebCookieManagerCFNet.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        (WebKit::WebCookieManager::platformGetHTTPCookieAcceptPolicy):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::defaultCookieStorage):
        * WebProcess/WebCoreSupport/win/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-11-16  Alec Flett  <alecflett@chromium.org>

        Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=96818

        Reviewed by Adam Barth.

        Add exports for SerializedScriptValue changes.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-16  Kiran Muppala  <cmuppala@apple.com>

        Set task priority of WebKit2 processes to zero on Mac
        https://bugs.webkit.org/show_bug.cgi?id=102567

        Reviewed by Mark Rowe.

        Explicitly set task priority of WebKit2 processes to zero, to
        override automatic priority determination by the system.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess): Add call to platformInitialize() and
        move MAC specific call to disableProcessSuppression to platformInitialize.
        (WebKit::ChildProcess::platformInitialize): Dummy for non MAC platforms.
        * Shared/ChildProcess.h:
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize): Add call to setpriority().

2012-11-16  Brady Eidson  <beidson@apple.com>

        Move resource loader messaging from NetworkConnectionToWebProcess directly to NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=102570

        Reviewed by Alexey Proskuryakov.

        This patch adds the ability for WebResourceLoader to message NetworkResourceLoader directly.

        This further cements the 1-to-1 relationship between the two classes and makes it easy to add/change
        loader related messaging going forward.

        Build/infrastructure stuff:
        * Platform/CoreIPC/MessageID.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * DerivedSources.make:

        Remove the WillSendRequestHandled message, and forward NetworkResourceLoader messages on to the correct object:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        Hang on to a master map of identifiers to NetworkResourceLoaders:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleResourceLoad):
        (WebKit::NetworkResourceLoadScheduler::removeLoadIdentifier):
        (WebKit::NetworkResourceLoadScheduler::networkResourceLoaderForIdentifier):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        Change the way "willSendRequestHandled" comes in to be a direct message:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRequest):
        (WebKit::NetworkResourceLoader::willSendRequestHandled):
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.messages.in:

        Make WebResourceLoader a MessageSender:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::connection):
        (WebKit::WebResourceLoader::destinationID):
        (WebKit::WebResourceLoader::willSendRequest): Use MessageSender abilities to message the NetworkResourceLoader.
        * WebProcess/Network/WebResourceLoader.h:

2012-11-16  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS_HIERARCHIES since it's no longer in use
        https://bugs.webkit.org/show_bug.cgi?id=102554

        Reviewed by Andreas Kling.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=79939#c41 ,
        we're going to revist this feature once additional vendor support is
        achieved.

        * Configurations/FeatureDefines.xcconfig:

2012-11-16  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build correction after r134960.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:  Stub out
        calls to CFNetwork-based implementation.

2012-11-16  Martin Robinson  <mrobinson@igalia.com>

        Move authentication dialog to the UIProcess

        [GTK] [WebKit2] Move GtkAuthenticationDialog to the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=101843

        Reviewed by Gustavo Noronha Silva.

        Move the use of GtkAuthenticationDialog to the UIProcess along with the rest of
        the GTK+ widgets. This will allow us to to embed the dialog into the WebView
        in the future and to test authentication with the WebKit2 C API.

        * GNUmakefile.list.am: Add the new class to the source list and remove the
        GTK+-only WebFrameLoader implementation file.
        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp: Added. A subclass of GtkAuthenticationDialog
        which uses the WebKit2 classes to do the UIProcess-side authentication.
        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h: Added.
        * UIProcess/API/gtk/WebKitLoaderClient.cpp: Add a callback for didReceiveAuthenticationChallengeInFrame.
        (didReceiveAuthenticationChallengeInFrame): Added.
        (attachLoaderClientToView): Use the new callback.
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (WebKit::AuthenticationChallengeProxy::core): Add this getter for the WebCore class.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge): Share the implementation
        again.
        * WebProcess/WebCoreSupport/gtk/WebFrameLoaderClientGtk.cpp: Removed.

2012-11-15  Alexey Proskuryakov  <ap@apple.com>

        Private Browsing is a per-page setting that sets a global value
        https://bugs.webkit.org/show_bug.cgi?id=67870

        Reviewed by Sam Weinig.

        * NetworkProcess/mac/RemoteNetworkingContext.h: Added storageSession().

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::storageSession): Just always fall back to default
        so far.

        * WebKit2.xcodeproj/project.pbxproj: Added WebPlatformStrategiesMac.mm for strategy
        code that uses Objective C.

        * WebProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Use WebFrameNetworkingContext
        instead of hardcoding access to sessiosn here.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled): Create and destroy private
        browsing session as appropriate.
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession): Use WebFrameNetworkingContext
        instead of hardcoding access to sessiosn here.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebCoreSupport/mac/WebPlatformStrategiesMac.mm: Added.
        (WebKit::WebPlatformStrategies::defaultCookieStorage):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::defaultCookieStorage):
        Implemented defaultCookieStorage() through WebFrameNetworkingContext.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        Moved code for dealing with global contexts here from WebCore.

        * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::updatePreferences):
        Create a global private session when any page enters private browsing, and
        delete it when any page exits private browsing. This is handling a preference
        change, so all pages get it once.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL): Use main frame's context.
        (WebKit::cachedResponseForURL): Ditto.

        * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess): Updated
        to talk to WebFrameNetworkingContext instead of ResourceHandle for global session.

2012-11-16  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL][WK2] White flicker when scrolling big pages with dark background on slower hardware.
        https://bugs.webkit.org/show_bug.cgi?id=102000

        Reviewed by Kenneth Rohde Christiansen.

        Add matching of view background color to the page background. This helps to reduce 
        visibility of flicker during scrolling/scaling/repainting where page tiles are not
        ready. View background color matching is disabled by default and can be enabled 
        with new API function ewk_view_draws_page_background_set .
        View background color can interfere with semi-transparent pages and should be
        disabled by default.
        Upstreaming changes by Youngtaeck Song(youngtaeck.song@samsung.com).

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::setDrawsBackground):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_draws_page_background_set):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::setBackgroundColor):
        (WebKit):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
        (WebKit::LayerTreeRenderer::paintToGraphicsContext):
        (WebKit::LayerTreeRenderer::setBackgroundColor):
        (WebKit):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::setDrawsBackground):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::setBackgroundColor):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setBackgroundColor):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2012-11-16  Krzysztof Czech  <k.czech@samsung.com>

        [WK2][GTK][EFL] Share WebKit2-GTK's WebProcess Accessibility implementation with other WebKit ports.
        https://bugs.webkit.org/show_bug.cgi?id=101748

        Reviewed by Martin Robinson.

        Remove and rename files related to Accessibility from WebPage/gtk to WebPage/atk.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebProcess/WebPage/atk/WebPageAccessibilityObject.h: Renamed from Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObject.h.
        (WebKit):
        (_WebPageAccessibilityObject):
        (_WebPageAccessibilityObjectClass):
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/gtk/WebPageAccessibilityObject.cpp.
        (accessibilityRootObjectWrapper):
        (webPageAccessibilityObjectInitialize):
        (webPageAccessibilityObjectGetIndexInParent):
        (webPageAccessibilityObjectGetNChildren):
        (webPageAccessibilityObjectRefChild):
        (web_page_accessibility_object_init):
        (web_page_accessibility_object_class_init):
        (webPageAccessibilityObjectNew):
        (webPageAccessibilityObjectRefresh):

2012-11-16  Alexandru Chiculita  <achicu@adobe.com>

        [Texmap][CSS Shaders] Make the CustomFilterValidatedProgram maintain the platform compiled program
        https://bugs.webkit.org/show_bug.cgi?id=102414

        Reviewed by Noam Rosenthal.

        This is the first part of shader caching implementation for the Custom Filters in WK2 LayerTreeCoordinator.
        In this patch it will just make the LayerTreeCoordinator knowledgeable about the life-time
        of the custom filter programs. It can allocate IDs for the filters and it also gets a callback when the
        filters are not needed anymore.

        The UI process is still recreating the shader every time, but https://bugs.webkit.org/show_bug.cgi?id=101801
        will fix that and try to reuse existing custom filters.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Shared/CoordinatedGraphics/WebCustomFilterProgramProxy.cpp: Added.
        (WebKit):
        (WebKit::WebCustomFilterProgramProxy::~WebCustomFilterProgramProxy):
        * Shared/CoordinatedGraphics/WebCustomFilterProgramProxy.h: Added.
        (WebKit):
        (WebCustomFilterProgramProxyClient):
        (WebCustomFilterProgramProxy):
        (WebKit::WebCustomFilterProgramProxy::create):
        (WebKit::WebCustomFilterProgramProxy::id):
        (WebKit::WebCustomFilterProgramProxy::refFromValidatedProgram):
        (WebKit::WebCustomFilterProgramProxy::derefFromValidatedProgram):
        (WebKit::WebCustomFilterProgramProxy::setClient):
        (WebKit::WebCustomFilterProgramProxy::client):
        (WebKit::WebCustomFilterProgramProxy::WebCustomFilterProgramProxy):
        * Target.pri:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::~LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::syncLayerFilters):
        (WebKit):
        (WebKit::LayerTreeCoordinator::checkCustomFilterProgramProxies):
        (WebKit::LayerTreeCoordinator::removeCustomFilterProgramProxy):
        (WebKit::LayerTreeCoordinator::disconnectCustomFilterPrograms):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-16  Peter Gal  <galpeter@inf.u-szeged.hu>

        [Qt][Mac] Fix the build after r124873
        https://bugs.webkit.org/show_bug.cgi?id=102475

        Reviewed by Noam Rosenthal.

        Change the CoordinatedImageBackingID typedef from uintptr_t to uint64_t.

        * Shared/WebLayerTreeInfo.h:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:

2012-11-16  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] Unset the tooltip when the web process has crashed
        https://bugs.webkit.org/show_bug.cgi?id=102232

        Reviewed by Gyuyoung Kim.

        Emit 'tooltip,text,unset' signal to unset the tooltip
        when the web process has crashed.

        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::processDidCrash):

2012-11-16  Helder Correia  <helder.correia@nokia.com>

        [CoordGfx] Follow coding style on explicit constructors
        https://bugs.webkit.org/show_bug.cgi?id=102451

        Reviewed by Noam Rosenthal.

        Use the explicit keyword on single argument constructors.

        No new tests needed.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (WebKit::CoordinatedBackingStoreTile::CoordinatedBackingStoreTile):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTileBackend):

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134908.
        http://trac.webkit.org/changeset/134908
        https://bugs.webkit.org/show_bug.cgi?id=102473

        Broke the Apple Windows Debug build. (Requested by dydx on
        #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134913.
        http://trac.webkit.org/changeset/134913
        https://bugs.webkit.org/show_bug.cgi?id=102472

        Incorrect fix. (Requested by dydx on #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-16  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Apple Windows Debug build after http://trac.webkit.org/changeset/134908
        (https://bugs.webkit.org/show_bug.cgi?id=102354).

        Add symbol.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-16  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2] Bug on ASSERT code in CoordinatedBackingStore.cpp
        https://bugs.webkit.org/show_bug.cgi?id=102465

        Reviewed by Noam Rosenthal.

        The ASSERT code should be fixed because the 'operator>=' is not defined for WebCore::IntSize.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):

2012-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134865.
        http://trac.webkit.org/changeset/134865
        https://bugs.webkit.org/show_bug.cgi?id=102466

        Broke the Apple Windows Debug build. (Requested by dydx on
        #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Avoid copying of ViewportArguments in computeViewportAttributes function
        https://bugs.webkit.org/show_bug.cgi?id=102354

        Reviewed by Kenneth Rohde Christiansen.

        Update exported symbols.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-15  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Refactor code related to directly composited images.
        https://bugs.webkit.org/show_bug.cgi?id=101023

        Reviewed by Noam Rosenthal.

        Internal Review by Gwang Yoon Hwang and Jae Hyun Park.

        Currently, LayerTreeCoordinator manages composited images using
        ShareableBitmap. This patch introduces CoordinatedImageBacking which
        plays a role in managing composited images. CoordinatedImageBacking makes us
        gather code related to a directly composited image into a single class.

        We create only one CoordinatedImageBacking per image. For example, in the leaves
        demo, we create only 3 textures of leaves.

        * CMakeLists.txt:
        * Shared/WebLayerTreeInfo.h:
        (WebKit::WebLayerInfo::WebLayerInfo):
        (WebLayerInfo):
        * Target.pri:
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createImageBacking):
        (WebKit::LayerTreeCoordinatorProxy::updateImageBacking):
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::removeImageBacking):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::createImageBacking):
        (WebKit::LayerTreeRenderer::updateImageBacking):
        (WebKit::LayerTreeRenderer::removeImageBacking):
        (WebKit):
        (WebKit::LayerTreeRenderer::assignImageBackingToLayer):
        (WebKit::LayerTreeRenderer::removeReleasedImageBackingsIfNeeded):
        (WebKit::LayerTreeRenderer::flushLayerChanges):
        (WebKit::LayerTreeRenderer::purgeGLResources):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp: Added.
        (WebKit):
        (WebKit::CoordinatedImageBacking::getCoordinatedImageBackingID):
        (WebKit::CoordinatedImageBacking::create):
        (WebKit::CoordinatedImageBacking::CoordinatedImageBacking):
        (WebKit::CoordinatedImageBacking::~CoordinatedImageBacking):
        (WebKit::CoordinatedImageBacking::addLayerClient):
        (WebKit::CoordinatedImageBacking::removeLayerClient):
        (WebKit::CoordinatedImageBacking::markDirty):
        (WebKit::CoordinatedImageBacking::update):
        (WebKit::CoordinatedImageBacking::releaseSurfaceIfNeeded):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h: Added.
        (WebCore):
        (WebKit):
        (CoordinatedImageBacking):
        (Coordinator):
        (WebKit::CoordinatedImageBacking::id):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::createImageBackingIfNeeded):
        (WebKit::LayerTreeCoordinator::createImageBacking):
        (WebKit::LayerTreeCoordinator::updateImageBacking):
        (WebKit::LayerTreeCoordinator::removeImageBacking):
        (WebKit::LayerTreeCoordinator::flushPendingImageBackingChanges):
        (WebKit::LayerTreeCoordinator::purgeBackingStores):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-15  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: A Minor optimization of calculating transforms in CoordinagedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=102309

        We calculate an inverse transform each tiledBackingStoreVisibleRect() call by
        a TiledBackingStore and every tiles.
        This patch caches the inverse transform to reuse it.

        Reviewed by Noam Rosenthal.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-15  Alec Flett  <alecflett@chromium.org>

        Add tests for explicit serialization values
        https://bugs.webkit.org/show_bug.cgi?id=96818

        Reviewed by Adam Barth.

        Add exports for SerializedScriptValue changes.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-15  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Split WebCore/platform into a separate library
        https://bugs.webkit.org/show_bug.cgi?id=94435

        Reviewed by Martin Robinson.

        More people have been reporting problems when linking WebCore because
        the command line limit is being exceeded. Splitting WebCore a bit more
        is in order.

        * GNUmakefile.am: link libWebCorePlatform into libwebkit2gtk

2012-11-15  Anders Carlsson  <andersca@apple.com>

        Consolidate four accelerated compositing WKView methods into a single method
        https://bugs.webkit.org/show_bug.cgi?id=102419

        Reviewed by Andreas Kling.

        Add a single -[WKView _setAcceleratedCompositingModeRootLayer:] method and have
        the existing PageClientImpl member functions call it. Also, add a new
        PageClient member function, setAcceleratedCompositingRootLayer.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _processDidCrash]):
        (-[WKView _setAcceleratedCompositingModeRootLayer:]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::commit):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):

2012-11-15  Rick Byers  <rbyers@chromium.org>

        No tests for changing mouse cursors
        https://bugs.webkit.org/show_bug.cgi?id=100550

        Reviewed by Brent Fulgham.

        Add necessary exports for Internals::getCurrentCursorInfo

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-15  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Remove initiallyFitToViewport attribute
        https://bugs.webkit.org/show_bug.cgi?id=102392

        Reviewed by Noam Rosenthal.

        Remove the initiallyFitToViewport which shouldn't have been
        added in the first place. We now reset userScalable to auto (-1)
        in case it was not explicitly set by the web author.

        Same behavior, covered by existing tests.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::pageTransitionViewportReady):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):

2012-11-15  Balazs Kelemen  <kbalazs@webkit.org>

        Coordinated Graphics: support the "freeze animations" API
        https://bugs.webkit.org/show_bug.cgi?id=100703

        Reviewed by Noam Rosenthal.

        Implement suspendAnimations and resumeAnimations in CoordinatedGraphicsLayer.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::suspendAnimations):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::resumeAnimations):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-15  Yuni Jeong  <yhnet.jung@samsung.com>

        [EFL][WK2] Add APIs to get/set whether scripts can open new windows.
        https://bugs.webkit.org/show_bug.cgi?id=102054

        Reviewed by Gyuyoung Kim.

        Added setting APIs make it possible to allow or prevent scripts from opening new windows automatically.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_scripts_can_open_windows_set):
        (ewk_settings_scripts_can_open_windows_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134691, r134703, r134715, r134716,
        and r134733.
        http://trac.webkit.org/changeset/134691
        http://trac.webkit.org/changeset/134703
        http://trac.webkit.org/changeset/134715
        http://trac.webkit.org/changeset/134716
        http://trac.webkit.org/changeset/134733
        https://bugs.webkit.org/show_bug.cgi?id=102342

        "Broke the Apple Windows Debug and GTK builds." (Requested by
        dydx on #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134741.
        http://trac.webkit.org/changeset/134741
        https://bugs.webkit.org/show_bug.cgi?id=102337

        "Change is incorrect." (Requested by dydx on #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-14  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Apple Windows Debug and GTK builds after <http://trac.webkit.org/changeset/134691>
        (https://bugs.webkit.org/show_bug.cgi?id=96818)

        Export symbols of the form:
        ?deserializeBuffer@Internals@WebCore[...]
        ?serializeObject@Internals@WebCore[...]

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-14  Alec Flett  <alecflett@chromium.org>

        Fix windows build exports (again)
        https://bugs.webkit.org/show_bug.cgi?id=102324

        Unreviewed windows-only build fix.

        Add one more export that was causing unit tests to fail to link.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-14  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Build correction after r134703.

        * win/WebKit2CFLite.def: Add exports to CFLite version of
        Windows build to match Alec's last update.

2012-11-14  Alec Flett  <alecflett@chromium.org>

        Fix Windows exports for TestWebKit
        https://bugs.webkit.org/show_bug.cgi?id=102302

        Unreviewed, fixing Safari Win build.

        Add missing exports.

        * win/WebKit2.def:

2012-11-14  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove unused members and methods in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=102172

        Reviewed by Noam Rosenthal.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-14  Brady Eidson  <beidson@apple.com>

        Move loading responsibility out of WebResourceLoadScheduler into a new WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=102259

        Reviewed by Alexey Proskuryakov.

        Add a new WebResourceLoader message class which allows NetworkResourceLoader to message
        WebResourceLoaders directly.

        Consolidate the NetworkProcessConnection and WebResourceLoadScheduler messaging responsibilities
        directly into WebResourceLoader.

        Build-system infrastructure stuff:
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * WebKit2.xcodeproj/project.pbxproj:

        Message directly to WebResourceLoader instead of NetworkProcessConnection:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::connection):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveData):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::NetworkResourceLoader::willSendRequest):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::destinationID):

        For now handle the only relevant message class which is the WebResourceLoader class:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

        Allow access to WebResourceLoaders by identifier:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        * WebProcess/Network/WebResourceLoadScheduler.h:
        (WebKit::WebResourceLoadScheduler::webResourceLoaderForIdentifier):

        Directly handle resource loading messages instead of having WebResourceLoadScheduler do it:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponse):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

2012-11-14  Andy Estes  <aestes@apple.com>

        Fix the Lion build after r134681.

        * WebProcess/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm:

2012-11-08  Andy Estes  <aestes@apple.com>

        [WebKit2] Need API in UIProcess to enable loading of custom protocols
        https://bugs.webkit.org/show_bug.cgi?id=101674

        Reviewed by Brady Eidson.

        Enable clients of WebKit2 to implement NSURLProtocol subclasses to
        control the loading of resources with schemes that WebKit2 cannot
        handle natively. Since loading happens in a different process, we
        accomplish this by registering a global NSURLProtocol in the web
        process and proxying NSURLProtocol and NSURLProtocolClient calls to
        the client's NSURLProtocol in the UI process.

        * DerivedSources.make: Addded new .messages.in files.
        * Platform/CoreIPC/MessageID.h:
        * Shared/WebProcessCreationParameters.cpp: Added the list of supported schemes.
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/mac/WKBrowsingContextController.h:
        * UIProcess/API/mac/WKBrowsingContextController.mm:
        (+[WKBrowsingContextController registerSchemeForCustomProtocol:]):
        Added a class method where a client can register a scheme that it supports.
        (+[WKBrowsingContextController unregisterSchemeForCustomProtocol:]):
        Added a class method where a client can unregister a scheme that it no longer supports.
        (+[WKBrowsingContextController customSchemes]):
        * UIProcess/API/mac/WKBrowsingContextControllerInternal.h:
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.h: Added.
        * UIProcess/Network/CustomProtocols/CustomProtocolManagerProxy.messages.in: Added.
        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm: Added.

        Implemented an NSURLConnectionDelegate that proxies messages to the
        equivalent NSURLProtocolClient in the web process:
        (-[WKCustomProtocolLoader initWithCustomProtocolManagerProxy:customProtocolID:request:connection:]):
        (-[WKCustomProtocolLoader dealloc]):
        (-[WKCustomProtocolLoader connection:didFailWithError:]):
        (-[WKCustomProtocolLoader connection:willCacheResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveResponse:]):
        (-[WKCustomProtocolLoader connection:didReceiveData:]):
        (-[WKCustomProtocolLoader connection:willSendRequest:redirectResponse:]):
        (-[WKCustomProtocolLoader connectionDidFinishLoading:]):

        Implemented a proxy that recieves -startLoading and -stopLoading
        messages from the NSURLProtocol in the web process and starts an
        NSURLConnection in the UI process, which will instantiate the client's NSURLProtocol:
        (WebKit::CustomProtocolManagerProxy::CustomProtocolManagerProxy):
        (WebKit::CustomProtocolManagerProxy::didReceiveMessage):
        (WebKit::CustomProtocolManagerProxy::startLoading):
        (WebKit::CustomProtocolManagerProxy::stopLoading):

        * UIProcess/WebContext.h: Declared strings that store names of
        NSNotifications used for scheme registration in the UI process.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
        (WebKit::WebProcessProxy::didReceiveMessage): Forwarded messages to the
        CustomProtocolManagerProxy.
        * UIProcess/WebProcessProxy.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Added the currently
        registered schemes to the WebProcessCreationParameters and register
        NSNotification observers for new scheme registration that forwards to
        the context's web processes.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2Prefix.h: Enabled the CUSTOM_PROTOCOLS macro for the Mac.
        * WebProcess/Network/CustomProtocols/CustomProtocolManager.h: Added.
        * WebProcess/Network/CustomProtocols/CustomProtocolManager.messages.in: Added.
        * WebProcess/Network/CustomProtocols/mac/CustomProtocolManagerMac.mm: Added.
        (generateCustomProtocolID): Generate a per-WebProcess unique ID.

        Implemented a global NSURLProtocol that claims to support all schemes
        registered in the UI process. When NSURLConnection calls -startLoading
        and -stopLoading, we forward these messages to the client's NSURLProtocol
        in the UI process:
        (+[WKCustomProtocol canInitWithRequest:]):
        (+[WKCustomProtocol canonicalRequestForRequest:]):
        (+[WKCustomProtocol requestIsCacheEquivalent:toRequest:]):
        (-[WKCustomProtocol initWithRequest:cachedResponse:client:]):
        (-[WKCustomProtocol startLoading]):
        (-[WKCustomProtocol stopLoading]):

        Implemented a manager that receives NSURLConnectionDelegate messages
        forwarded from the UI process and passes them to the global NSURLProtocol's NSURLProtocolClient:
        (WebKit::CustomProtocolManager::shared):
        (WebKit::CustomProtocolManager::registerCustomProtocolClass):
        (WebKit::CustomProtocolManager::addCustomProtocol):
        (WebKit::CustomProtocolManager::removeCustomProtocol):
        (WebKit::CustomProtocolManager::registerScheme):
        (WebKit::CustomProtocolManager::unregisterScheme):
        (WebKit::CustomProtocolManager::supportsScheme):
        (WebKit::CustomProtocolManager::didReceiveMessage):
        (WebKit::CustomProtocolManager::didFailWithError):
        (WebKit::CustomProtocolManager::didLoadData):
        (WebKit::CustomProtocolManager::didReceiveResponse):
        (WebKit::CustomProtocolManager::didFinishLoading):
        (WebKit::CustomProtocolManager::protocolForID):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Forwarded messages to the
        shared CustomProtocolManager.
        (WebKit::WebProcess::registerSchemeForCustomProtocol): Register a
        scheme received from the UI process.
        (WebKit::WebProcess::unregisterSchemeForCustomProtocol): Unregister a
        scheme received from the UI process.
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in: Declared messages for passing
        supported schemes from the UI process the web process.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Register the
        schemes contained in the WebProcessCreationParameters.

2012-11-14  Helder Correia  <helder.correia@nokia.com>

        [TexMap][Cairo] Accelerated compositing debug visuals
        https://bugs.webkit.org/show_bug.cgi?id=101883

        Reviewed by Kenneth Rohde Christiansen.

        No new tests, just introducing a debug feature.

        Add a Cairo implementation to complement the patch from bug 90116
        (http://trac.webkit.org/changeset/122275).

        For this feature to be enabled, the environment variable
        WEBKIT_SHOW_COMPOSITING_DEBUG_VISUALS must be set to 1. Once enabled,
        both repaint counters and tile borders will be painted.

        A Cairo-specific drawRepaintCounter() implementation was added to
        TextureMapperGL. A cairo_surface_t is used as scratch buffer to paint
        the counters. It is then uploaded to a BitmapTexture acquired
        from the pool and finally draw by TextureMapper. The actual compositing
        happens inside LayerBackingStore::paintToTextureMapper(). Each
        LayerBackingStoreTile has a repaint counter which gets incremented in
        LayerBackingStore::updateTile().

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::shouldShowTileDebugVisuals):

2012-11-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Rename m_CoordinatedGraphicsLayerClient to m_coordinator
        https://bugs.webkit.org/show_bug.cgi?id=102133

        Renamed m_CoordinatedGraphicsLayerClient to m_coordinator.
        Also, there is no need for calling setCoordinator every time the tree changes,
        since we can call it once when the layer is created, now that LayerTreeCoordinator
        is the GraphicsLayerFactory.

        Reviewed by Kenneth Rohde Christiansen

        No change in functionality.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setChildren):
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::syncFilters):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        (WebCore::CoordinatedGraphicsLayer::ensureImageBackingStore):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::setCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::~LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::paintContents):

2012-11-14  Anders Carlsson  <andersca@apple.com>

        More steps towards actually hosting layers in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=102275

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::rootLayerID):
        Add a getter for the root layer ID.

        * UIProcess/mac/RemoteLayerTreeHost.h:
        (RemoteLayerTreeHost):
        Add root layer member variable. Make the RemoteLayerTreeHost class a GraphicsLayerClient.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::RemoteLayerTreeHost):
        Initialize the root layer to null.

        (WebKit::RemoteLayerTreeHost::notifyAnimationStarted):
        (WebKit::RemoteLayerTreeHost::notifyFlushRequired):
        (WebKit::RemoteLayerTreeHost::paintContents):
        Add empty stubs.

        (WebKit::RemoteLayerTreeHost::commit):
        Try to get the root layer.

        (WebKit::RemoteLayerTreeHost::getOrCreateLayer):
        Look up the layer with the given ID in the m_layers hash table and create it if it doesn't exist.

2012-11-14  Brady Eidson  <beidson@apple.com>

        Fix the Production build after r134640 broke it.

        * WebProcess/Network/WebResourceLoader.h:
        (WebKit::WebResourceLoader::resourceLoadIdentifier): Use the un-used.

2012-11-14  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin should make use of PDFKit's fluid zooming
        https://bugs.webkit.org/show_bug.cgi?id=101962
        <rdar://problem/12555229>

        Reviewed by Anders Carlsson.

        Expose the notion of a frame that handles page scale gestures via WebFrame and to the bundle via WKBundleFrame.
        The only frames that will purport to handle page scale gestures are those which contain PluginDocuments
        backed by PDFPlugin, for now. Also, allow PDFKit to do its own fluid zooming animation.

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameHandlesPageScaleGesture): Provide WKBundleFrameHandlesPageScaleGesture to
        inform the injected bundle whether or not the frame handles scaling itself.
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h: Add WKBundleFrameHandlesPageScaleGesture.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::geometryDidChange): Allow PDFKit to use its fluid zooming instead of changing
        the scale factor immediately.
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::handlesPageScaleGesture): For now, the only frames that handle page scale
        gestures themselves are plugins that purport to handle page scale changes themselves (i.e. only PDFPlugin).
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):

2012-11-14  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin should support downloading PDFs
        https://bugs.webkit.org/show_bug.cgi?id=102152
        <rdar://problem/12555313>

        Reviewed by Alexey Proskuryakov.

        Clicking on the "Download PDF" HUD button should download the current
        PDF to the Downloads folder.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::savePDFToFileInDownloadsFolder): Added. Save the
        PDF data to disk, in the Downloads folder. This will only save files with
        the .pdf extension, and of MIME type "application/pdf".
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add savePDFToFileInDownloadsFolder.
        * UIProcess/WebPageProxy.messages.in: Add savePDFToFileInDownloadsFolder.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add saveToPDF().
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate saveToPDF]): Forward saveToPDF delegate callback to PDFPlugin.
        (WebKit::PDFPlugin::saveToPDF): Hand WebPageProxy the raw data for the
        current PDF, which it will save to the Downloads folder. We receive
        the suggested filename during loading.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        (WebKit::SimplePDFPlugin::suggestedFilename): Expose a getter for suggestedFilename.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (WebKit::SimplePDFPlugin::pluginInfo): Add a missing space after an operator.

2012-11-14  Brady Eidson  <beidson@apple.com>

        Part of "Move loading responsibility out of WebResourceLoadScheduler into a new WebResourceLoader"
        https://bugs.webkit.org/show_bug.cgi?id=102259

        Reviewed by Alexey Proskuryakov.

        WebResourceLoadScheduler has taken on too many responsibilities that shouldn't belong to it.

        We should create a WebResourceLoader that will eventually act as an intermediary between
        WebCore::ResourceLoader and NetworkResourceLoader.

        This patch is prep-work: It adds a new skeleton class to the WebProcess.

        * WebKit2.xcodeproj/project.pbxproj:

        Add the new WebResourceLoader class which is a very thin skeleton for now:
        * WebProcess/Network/WebResourceLoader.cpp: Added.
        (WebKit::WebResourceLoader::create):
        (WebKit::WebResourceLoader::WebResourceLoader):
        (WebKit::WebResourceLoader::~WebResourceLoader):
        * WebProcess/Network/WebResourceLoader.h: Added.
        (WebKit::WebResourceLoader::coreLoader):

        Adapt WebResourceLoadScheduler to use this new class where appropriate:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        (WebKit::WebResourceLoadScheduler::addMainResourceLoad):
        (WebKit::WebResourceLoadScheduler::remove):
        (WebKit::WebResourceLoadScheduler::willSendRequest):
        (WebKit::WebResourceLoadScheduler::didReceiveResponse):
        (WebKit::WebResourceLoadScheduler::didReceiveData):
        (WebKit::WebResourceLoadScheduler::didFinishResourceLoad):
        (WebKit::WebResourceLoadScheduler::didReceiveResource):
        (WebKit::WebResourceLoadScheduler::didFailResourceLoad):
        * WebProcess/Network/WebResourceLoadScheduler.h:


2012-11-14  Brady Eidson  <beidson@apple.com>

        Deliver data from NetworkProcess to resources progressively.
        https://bugs.webkit.org/show_bug.cgi?id=102171

        Reviewed by Alexey Proskuryakov.

        Instead of buffering up the data for an entire resource and delivering it in one chunk, we need
        to deliver data progressively.

        This allows progressive parsing of textual resources and progressive rendering of images,
        as well as allows endless multipart resources (e.g., multipart jpegs) to work at all.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveData): Don't buffer data locally (for now) but rather
          pass it straight through to the WebProcess.
        (WebKit::NetworkResourceLoader::didFinishLoading): Only notify didFinishLoading instead of
          delivering a chunk of buffered data.
        (WebKit::NetworkResourceLoader::didFail):
        * NetworkProcess/NetworkResourceLoader.h:

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveData): Pass through towards ResourceLoader.
        (WebKit::NetworkProcessConnection::didFinishResourceLoad):
        (WebKit::NetworkProcessConnection::didFailResourceLoad):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::didReceiveData): Hand this chunk of data to the ResourceLoader directly.
        (WebKit::WebResourceLoadScheduler::didFinishResourceLoad):
        * WebProcess/Network/WebResourceLoadScheduler.h:

2012-11-14  Anton Obzhirov  <a.obzhirov@samsung.com>

        Add platform implementation of remote web inspector server for GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=88094 

        Reviewed by Gustavo Noronha Silva.

        The platform implementation is based on GSocket API (WebInspectorServerGtk.cpp and WebSocketServerGtk.cpp).
        The server listens on port 2999 by default. IP address of the server can be set
        in WEBKIT_INSPECTOR_SERVER (for example export WEBKIT_INSPECTOR_SERVER="192.168.124.130:2999").
        The server is started during WebKit context initialization.
        Once a page is loaded insector server can be accessed via other WebKit based browser.
        New WebKit API gtk tests have beed added.
        inspectorPageIndex.html has been moved to new location to share the file between GTK and Qt ports.

        Test: test-page-list, test-remote-debugging-message, test-open-debugging-session

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Platform/Logging.cpp:
        (WebKit):
        (WebKit::getChannelFromName):
        (WebKit::initializeLogChannelsIfNecessary):
        * Platform/Logging.h:
        (WebKit):
        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/InspectorTestServer.cpp: Added.
        (loadChangedCallback):
        (main):
        * UIProcess/API/gtk/tests/TestInspectorServer.cpp: Added.
        (stopTestServer):
        (sigAbortHandler):
        (testServerMonitorThreadFunc):
        (startTestServerMonitor):
        (startTestServer):
        (testInspectorServerPageList):
        (testRemoteDebuggingMessage):
        (openRemoteDebuggingSession):
        (beforeAll):
        (afterAll):
        * UIProcess/InspectorServer/WebInspectorServer.h:
        (WebInspectorServer):
        * UIProcess/InspectorServer/WebSocketServer.h:
        (WebSocketServer):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::WebSocketServerConnection):
        (WebKit::WebSocketServerConnection::shutdownNow):
        (WebKit::WebSocketServerConnection::shutdownAfterSendOrNow):
        (WebKit::WebSocketServerConnection::didCloseSocketStream):
        (WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
        (WebKit):
        (WebKit::WebSocketServerConnection::didUpdateBufferedAmount):
        * UIProcess/InspectorServer/WebSocketServerConnection.h:
        (WebSocketServerConnection):
        * UIProcess/InspectorServer/front-end: Added.
        * UIProcess/InspectorServer/front-end/inspectorPageIndex.html: Added.
        * UIProcess/InspectorServer/gtk: Added.
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp: Added.
        (WebKit):
        (WebKit::WebInspectorServer::platformResourceForPath):
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/InspectorServer/gtk/WebSocketServerGtk.cpp: Added.
        (WebKit):
        (WebKit::connectionCallback):
        (WebKit::WebSocketServer::platformInitialize):
        (WebKit::WebSocketServer::platformListen):
        (WebKit::WebSocketServer::platformClose):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::initInspectorServer):
        (WebKit):
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebKit2.qrc:
        * config.h:
        * qt/Resources/inspectorPageIndex.html: Removed.

2012-11-14  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2][AC] Print out warning if we fallback back to software mode
        https://bugs.webkit.org/show_bug.cgi?id=102188

        Reviewed by Kenneth Rohde Christiansen.

        Print out a warning if accelerated compositing is enabled but the
        implementation is falling back to software mode for some reason.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createGLSurface):

2012-11-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134531.
        http://trac.webkit.org/changeset/134531
        https://bugs.webkit.org/show_bug.cgi?id=102193

        Makes >70 tests crash on EFL and Qt bots. (Requested by drott
        on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setChildren):
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::syncFilters):
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        (WebCore::CoordinatedGraphicsLayer::setCoordinatedGraphicsLayerClient):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::~LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::createGraphicsLayer):

2012-11-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Add a button parameter to mouseClick, mouseDown, mouseUp functions
        https://bugs.webkit.org/show_bug.cgi?id=102065

        Reviewed by Laszlo Gombos.

        mouseClick(), mouseDown() and mouseUp() test functions are only able to test a left button of mouse now.
        However, EFL API test framwork needs to test various mouse buttons. For example, context menu test needs
        to simulate a right mouse button. So, button type parameter needs to be added for it.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::mouseClick):
        (EWK2UnitTest::EWK2UnitTestBase::mouseDown):
        (EWK2UnitTest::EWK2UnitTestBase::mouseUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):

2012-11-13  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] New window size should consult the window attributes
        https://bugs.webkit.org/show_bug.cgi?id=102122

        Reviewed by Kenneth Rohde Christiansen.

        Pass the size that was specified in window.open to the embedder.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createNewPage):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::createNewPage):

2012-11-13  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Rename m_CoordinatedGraphicsLayerClient to m_coordinator
        https://bugs.webkit.org/show_bug.cgi?id=102133

        Renamed m_CoordinatedGraphicsLayerClient to m_coordinator.
        Also, there is no need for calling setCoordinator every time the tree changes,
        since we can call it once when the layer is created, now that LayerTreeCoordinator
        is the GraphicsLayerFactory.

        Reviewed by Kenneth Rohde Christiansen.

        No change in functionality.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setChildren):
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::syncFilters):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        (WebCore::CoordinatedGraphicsLayer::ensureImageBackingStore):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreUpdatesAllowed):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        (WebCore::CoordinatedGraphicsLayer::removeTile):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::setCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::~LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::paintContents):

2012-11-13  Brady Eidson  <beidson@apple.com>

        REGRESSION(r134328) - ASSERT(isMainThread()) when subresources redirect in the NetworkProcessPass through
        https://bugs.webkit.org/show_bug.cgi?id=102167

        Reviewed by Simon Fraser.

        willSendRequest comes in on a background thread but we need to do HostRecord accounting on the main thread.

        So we'll just dispatch the receivedRedirect call to the main thread RunLoop.

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

2012-11-13  Timothy Hatcher  <timothy@apple.com>

        Make InspectorFrontendHost.moveWindowBy work in WebKit2 for Mac.

        https://bugs.webkit.org/show_bug.cgi?id=102154

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebInspectorProxy.h:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::getWindowFrame): Added. Call setInspectorWindowFrame.
        (WebKit::setWindowFrame): Added. Call inspectorWindowFrame.
        (WebKit::WebInspectorProxy::setInspectorWindowFrame): Added.
        (WebKit::WebInspectorProxy::inspectorWindowFrame): Added.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Create and set the WKPageUIClient
        with getWindowFrame and setWindowFrame.

2012-11-13  Jon Lee  <jonlee@apple.com>

        Reduce snapshot waiting time
        https://bugs.webkit.org/show_bug.cgi?id=102147
        <rdar://problem/12695539>

        Reviewed by Brian Weinstein.

        * WebProcess/Plugins/PluginView.cpp: Reduce to 1 second. Improves impressions of responsiveness.

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

        Factor the code to enter accelerated compositing given a layer out into a separate method
        https://bugs.webkit.org/show_bug.cgi?id=102155

        Reviewed by Andreas Kling.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _enterAcceleratedCompositingMode:]):
        (-[WKView _enterAcceleratedCompositingModeWithRootLayer:]):
        * UIProcess/API/mac/WKViewInternal.h:

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

        RemoteGraphicsLayer destructor should call GraphicsLayer::willBeDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=102135

        Reviewed by Andreas Kling.

        Call GraphicsLayer::willBeDestroyed from the RemoteGraphicsLayer destructor and move
        the call to RemoteLayerTreeContext::layerWillBeDestroyed to the overridden
        willBeDestroyed member function.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        (RemoteGraphicsLayer):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::~RemoteGraphicsLayer):
        (WebKit::RemoteGraphicsLayer::willBeDestroyed):
        (WebKit):

2012-11-13  Brady Eidson  <beidson@apple.com>

        Split NetworkRequest up into a request class and a loading class.
        https://bugs.webkit.org/show_bug.cgi?id=102049

        Reviewed by Alexey Proskuryakov.

        NetworkRequest unintentionally grew into a class that managed actual loading.

        This patch splits it into "NetworkResourceLoadParameters" for all request-related data
        and "NetworkResourceLoader" for handling the actual load itself.

        Change HostRecord to manage NetworkResourceLoaders instead of NetworkRequests:
        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::~HostRecord):
        (WebKit::HostRecord::schedule):
        (WebKit::HostRecord::addLoadInProgress):
        (WebKit::HostRecord::remove):
        (WebKit::HostRecord::hasRequests):
        (WebKit::HostRecord::limitRequests):
        * NetworkProcess/HostRecord.h:
        (WebKit::HostRecord::loadersPending):

        A new class to be a container for all the data required to start a network load:
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (WebKit::NetworkResourceLoadParameters::request):
        (WebKit::NetworkResourceLoadParameters::priority):
        (WebKit::NetworkResourceLoadParameters::contentSniffingPolicy):

        Pass a single NetworkResourceLoadParameters around instead of multiple bits of data:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleResourceLoad):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequestsForHost):
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        The actual ResourceHandleClient that does the actual loading:
        * NetworkProcess/NetworkResourceLoader.cpp: Renamed from Source/WebKit2/NetworkProcess/NetworkRequest.cpp.
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::priority):
        (WebKit::NetworkResourceLoader::start):
        (WebKit::requestsToStopMutex):
        (WebKit::requestsToStop):
        (WebKit::NetworkResourceLoader::scheduleStopOnMainThread):
        (WebKit::NetworkResourceLoader::performStops):
        (WebKit::NetworkResourceLoader::stop):
        (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveData):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):
        (WebKit::responseMap):
        (WebKit::generateWillSendRequestID):
        (WebKit::didReceiveWillSendRequestHandled):
        (WebKit::NetworkResourceLoader::willSendRequest):
        (WebKit::NetworkResourceLoader::didSendData):
        (WebKit::NetworkResourceLoader::didReceiveCachedMetadata):
        (WebKit::NetworkResourceLoader::wasBlocked):
        (WebKit::NetworkResourceLoader::cannotShowURL):
        (WebKit::NetworkResourceLoader::willCacheResponse):
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage):
        (WebKit::NetworkResourceLoader::didReceiveAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::didCancelAuthenticationChallenge):
        (WebKit::NetworkResourceLoader::receivedCancellation):
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkResourceLoader::supportsDataArray):
        (WebKit::NetworkResourceLoader::didReceiveDataArray):
        (WebKit::NetworkResourceLoader::willStopBufferingData):
        (WebKit::NetworkResourceLoader::createAsyncFileStream):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::create):
        (WebKit::NetworkResourceLoader::identifier):
        (WebKit::NetworkResourceLoader::connectionToWebProcess):

        * WebKit2.xcodeproj/project.pbxproj:

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

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

        Store destroyed layers in the remote layer tree transaction
        https://bugs.webkit.org/show_bug.cgi?id=102127

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (RemoteLayerTreeTransaction):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::setDestroyedLayerIDs):
        (WebKit):
        (WebKit::RemoteLayerTreeTransaction::dump):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        (RemoteGraphicsLayer):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::~RemoteGraphicsLayer):
        (WebKit::RemoteGraphicsLayer::removeFromParent):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        (RemoteLayerTreeContext):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):
        (WebKit::RemoteLayerTreeContext::flushLayers):

2012-11-13  Timothy Hatcher  <timothy@apple.com>

        Adjust the Web Inspector window title frame if needed to prevent it from intersecting the dock button.

        https://bugs.webkit.org/show_bug.cgi?id=102073

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorWindow _customTitleFrame]): Added. Adjust the title frame.

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

        Store layer positions and sizes in the transaction
        https://bugs.webkit.org/show_bug.cgi?id=102115

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (LayerProperties):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        (RemoteGraphicsLayer):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::setPosition):
        (WebKit::RemoteGraphicsLayer::setSize):

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

        The layer tree transaction should include the root layer
        https://bugs.webkit.org/show_bug.cgi?id=102109

        Reviewed by Andreas Kling.

        Keep the root layer ID in the layer tree transaction and encode/decode and dump it.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (RemoteLayerTreeTransaction):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::setRootLayerID):
        (WebKit):
        (WebKit::RemoteLayerTreeTransaction::dump):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        (RemoteLayerTreeContext):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::RemoteLayerTreeContext):
        (WebKit::RemoteLayerTreeContext::setRootLayer):
        (WebKit::RemoteLayerTreeContext::flushLayers):

2012-11-13  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] TiledBackingStore: WebChromeClient::pageRect() should consider viewport size
        https://bugs.webkit.org/show_bug.cgi?id=101946

        Reviewed by Noam Rosenthal.

        WebChromeClient::pageRect() should consider viewport size when TILED_BACKING_STORE enabled.

        Based on patch by Kenneth Rohde Christiansen.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::pageRect):

2012-11-13  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Directly composited animated GIFs only render the first image.
        https://bugs.webkit.org/show_bug.cgi?id=102043

        Reviewed by Noam Rosenthal.

        CoordinatedGraphicsLayer::setContentsToImage() checks the pointer to the image,
        not nativeImagePtr, so Coordinated Graphics currently draws only the first frame
        of gif animations. This patch makes Coordinated Graphics draw gif animations.

        In addition, this patch modifies the style of direct image compositing
        code to match other parts of CoordinatedGraphicsLayer.

        Test: ManualTests/animated-gif-on-compositing-layer.html

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeImageBacking):
        (WebCore):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::hasPendingVisibleChanges):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-12  Huang Dongsung  <luxtella@company100.net>

        [Qt] REGRESSION(134142): overscaled tiles in pixel test results and MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=101918

        Reviewed by Noam Rosenthal.

        Currently, CoordinatedBackingStore can keep out-dated contents size, because the
        size of CoordinatedBackingStore is set by only LayerTreeRenderer::createTile().
        Although the size of GraphicsLayer is changed, LayerTreeRenderer::createTile()
        is not called. However, LayerTreeRenderer::createTile() is always called, when
        the contents scale of GraphicsLayer is changed.

        This patch makes sure that we reset the backing store's size to the
        layer size when UpdateTile or RemoveTile are called.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::setSize):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::getBackingStore):
        (WebKit::LayerTreeRenderer::removeBackingStoreIfNeeded):
        (WebKit::LayerTreeRenderer::resetBackingStoreSizeToLayerSize):
        (WebKit):
        (WebKit::LayerTreeRenderer::createTile):
        (WebKit::LayerTreeRenderer::removeTile):
        (WebKit::LayerTreeRenderer::updateTile):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createTile):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit::CoordinatedTile::updateBackBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTileClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createTile):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-12  Sam Weinig  <sam@webkit.org>

        <rdar://problem/12445176>
        WebProcess needs permission to open AppleUpstreamUserClient

        Rubber-stamped by Dan Bernstein.

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

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Build fix after r134346 and 134347.
        
        Use frameView.isFlipped, not frameView.flipped in the assertion.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow):

2012-11-12  Timothy Hatcher  <timothy@apple.com>

        Add a dock button to the top right corner of the Web Inspector window (similar to the full screen button).

        https://bugs.webkit.org/show_bug.cgi?id=102023

        Reviewed by Anders Carlsson.

        * Resources/Dock.pdf: Added.
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::attach): Set the SetAttachedWindow message.
        (WebKit::WebInspectorProxy::detach): Ditto.
        (WebKit::WebInspectorProxy::attachAvailabilityChanged): Added. Call platformAttachAvailabilityChanged.
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in: Added AttachAvailabilityChanged message.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter attach:]): Added. Call WebInspectorProxy::attach.
        (-[WKWebInspectorWindow _cursorForResizeDirection:]): Added.
        (WebKit::WebInspectorProxy::createInspectorWindow): Create the dock button and add it.
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged): Added. Update hidden state of the dock button.
        * WebKit2.xcodeproj/project.pbxproj: Added Dock.pdf.
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setAttachedWindow): Added. Call through to the frontend client.
        (WebKit::WebInspector::updateDockingAvailability): Send AttachAvailabilityChanged message.
        * WebProcess/WebPage/WebInspector.h:
        * WebProcess/WebPage/WebInspector.messages.in: Added SetAttachedWindow message.

        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged): Added stub.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged): Ditto.
        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged): Ditto.
        * UIProcess/win/WebInspectorProxyWin.cpp:
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged): Ditto.

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

        Include child layers in the remote layer tree transaction
        https://bugs.webkit.org/show_bug.cgi?id=102026

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        Encode and decode child layer IDs.

        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
        Grab all child layer IDs and stick them in a vector.

        (WebKit::dumpChangedLayers):
        Dump child layer IDs as well.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::setChildren):
        (WebKit::RemoteGraphicsLayer::addChild):
        (WebKit::RemoteGraphicsLayer::addChildAtIndex):
        (WebKit::RemoteGraphicsLayer::addChildAbove):
        (WebKit::RemoteGraphicsLayer::addChildBelow):
        (WebKit::RemoteGraphicsLayer::replaceChild):
        Call noteSublayersChanged.

        (WebKit::RemoteGraphicsLayer::noteSublayersChanged):
        Note that the Children property changed.

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

        Send along the current remote layer tree transaction with the commit message
        https://bugs.webkit.org/show_bug.cgi?id=102014

        Reviewed by Tim Horton.

        Add encode and decode member functions to RemoteLayerTreeTransaction and RemoteLayerTreeTransaction::LayerProperties.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.messages.in:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::commit):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::flushLayers):

2012-11-12  Brady Eidson  <beidson@apple.com>

        Get rid of the CrossOriginRedirectReceived message to the NetworkProcess.
        https://bugs.webkit.org/show_bug.cgi?id=102010

        Reviewed by Alexey Proskuryakov.

        This message was a stop-gap measure for when the NetworkProcess did scheduling but not loading.
        Now that the NetworkProcess does loading it doesn't need to be told when redirect is received.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Get rid of the message to the NetworkProcess.

        * NetworkProcess/NetworkRequest.cpp:
        (WebKit::NetworkRequest::willSendRequest): After willSendRequest is dispatched to the WebProcess, directly call
          "receivedRedirect" on the NetworkResourceLoadScheduler.

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::receivedRedirect): Renamed from crossOriginRedirectReceived, as the
          function already checks to see if the redirect was actually cross-origin.
        * NetworkProcess/NetworkResourceLoadScheduler.h:

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::crossOriginRedirectReceived): A no-op so the WebProcess doesn't
          do any host record accounting of its own.

2012-11-12  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin should use PDFKit's context menu instead of the default WebKit one
        https://bugs.webkit.org/show_bug.cgi?id=101896
        <rdar://problem/12555173>

        Reviewed by Anders Carlsson.

        Show the context menu that PDFKit vends us instead of the default WebKit one
        when PDFPlugin is told to show a context menu.

        Also, react to the didChangeContentScaleFactor callback, so that when the context
        menu (or HUD) is used to change the scale factor, we can inform PluginView.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        Add pdfLayerController:didChangeContentScaleFactor: delegate callback.
        Rename tileScaleFactor to contentScaleFactor.
        Add rightMouseDown: and menuForEvent: on PDFLayerController.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin):
        Add notifyContentScaleFactorChanged, handleContextMenuEvent, and nsEventForWebMouseEvent.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate pdfLayerController:didChangeContentScaleFactor:]): Forward content scale factor changes to PDFPlugin.
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Rename tileScaleFactor to contentScaleFactor.
        (WebKit::PDFPlugin::geometryDidChange): Rename tileScaleFactor to contentScaleFactor.
        (WebKit::eventTypeFromWebEvent): It turns out we can infer whether the mouse is being dragged during a MouseMove event
        by whether it has a mouse button associated with it or not, so we don't need to track this state manually.
        (WebKit::PDFPlugin::nsEventForWebMouseEvent): Factor the part of handleMouseEvent that creates NSEvents* out into its own function.
        (WebKit::PDFPlugin::handleMouseEvent):
        Don't track mouseButtonIsDown manually, make use of the new nsEventForWebMouseEvent.
        Hand rightMouseDown: to PDFLayerController instead of mouseDown: if necessary.
        (WebKit::PDFPlugin::handleContextMenuEvent): Grab the relevant NSMenu from PDFKit and display it.
        (WebKit::PDFPlugin::handleKeyboardEvent): Don't pass a bogus mouseButtonIsDown to eventTypeFromWebEvent.
        (WebKit::PDFPlugin::notifyContentScaleFactorChanged): Update PluginView and co.'s notion of page scale when
        PDFKit changes it (generally from the context menu/HUD). Also update page size and scrollbar size/position.
        (WebKit::PDFPlugin::setScrollOffset): Don't call SimplePDFPlugin's implementation, as PDFKit handles invalidation itself.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::updateGeometry): Rename tileScaleFactor to contentScaleFactor.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::updateGeometry): Rename tileScaleFactor to contentScaleFactor.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Make m_scrollOffset protected.

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

        Add a RemoteLayerTreeHost object in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=101999

        Reviewed by Tim Horton.

        Add a (mostly empty) RemoteLayerTreeHost class that will live in the UI process and host the layer tree.

        * DerivedSources.make:
        Add RemoteLayerTreeHost.messages.in.

        * Platform/CoreIPC/MessageID.h:
        Add a RemoteLayerTreeHost message class.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addMessageReceiver):
        (WebKit::WebProcessProxy::removeMessageReceiver):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        Add a message receiver map to the web process proxy.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        Add a RemoteLayerTreeHost member variable.

        * UIProcess/mac/RemoteLayerTreeHost.h:
        Add new class.

        * UIProcess/mac/RemoteLayerTreeHost.messages.in:
        Add new messages file with a single Commit message.
        
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::RemoteLayerTreeHost):
        Add the layer tree host as a message receiver.

        (WebKit::RemoteLayerTreeHost::~RemoteLayerTreeHost):
        Remote the layer tree host as a message receiver.

        (WebKit::RemoteLayerTreeHost::didReceiveMessage):
        Call the generated member function.

        (WebKit::RemoteLayerTreeHost::commit):
        Add an empty stub for now.

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

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::flushLayers):
        Send a commit message to the remote layer tree host.

2012-11-12  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin should support non-1 device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=101923

        Reviewed by Alexey Proskuryakov.

        Do the appropriate plumbing to ensure that PDFPlugin handles device scale factor > 1
        (it's called contentsScaleFactor in plugins), both for normal drawing and for snapshotting.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add deviceScaleFactor setter/getter to PDFLayerController.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Override contentsScaleFactorChanged.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Plumb device scale factor through to PDFLayerController.
        (WebKit::PDFPlugin::contentsScaleFactorChanged): Plumb device scale factor through to PDFLayerController
        when we're notified that it has changed.
        (WebKit::PDFPlugin::snapshot): Create snapshots with the device scale factor applied.

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

        Rename RemoteLayerTreeController to RemoteLayerTreeContext
        https://bugs.webkit.org/show_bug.cgi?id=101993

        Reviewed by Andreas Kling.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        (RemoteGraphicsLayer):
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::create):
        (WebKit::RemoteGraphicsLayer::RemoteGraphicsLayer):
        (WebKit::RemoteGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h: Renamed from Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.h.
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm: Renamed from Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeController.mm.
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::graphicsLayerFactory):
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):

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

        Add debug only code to dump the contents of a transaction
        https://bugs.webkit.org/show_bug.cgi?id=101991

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::writeIndent):
        (WebKit::dumpChangedLayers):
        (WebKit::RemoteLayerTreeTransaction::dump):

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

        Store name changes in the layer transaction
        https://bugs.webkit.org/show_bug.cgi?id=101981

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (LayerProperties):
        Add new LayerProperties class.

        (RemoteLayerTreeTransaction):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
        Find the changed layer properties for the given layer and apply the changed properties.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        (WebKit::RemoteGraphicsLayer::layerID):
        Add new getter.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::generateLayerID):
        (WebKit::RemoteGraphicsLayer::RemoteGraphicsLayer):
        Give each remote graphics layer a unique ID.

2012-11-12  Brady Eidson  <beidson@apple.com>

        NetworkProcess: Use an accurate shouldContentSniff value when creating ResourceHandles
        https://bugs.webkit.org/show_bug.cgi?id=101872

        Reviewed by Alexey Proskuryakov.

        The WebProcess now passes "shouldContentSniff" over to the NetworkProcess with the requests so it can be respected.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleNetworkRequest): Update to pass through "shouldContentSniff"
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * NetworkProcess/NetworkRequest.cpp:
        (WebKit::NetworkRequest::NetworkRequest):
        (WebKit::NetworkRequest::start):
        * NetworkProcess/NetworkRequest.h:
        (WebKit::NetworkRequest::create):

        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleNetworkRequest): Update to pass through "shouldContentSniff"
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * WebProcess/Network/NetworkProcessConnection.h:

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Update to pass through "shouldContentSniff"

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

        More work towards packaging layer changes up into a transaction object
        https://bugs.webkit.org/show_bug.cgi?id=101969

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::RemoteLayerTreeTransaction):
        (WebKit::RemoteLayerTreeTransaction::~RemoteLayerTreeTransaction):
        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
        Add empty stubs.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::flushCompositingStateForThisLayerOnly):
        Call layerPropertiesChanged on the current transaction.

        * WebProcess/WebPage/mac/RemoteLayerTreeController.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeController.mm:
        (WebKit::RemoteLayerTreeController::RemoteLayerTreeController):
        Initialize m_currentTransaction till 0.

        (WebKit::RemoteLayerTreeController::currentTransaction):
        Add getter. This may only be called from beneath flushLayers.

        (WebKit::RemoteLayerTreeController::flushLayers):
        Create a transaction before flusing the compositing state.

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

        More work on remote layer flushing
        https://bugs.webkit.org/show_bug.cgi?id=101960

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::flushCompositingState):
        Call recursiveCommitChanges.

        (WebKit::RemoteGraphicsLayer::flushCompositingStateForThisLayerOnly):
        Add stub function for now.

        (WebKit::RemoteGraphicsLayer::recursiveCommitChanges):
        Call flushCompositingStateForThisLayerOnly and then call recursiveCommitChanges recursively on all the child layers.

        * WebProcess/WebPage/mac/RemoteLayerTreeController.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeController.mm:
        (WebKit::RemoteLayerTreeController::create):
        (WebKit::RemoteLayerTreeController::RemoteLayerTreeController):
        This now takes a web page.

        (WebKit::RemoteLayerTreeController::setRootLayer):
        Add empty function.

        (WebKit::RemoteLayerTreeController::layerFlushTimerFired):
        Call flushLayers explicitly.

        (WebKit::RemoteLayerTreeController::flushLayers):
        Force a layout and then sync all the compositing layers.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        RemoteLayerTreeController::create now takes a web page.

        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
        Call the remote layer tree controller.

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

        Layer property changes should schedule a remote layer flush
        https://bugs.webkit.org/show_bug.cgi?id=101951

        Reviewed by Andreas Kling.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        New class. For now this just contains the changed layer properties flags but this will be extended
        to cover changed layers as well.

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

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::RemoteGraphicsLayer):
        Initialize m_uncommittedLayerChanges.

        (WebKit::RemoteGraphicsLayer::setName):
        Set the name and call noteLayerPropertiesChanged.

        (WebKit::RemoteGraphicsLayer::noteLayerPropertiesChanged):
        Notify that a flush is required (if required).

        * WebProcess/WebPage/mac/RemoteLayerTreeController.h:
        Add a layer flush timer.

        * WebProcess/WebPage/mac/RemoteLayerTreeController.mm:
        (WebKit::RemoteLayerTreeController::RemoteLayerTreeController):
        Initialize the layer flush timer.

        (WebKit::RemoteLayerTreeController::scheduleLayerFlush):
        Schedule the layer flush timer if needed.

        (WebKit::RemoteLayerTreeController::layerFlushTimerFired):
        Empty stub for now.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):
        Call the remote layer tree controller.

2012-11-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL] Add implementations of device - user conversion methods
        https://bugs.webkit.org/show_bug.cgi?id=101938

        Reviewed by Laszlo Gombos.

        Consider the deviceScaleFactor when convertion to/from user
        and device units.

        This affects DOM API's such as window.moveTo, resizeTo etc.

        * UIProcess/efl/PageClientBase.cpp:
        * UIProcess/efl/PageClientBase.h:
        (PageClientBase):
        * UIProcess/efl/PageClientDefaultImpl.cpp:
        (WebKit::PageClientDefaultImpl::convertToDeviceSpace):
        (WebKit):
        (WebKit::PageClientDefaultImpl::convertToUserSpace):
        * UIProcess/efl/PageClientDefaultImpl.h:
        (PageClientDefaultImpl):
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::convertToDeviceSpace):
        (WebKit):
        (WebKit::PageClientLegacyImpl::convertToUserSpace):
        * UIProcess/efl/PageClientLegacyImpl.h:
        (PageClientLegacyImpl):

2012-11-12  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Black screen when applications use software backend.
        https://bugs.webkit.org/show_bug.cgi?id=101659

        Reviewed by Kenneth Rohde Christiansen.

        If creating openGL context fails, automatically fallback to software rendering.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::hardwareAccelerationEnabled):
        (EwkViewImpl):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::ensureRootLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit::LayerTreeRenderer::setAccelerationMode):
        (LayerTreeRenderer):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::createDrawingAreaProxy):

2012-11-12  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2] Indentation nit on WebPage
        https://bugs.webkit.org/show_bug.cgi?id=101928

        Reviewed by Kenneth Rohde Christiansen.

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

2012-11-12  Jiyeon Kim  <jiyeon0402.kim@samsung.com>

        [EFL][WK2] Add ewk_settings_offline_web_application_cache_enabled set/get APIs
        https://bugs.webkit.org/show_bug.cgi?id=101688

        Reviewed by Gyuyoung Kim.

        Add ewk_settings_offline_web_application_cache_get API to be used for enabling disabling the web application cache.
        Add ewk_settings_offline_web_application_cache_set API to be used for getting the web application cache status.
        In addition, offline web application cache is enabled by default.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_offline_web_application_cache_enabled_set):
        (ewk_settings_offline_web_application_cache_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-11-11  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] ElementShadow should have RuleFeatureSet for select attribute selectors.
        https://bugs.webkit.org/show_bug.cgi?id=101180

        Reviewed by Dimitri Glazkov.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r134144.
        http://trac.webkit.org/changeset/134144
        https://bugs.webkit.org/show_bug.cgi?id=101876

        seems to break win 7 chromium browser test (Requested by
        hayato on #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-11  Kenichi Ishibashi  <bashi@chromium.org>

        WTFString::utf8() should have a mode of conversion to use replacement character
        https://bugs.webkit.org/show_bug.cgi?id=101678

        Reviewed by Alexey Proskuryakov.

        Update the symbol for String::utf8().

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-10  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] Use QLibraryInfo to search for executables.
        https://bugs.webkit.org/show_bug.cgi?id=101774

        Reviewed by Simon Hausmann.

        This allows finding the WebProcess or the PluginProcess
        in it's installed location. This is necessary when
        deploying QtWebKit with an installer.

        * Shared/qt/ProcessExecutablePathQt.cpp:
        (WebKit::executablePath):

2012-11-09  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Rename tileRect from targetRect.
        https://bugs.webkit.org/show_bug.cgi?id=101705

        Reviewed by Noam Rosenthal.

        Messages::LayerTreeCoordinatorProxy::CreateTileForLayer contains the targetRect
        variable. The targetRect stands for the rect of the tile created. This patch
        renames tileRect to enhance the clearity.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStoreTile::swapBuffers):
        (WebKit::CoordinatedBackingStoreTile::setBackBuffer):
        (WebKit::CoordinatedBackingStore::updateTile):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStoreTile):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::updateTile):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (TileUpdate):
        (WebKit::LayerTreeRenderer::TileUpdate::TileUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createTile):
        (WebCore::CoordinatedGraphicsLayer::updateTile):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTileClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createTile):
        (WebKit::LayerTreeCoordinator::updateTile):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-09  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Allow ports to decide whether an image should be directly composited
        https://bugs.webkit.org/show_bug.cgi?id=101827

        Reviewed by Simon Fraser.

        Implement shouldDirectlyCompositeImage for coordinated graphics, effectively disabling direct
        compositing of images with width or height larger than 2000 pixels.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::shouldDirectlyCompositeImage):
        (WebCore):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-09  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Antialias the edge-tiles of CoordinatedBackingStore.
        https://bugs.webkit.org/show_bug.cgi?id=101818

        Reviewed by Noam Rosenthal.

        Since we now have the entire surfaceRect, we can antialias the edge-tiles.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::paintTilesToTextureMapper):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):

2012-11-09  Rick Byers  <rbyers@chromium.org>

        No tests for changing mouse cursors
        https://bugs.webkit.org/show_bug.cgi?id=100550

        Reviewed by Adam Barth.

        Add necessary exports for Internals::getCurrentCursorInfo

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-09  Vivek Galatage  <vivekgalatage@gmail.com>

        Add missing exports setMediaTypeOverride, setResolutionOverride and layerTreeAsText to WebKit2CFLite.def
        https://bugs.webkit.org/show_bug.cgi?id=101816

        Reviewed by Anders Carlsson.

        Add missing exports setMediaTypeOverride, setResolutionOverride and layerTreeAsText to WebKit2CFLite.def to fix win-cairo build.

        * win/WebKit2CFLite.def:

2012-11-09  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Amend CoordinatedBackingStore::paintToTextureMapper to fit its own semantic.
        https://bugs.webkit.org/show_bug.cgi?id=101701

        Reviewed by Noam Rosenthal.

        Currently, all subclasses of TextureMapperPlatformLayer implement
        paintToTextureMapper to draw its own texture on the given targetRect. Subclasses
        can scale the texture to fit the size of the targetRect. However, only
        CoordinatedBackingStore::paintToTextureMapper draws its texture using its own
        texture size. There is no bug yet, because TextureMapperLayer uses
        CoordinatedBackingStore only as a backing store, not a content layer. So,
        TextureMapperLayer always request CoordinatedBackingStore to draw using its own
        texture size. However, we can use CoordinatedBackingStore as a content layer in
        the future. So this patch fixes this potential bug.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::setSize):
        (WebKit):
        (WebKit::mapToContents):
        (WebKit::paintTilesToTextureMapper):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::createTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createTile):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createTile):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit::CoordinatedTile::updateBackBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTileClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createTile):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-09  Brady Eidson  <beidson@apple.com>

        Implement NetworkProcess willSendRequest
        https://bugs.webkit.org/show_bug.cgi?id=101812

        Reviewed by Alexey Proskuryakov.

        Message to the WebProcess to get the new request, if any.

        Because network callbacks are coming in on a background thread we have to jump through hoops to synchronously
        ask the WebProcess, but these hoops follow an established pattern of using async messaging with BlockingResourceMap.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::willSendRequestHandled): Pass the new request back to NetworkRequest for handling.
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        * NetworkProcess/NetworkRequest.cpp:
        (WebKit::NetworkRequest::didFail):
        (WebKit::responseMap):
        (WebKit::generateWillSendRequestID):
        (WebKit::didReceiveWillSendRequestHandled):
        (WebKit::NetworkRequest::willSendRequest): Asynchronously message the WebProcess but synchronous wait for a reply back.
        * NetworkProcess/NetworkRequest.h:

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::willSendRequest): Ask the WebResourceLoadScheduler for the new request then
          message back to the NetworkProcess with the reply.
        * WebProcess/Network/NetworkProcessConnection.h:

        * WebProcess/Network/NetworkProcessConnection.messages.in:

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::willSendRequest):
        * WebProcess/Network/WebResourceLoadScheduler.h:

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

        PDFPlugin should support clicking on external links
        https://bugs.webkit.org/show_bug.cgi?id=101647
        <rdar://problem/12555222>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add details about clickedLinkWithURL: callback.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add clickedLink() and storage for the last mouse event that was dispatched.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate pdfLayerController:clickedLinkWithURL:]): Forward the URL to PDFPlugin.
        (WebKit::PDFPlugin::handleMouseEvent): Store the last mouse event that was dispatched.
        We use this to get the correct mouse button and modifier keys, so that command-clicking, etc. links works.
        (WebKit::PDFPlugin::clickedLink): Request a load given the new URL.

        * PluginProcess/PluginControllerProxy.h:
        (PluginControllerProxy):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::shouldAllowScripting):
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::shouldAllowScripting):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldAllowScripting):
        * WebProcess/Plugins/PluginView.h:
        Add shouldAllowScripting() function to Plugin (and plumb through PluginProxy and PluginView, etc.)

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::allowScript): Override allowScript(); if the frame is hosting a PluginDocument,
        ask its plugin whether it should allow execution of JavaScript and JavaScript URLs or not.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Disable scripting for SimplePDFPlugin (and, by inheritance, PDFPlugin).

2012-11-09  Brady Eidson  <beidson@apple.com>

        Implement WebResourceBuffer::isEmpty()
        https://bugs.webkit.org/show_bug.cgi?id=101805

        Reviewed by Alexey Proskuryakov.

        This is required to make the existing subresource loading in NetworkProcess work correctly,
        as there's an isEmpty() check in the WebProcess that decides whether or not to actually deliver 
        the data to the ResourceLoader.

        * Shared/WebResourceBuffer.cpp:
        (WebKit::WebResourceBuffer::isEmpty):
        * Shared/WebResourceBuffer.h:

2012-11-09  Hurnjoo Lee  <hurnjoo.lee@samsung.com>

        [EFL][WK2][AC] Fixed layers are shaking when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=101549

        Reviewed by Kenneth Rohde Christiansen.

        At the time of adjusting positions for fixed layers, the locations of
        fixed layers are calculated incorrectly because the contentsSize is empty.

        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize): Call the
        setContentsSize function in LayerTreeCoordinatorProxy in order to calculate
        the locations of fixed layers correctly.

2012-11-09  Brady Eidson  <beidson@apple.com>

        NetworkRequest refactoring
        https://bugs.webkit.org/show_bug.cgi?id=101777

        Reviewed by Alexey Proskuryakov.

        Move all of the ResourceHandleClient stubs from the .h to the .cpp in one patch
        to make future patches cleaner.

        Also completely remove the declaration for shouldCacheResponse() for now.

        * NetworkProcess/NetworkRequest.cpp:
        (WebKit::NetworkRequest::willSendRequest):
        (WebKit::NetworkRequest::didSendData):
        (WebKit::NetworkRequest::didReceiveCachedMetadata):
        (WebKit::NetworkRequest::wasBlocked):
        (WebKit::NetworkRequest::cannotShowURL):
        (WebKit::NetworkRequest::willCacheResponse):
        (WebKit::NetworkRequest::shouldUseCredentialStorage):
        (WebKit::NetworkRequest::didReceiveAuthenticationChallenge):
        (WebKit::NetworkRequest::didCancelAuthenticationChallenge):
        (WebKit::NetworkRequest::receivedCancellation):
        (WebKit::NetworkRequest::canAuthenticateAgainstProtectionSpace):
        (WebKit::NetworkRequest::supportsDataArray):
        (WebKit::NetworkRequest::didReceiveDataArray):
        (WebKit::NetworkRequest::willStopBufferingData):
        (WebKit::NetworkRequest::createAsyncFileStream):
        * NetworkProcess/NetworkRequest.h:

2012-11-09  Alexey Proskuryakov  <ap@apple.com>

        CookieJar uses Document class, which is a layering violation
        https://bugs.webkit.org/show_bug.cgi?id=101621

        Reviewed by Brady Eidson.

        * UIProcess/API/C/WKAPICast.h: Don't include CookieJar.h, its completely unnecessary.

2012-11-09  peavo@outlook.com  <peavo@outlook.com>

        WinCairo build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=101739

        Reviewed by Kentaro Hara.

        * win/WebKit2CFLite.def:

2012-11-09  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] REGRESSION (r134043): API tests crashes
        https://bugs.webkit.org/show_bug.cgi?id=101742

        Reviewed by Kenneth Rohde Christiansen.

        Do not assert on PassRefPtr<WebContext> after it becomes 0.

        * UIProcess/efl/BatteryProvider.cpp:
        (BatteryProvider::BatteryProvider):
        * UIProcess/efl/NetworkInfoProvider.cpp:
        (NetworkInfoProvider::NetworkInfoProvider):

2012-11-09  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Random crashes in layout tests on the bot
        https://bugs.webkit.org/show_bug.cgi?id=101687

        Reviewed by Kenneth Rohde Christiansen.

        Speculative fix for a crash on the bot.
        If didCommitLoad() is called before the view size was set, we will
        try to paint an empty area, and that will crash.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::update):

2012-11-09  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Make classes for client use WebContext instead of WKContext
        https://bugs.webkit.org/show_bug.cgi?id=101564

        Reviewed by Kenneth Rohde Christiansen.

        EwkContext class has been refactored to use WebContext instead of WKContext in r133844,
        so this patch makes client classes use WebContext

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/efl/BatteryProvider.cpp:
        (BatteryProvider::~BatteryProvider):
        (BatteryProvider::create):
        (BatteryProvider::BatteryProvider):
        (BatteryProvider::didChangeBatteryStatus):
        * UIProcess/efl/BatteryProvider.h:
        (BatteryProvider):
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::ContextHistoryClientEfl):
        * UIProcess/efl/ContextHistoryClientEfl.h:
        (WebKit::ContextHistoryClientEfl::create):
        (ContextHistoryClientEfl):
        * UIProcess/efl/NetworkInfoProvider.cpp:
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        (NetworkInfoProvider::~NetworkInfoProvider):
        * UIProcess/efl/NetworkInfoProvider.h:
        (NetworkInfoProvider):

2012-11-09  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Fix build warning in test_ewk2_context.cpp: [-Wwrite-strings]
        https://bugs.webkit.org/show_bug.cgi?id=101666

        Reviewed by Kenneth Rohde Christiansen.

        Use constant character pointer to fix [-Wwrite-strings] warning.

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

2012-11-09  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add support for custom cursors
        https://bugs.webkit.org/show_bug.cgi?id=101723

        Reviewed by Kenneth Rohde Christiansen.

        EwkViewImpl::setCursor() now properly handles custom
        cursors.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::setCursor):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):

2012-11-08  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Add a method to the TextCheckerEnchant class to check whether any dictionary is loaded
        https://bugs.webkit.org/show_bug.cgi?id=101570

        Reviewed by Gustavo Noronha Silva.

        To do not get the vector of loaded languages, WebKit2-EFL calls
        TextCheckerEnchant::hasDictionary() method to check whether the
        dictionaries vector is empty.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_continuous_spell_checking_enabled_set):
        * UIProcess/API/efl/ewk_text_checker.cpp:
        (Ewk_Text_Checker::hasDictionary):
        (Ewk_Text_Checker):
        * UIProcess/API/efl/ewk_text_checker_private.h:
        (Ewk_Text_Checker):

2012-11-08  Timothy Hatcher  <timothy@apple.com>

        Always use a textured window for the Web Inspector.

        https://bugs.webkit.org/show_bug.cgi?id=101693

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow): Removed the conditional for a textured window.

2012-11-08  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Don't send the messages for releasing resources during purging.
        https://bugs.webkit.org/show_bug.cgi?id=101685

        Reviewed by Noam Rosenthal.

        We don't need to send the messages related to releasing resources to UI Process
        during purging, because UI Process already had removed all resources.
        This patch gives us reducing slight messaging overhead and increasing readability.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::purgeBackingStores):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::purgeReleasedImages):
        (WebKit::LayerTreeCoordinator::removeTile):
        (WebKit::LayerTreeCoordinator::removeUpdateAtlas):
        (WebKit::LayerTreeCoordinator::purgeBackingStores):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-08  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2] Unused parameters on LayerTreeRenderer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=101653

        Reviewed by Noam Rosenthal.

        Because the 'tileID' parameter is not used now,
        comment out it to fix build warning -Wunused-parameter

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::removeBackingStoreIfNeeded):

2012-11-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add proper support for fullscreen API to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=101615

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::enterFullScreen):
        * UIProcess/API/efl/ewk_security_origin.cpp:
        (EwkSecurityOrigin::EwkSecurityOrigin):
        * UIProcess/API/efl/ewk_security_origin_private.h:
        (EwkSecurityOrigin::create): Add factory method to construct a
        EwkSecurityOrigin from a KURL.
        (EwkSecurityOrigin):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_fullscreen_exit): Add public API function to exit
        fullscreen mode.
        * UIProcess/API/efl/ewk_view.h: Add security origin parameter
        to fullscreen_enter smart function since this information is
        useful to the user agent.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (fullScreenCallback):
        (fullScreenExitCallback):
        (TEST_F):

2012-11-08  Brady Eidson  <beidson@apple.com>

        Have NetworkProcess do the actual loading of subresources.
        https://bugs.webkit.org/show_bug.cgi?id=101640

        Reviewed by Alexey Proskuryakov.

        This adds actual loading of subresources in the NetworkProcess.

        Currently a resource just gets its entire buffer of data built up and then delivered to the WebProcess in one chunk.

        Many FIXMEs point the path towards much better behavior.

        Project file stuff:
        * WebKit2.xcodeproj/project.pbxproj:

        Add a new Logging channel for scheduling so the one for loading can be separate:
        * Platform/Logging.cpp:
        * Platform/Logging.h:

        Add an enhancement FIXME:
        * NetworkProcess/HostRecord.cpp:
        (WebKit::HostRecord::remove):

        NetworkRequest now derives from ResourceHandleClient and does actual loading, messaging WebProcess as it does:
        * NetworkProcess/NetworkRequest.cpp:
        (WebKit::NetworkRequest::NetworkRequest):
        (WebKit::NetworkRequest::~NetworkRequest):
        (WebKit::NetworkRequest::start):
        (WebKit::requestsToStopMutex):
        (WebKit::requestsToStop):
        (WebKit::NetworkRequest::scheduleStopOnMainThread): Stop
        (WebKit::NetworkRequest::performStops):
        (WebKit::NetworkRequest::stop): Does NetworkRequest cleanup that happens no matter the state of the network load.
        (WebKit::NetworkRequest::didReceiveResponse):
        (WebKit::NetworkRequest::didReceiveData):
        (WebKit::NetworkRequest::didFinishLoading):
        (WebKit::NetworkRequest::didFail):
        * NetworkProcess/NetworkRequest.h:

        Change some logging and now invalid asserts, as well as starting requests in-process instead of relying on WebProcess:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        (WebKit::NetworkResourceLoadScheduler::scheduleNetworkRequest):
        (WebKit::NetworkResourceLoadScheduler::addLoadInProgress):
        (WebKit::NetworkResourceLoadScheduler::removeLoadIdentifier):
        (WebKit::NetworkResourceLoadScheduler::crossOriginRedirectReceived):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequests):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequestsForHost):
        (WebKit::NetworkResourceLoadScheduler::removeScheduledLoadIdentifiers):
        (WebKit::NetworkResourceLoadScheduler::scheduleRemoveLoadIdentifier):
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        (NetworkResourceLoadScheduler):

        Add a "ShareableResource" which includes a SharedMemory block, an offset into that block, and a size:
        * Shared/ShareableResource.cpp: Added.
        (WebKit::ShareableResource::Handle::Handle):
        (WebKit::ShareableResource::Handle::encode):
        (WebKit::ShareableResource::Handle::decode):
        (WebKit::ShareableResource::create):
        (WebKit::ShareableResource::ShareableResource):
        (WebKit::ShareableResource::~ShareableResource):
        (WebKit::ShareableResource::createHandle):
        (WebKit::ShareableResource::data):
        (WebKit::ShareableResource::size):
        * Shared/ShareableResource.h: 
        (WebKit::ShareableResource::Handle::isNull):
        (WebKit::ShareableResource::Handle::size):

        Add an implementation of WebCore::ResourceBuffer that wraps a ShareableResource instead of a SharedBuffer:
        * Shared/WebResourceBuffer.cpp:
        (WebKit::WebResourceBuffer::WebResourceBuffer):
        (WebKit::WebResourceBuffer::~WebResourceBuffer):
        (WebKit::WebResourceBuffer::data):
        (WebKit::WebResourceBuffer::size):
        * Shared/WebResourceBuffer.h:
        (WebResourceBuffer):
        (WebKit::WebResourceBuffer::create):

        Add messaging that responds to resource load events from the NetworkProcess and passes them to the scheduler:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveResponse):
        (WebKit::NetworkProcessConnection::didReceiveResource):
        (WebKit::NetworkProcessConnection::didFailResourceLoad):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

        Takes resource load events passed from the NetworkProcess and hands them off directly to WebCore ResourceLoaders:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Update some logging.
        (WebKit::WebResourceLoadScheduler::addMainResourceLoad): Ditto.
        (WebKit::WebResourceLoadScheduler::remove): Ditto.
        (WebKit::WebResourceLoadScheduler::crossOriginRedirectReceived): Ditto.
        (WebKit::WebResourceLoadScheduler::servePendingRequests): Ditto.
        (WebKit::WebResourceLoadScheduler::didReceiveResponse): Call through to ResourceLoader.
        (WebKit::WebResourceLoadScheduler::didReceiveResource): Ditto.
        (WebKit::WebResourceLoadScheduler::didFailResourceLoad): Ditto.
        * WebProcess/Network/WebResourceLoadScheduler.h:

2012-11-08  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove an invisible TiledBackingStore of CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=101424

        Reviewed by Noam Rosenthal.

        We must remove an invisible TiledBackingStore of CoordinatedGraphicsLayer.
        Currently, CoordinatedGraphicsLayer only removes a TiledBackingStore if
        !drawsContent() while TextureMapperLayer::updateBackingStore() removes a backing
        store if (!m_state.drawsContent || !m_state.contentsVisible || m_size.isEmpty()).
        CoordinatedGraphicsLayer must have the same behavior.

        In addition, this patch makes LayerTreeRenderer remove a backing store from
        GraphicsLayerTextureMapper when CoordinatedBackingStore does not have any tiles.

        Test: compositing/nested-direct-image-compositing.html

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::removeTile):
        (WebKit::CoordinatedBackingStore::isEmpty):
        (WebKit):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h:
        (CoordinatedBackingStore):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::removeBackingStoreIfNeeded):
        (WebKit):
        (WebKit::LayerTreeRenderer::removeTile):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale):

2012-11-08  Tim Horton  <timothy_horton@apple.com>

        [WK2] Print preview should vend images to the UIProcess instead of PDFs
        https://bugs.webkit.org/show_bug.cgi?id=101382
        <rdar://problem/9866766>

        Reviewed by Alexey Proskuryakov.

        In the interests of keeping PDF processing inside the WebProcess, we should
        remove print preview's reliance on PDFs, by handing bitmaps back instead.

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::create): Add an optional SharedMemory::Protection argument, so we can make
        ShareableBitmaps from read-only handles if desired. Defaults to read-write as previously.
        (WebKit::ShareableBitmap::createHandle): Add an optional SharedMemory::Protection argument, so we can make
        read-only handles if desired. Defaults to read-write as previously.
        * Shared/ShareableBitmap.h:
        * UIProcess/API/mac/WKPrintingView.h:
        (WebImage): Store WebImages instead of raw PDF data for previews.
        * UIProcess/API/mac/WKPrintingView.mm:
        (pageDidDrawToImage): Add a callback for when a preview we've requested is done rendering into an image.
        Cache the image in _pagePreviews if appropriate.
        (pageDidDrawToPDF): Do not handle PDF data unless we are expecting a real print callback (not a preview).
        (-[WKPrintingView _drawPreview:]): Request an image instead of PDF data when doing a print preview.
        * UIProcess/GenericCallback.h:
        (ImageCallback): Add a callback type with one argument: a ShareableBitmap::Handle.
        I can't use the GenericCallback template because ShareableBitmap::Handle doesn't have a corresponding WK type.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close): Add support for ImageCallback.
        (WebKit::WebPageProxy::imageCallback): Add support for ImageCallback.
        (WebKit::WebPageProxy::drawRectToImage): Rename drawRectToPDF to drawRectToImage.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Rename drawRectToPDF to drawRectToImage, add support for ImageCallback.
        * UIProcess/WebPageProxy.messages.in: Add support for ImageCallback.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawRectToImage): Rename drawRectToPDF to drawRectToImage.
        Make drawRectToImage create a bitmap snapshot of the page (using the normal snapshotting code),
        or, if the page is backed by a *PDFPlugin, draw the PDF document into a bitmap and use that.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Rename drawRectToPDF to drawRectToImage.
        * WebProcess/WebPage/WebPage.messages.in: Rename drawRectToPDF to drawRectToImage.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::drawPDFDocument): Rename drawRectToPDFFromPDFDocument to drawPDFDocument,
        because it's more like drawImage than anything else.

2012-11-08  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build without WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=101583

        Reviewed by Tor Arne Vestbø.

        WebProcess needs access to the QStyle themeing via the initializeWebKit2Theme() function from
        WebKit1. Try to access it depending on whether WebKit1 is built or not, not depending on whether
        widgets are available not.

        * WebProcess.pro:
        * qt/MainQt.cpp:
        (WebKit):
        (main):

2012-11-08  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Unreviewed build fix after r133880.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::setAdditionalPluginPath):

2012-11-08  KwangYong Choi  <ky0.choi@samsung.com>

        [EFL][WK2] Add ewk_context_additional_plugin_path_set API
        https://bugs.webkit.org/show_bug.cgi?id=101530

        Reviewed by Gyuyoung Kim.

        Add ewk_context_additional_plugin_path_set() to set additional plugin directory.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::setAdditionalPluginPath):
        (ewk_context_additional_plugin_path_set):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

2012-11-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Use explicit constructor in BatteryProvider, DownloadManagerEfl, NetworkInfoProvider
        https://bugs.webkit.org/show_bug.cgi?id=101567

        Reviewed by Kentaro Hara.

        Added explicit keyword in constructors of BatteryProvider, DownloadManagerEfl,
        and NetworkInfoProvider in order to avoid implicit type conversion.

        * UIProcess/efl/BatteryProvider.h:
        (BatteryProvider):
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):
        * UIProcess/efl/NetworkInfoProvider.h:
        (NetworkInfoProvider):

2012-11-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Use smart pointers in EwkContext more actively
        https://bugs.webkit.org/show_bug.cgi?id=101565

        Reviewed by Gyuyoung Kim.

        Since we're using WebContext instead of WKContext starting r133844 we should
        use smart pointers accordingly including PassRefPtr.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::~EwkContext):
        (EwkContext::create):
        (EwkContext::cookieManager):
        (EwkContext::ensureFaviconDatabase):
        (EwkContext::setFaviconDatabaseDirectoryPath):
        (EwkContext::addVisitedLink):
        (EwkContext::setCacheModel):
        (EwkContext::cacheModel):
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        (EwkContext::webContext):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        (Ewk_Database_Manager::create):
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (Ewk_Storage_Manager::create):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):

2012-11-08  Kangil Han  <kangil.han@samsung.com>

        [EFL][MiniBrowser] Add encoding detector option.
        https://bugs.webkit.org/show_bug.cgi?id=100931

        Reviewed by Gyuyoung Kim.

        Add triggering Settings::setUsesEncodingDetector for WK2 UI process.

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

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

        [GTK] WebKitWebView doesn't notify of favicon changes for known favicons but new pages
        https://bugs.webkit.org/show_bug.cgi?id=98874

        Reviewed by Martin Robinson.

        If the page is unknown (not registered in the icon database) but
        the icon is known (registered by another page) favicon-ready
        signal is not emitted because the icon has already been imported
        from the database. The view always asks for the favicon when the
        load has been committed, but it's usually too early and the
        favicon of the page is still unkown. We can use
        didChangeIconForPageURLCallback to know when to ask for the
        favicon emitting a favicon-changed signal. The callback
        iconDataReadyForPageURLCallback is still useful to process pending
        icon requests, but the favicon-ready signal can be removed in
        favor of favicon-changed.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (_WebKitFaviconDatabasePrivate): Keep a map of page icons that has
        been imported to make sure we only emit favicon-changed signal
        when the favicon URI has actually changed, because
        didChangeIconForPageURLCallback can be called multiple times for
        the same favicon URI in some cases.
        (webkit_favicon_database_class_init): Remove favicon-ready signal
        and add favicon-changed that includes the new favicon URI for the
        given page URI.
        (didChangeIconForPageURLCallback): Emit favicon-changed signal if
        the favicon URI is new or has changed for the given page URI.
        (iconDataReadyForPageURLCallback): Process pending icon requests.
        (webkitFaviconDatabaseCreate): Add implementation for
        didChangeIconForPageURLCallback.
        * UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate): Add favicon URI to make sure we only ask for a
        new favicon when the favicon URI has changed.
        (webkitWebViewUpdateFavicon): Update the favicon and emit
        notify::favicon if it has changed.
        (gotFaviconCallback): Update the favicon if the request hasn't
        been cancelled.
        (webkitWebViewRequestFavicon): Ask for the page favicon.
        (webkitWebViewUpdateFaviconURI): Updated the favicon URI and
        request the page favicon if the favicon URI has changed.
        (faviconChangedCallback): Call webkitWebViewUpdateFaviconURI() with
        the given favicon URI.
        (webkitWebViewWatchForChangesInFavicon): Connect to
        WebKitFaviconDatabase::favicon-changed.
        (webkitWebViewDisconnectFaviconDatabaseSignalHandlers): Disconnect
        WebKitFaviconDatabase::favicon-changed signal.
        (webkitWebViewLoadChanged): Call webkitWebViewUpdateFaviconURI()
        with the current favicon URI when the load has been committed.
        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (serverCallback):
        (testNotInitialized):
        (testGetFavicon):
        (testGetFaviconURI):
        (testWebViewFavicon):
        (beforeAll):
        * UIProcess/API/gtk/webkit2marshal.list: Add new marshaler.

2012-11-08  Anders Carlsson  <andersca@apple.com>

        Attempt to silence a compiler warning.

        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        (WebKit::RemoteGraphicsLayer::RemoteGraphicsLayer):

2012-11-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133841.
        http://trac.webkit.org/changeset/133841
        https://bugs.webkit.org/show_bug.cgi?id=101542

        Reverted patches were innocent (Requested by shinyak on
        #webkit).

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Make ewk_context use WebContext instead of WKContext
        https://bugs.webkit.org/show_bug.cgi?id=101477

        Reviewed by Gyuyoung Kim.

        Refactor ewk_context to use WebContext as ewk_context is encapsulated in a C++ classes.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::~EwkContext):
        (EwkContext::create):
        (EwkContext::defaultContext):
        (EwkContext::cookieManager):
        (EwkContext::ensureFaviconDatabase):
        (EwkContext::setFaviconDatabaseDirectoryPath):
        (EwkContext::addVisitedLink):
        (EwkContext::setCacheModel):
        (EwkContext::cacheModel):
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        (EwkContext::webContext):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (Ewk_Database_Manager::Ewk_Database_Manager):
        (Ewk_Database_Manager::getDatabaseOrigins):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        (Ewk_Database_Manager::create):
        (Ewk_Database_Manager):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (Ewk_Storage_Manager::Ewk_Storage_Manager):
        (Ewk_Storage_Manager::getStorageOrigins):
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (Ewk_Storage_Manager::create):
        (Ewk_Storage_Manager):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_base_add):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):

2012-11-07  Shinya Kawanaka  <shinyak@chromium.org>

        Unreviewed, rolling out r133428 and r133749
        https://bugs.webkit.org/show_bug.cgi?id=101533

        These patches might cause memory regression.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-07  Anders Carlsson  <andersca@apple.com>

        Add RemoteGraphicsLayer class
        https://bugs.webkit.org/show_bug.cgi?id=101535

        Reviewed by Simon Fraser.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.h:
        * WebProcess/WebPage/mac/RemoteGraphicsLayer.mm:
        Add RemoteGraphicsLayer, a subclass of WebCore::GraphicsLayer.

        * WebProcess/WebPage/mac/RemoteLayerTreeController.h:
        Make RemoteLayerTreeController a GraphicsLayerFactory.

        * WebProcess/WebPage/mac/RemoteLayerTreeController.mm:
        (WebKit::RemoteLayerTreeController::createGraphicsLayer):
        Create a new RemoteGraphicsLayer.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::graphicsLayerFactory):
        Return the layer tree controller.

2012-11-07  Byungwoo Lee  <bw80.lee@samsung.com>

        [WK2] Make WebVibrationProxy to be a member of WebPageProxy.
        https://bugs.webkit.org/show_bug.cgi?id=100334

        Reviewed by Anders Carlsson.

        WebVibrationProxy should be a member of WebPageProxy, because the IPC
        messages of WebVibrationProxy have page destination ID.

        The r132386 proposed a way to add/delete message receivers that can
        handle IPC messages with destination ID.

        Previous implementation that creating WebVibrationProxy as a WebContext
        member and using the global message receiver for the proxy can make
        assertions after r132386.

        To handle the vibration IPC messages properly, this patch will do the
        followings.

        1) Instead of WebContext, WebPageProxy will have the WebVibrationProxy.

        2) WebVibrationProxy will add itself to the message receiver map of
           the WebContext with page destination ID.

        3) When WebProcessProxy received vibration ipc messages, it will
           forward the messages to the WebContext first. Then the message
           receiver map of the WebContext will handle the messages with the
           registered WebVibrationProxy.

        4) APIs will be modified to apply these changes.
           a) WK API to get WKVibrationRef will use WKPageRef not WKContextRef.
           b) EFL APIs and API test for the vibration will also be changed.
              - EwkViewImpl will have vibration client. (EwkContext will not
                have it)
              - Previous API to register the vibration callback will be removed.
              - New signals for vibration will be added to the EwkViewImpl.
              - VibrationProxy will be renamed to VibrationClient for the
                consistency with other clients in EwkViewImpl.
              - VibrationClient will use EwkViewImpl instead of EwkContext.
              - Previous API test for vibration will be moved from context test
                to view test, and it will use the changed API.

        * PlatformEfl.cmake:
        * UIProcess/API/C/WKContext.cpp:
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetVibration):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        (EwkViewCallbacks):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (EwkContext):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (VibrationCbData):
        (onVibrate):
        (onCancelVibration):
        (loadVibrationHTMLString):
        (TEST_F):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::disconnectProcess):
        * UIProcess/WebContext.h:
        (WebKit):
        (WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::processDidCrash):
        * UIProcess/WebPageProxy.h:
        (WebKit):
        (WebPageProxy):
        (WebKit::WebPageProxy::vibration):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::create):
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        (WebKit::WebVibrationProxy::~WebVibrationProxy):
        (WebKit::WebVibrationProxy::invalidate):
        * UIProcess/WebVibrationProxy.h:
        (WebKit):
        (WebVibrationProxy):
        * UIProcess/efl/VibrationClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/efl/VibrationProvider.cpp.
        (toVibrationClient):
        (VibrationClientEfl::vibrateCallback):
        (VibrationClientEfl::cancelVibrationCallback):
        (VibrationClientEfl::create):
        (VibrationClientEfl::VibrationClientEfl):
        (VibrationClientEfl::~VibrationClientEfl):
        * UIProcess/efl/VibrationClientEfl.h: Renamed from Source/WebKit2/UIProcess/efl/VibrationProvider.h.
        (WebKit):
        (VibrationClientEfl):

2012-11-07  Anders Carlsson  <andersca@apple.com>

        Add empty RemoteLayerTree class
        https://bugs.webkit.org/show_bug.cgi?id=101524

        Reviewed by Simon Fraser.

        Add a new RemoteLayerTree class which will contain the remote graphics layers.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/RemoteLayerTree.h: Added.
        * WebProcess/WebPage/mac/RemoteLayerTree.mm: Added.
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (RemoteLayerTreeDrawingArea):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Allow client to override setWindowFrame() / getWindowFrame()
        https://bugs.webkit.org/show_bug.cgi?id=101496

        Reviewed by Kenneth Rohde Christiansen.

        Add window_geometry_set() / window_geometry_get() smart functions to
        ewk_view allowing the client to provide its own implementation for
        those.

        This is particularly useful if the application uses elm_win because
        the default implementation will not behave correctly in this case.
        This is due to the fact that the default implementation interacts
        with the Ecore_Evas that contains the view and is not aware of the
        parent window widget.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::windowGeometry):
        (EwkViewImpl::setWindowGeometry):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):

2012-11-07  Alexandru Chiculita  <achicu@adobe.com>

        CoordinatedGraphicsArgumentCoders should use ValidatedCustomFitlerOperation instead
        https://bugs.webkit.org/show_bug.cgi?id=100905

        Reviewed by Noam Rosenthal.

        The code now knows how to read a ValidatedCustomFitlerOperation and serialize it to the UI process.

        No new tests, the code path is not used yet.

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

2012-11-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add ewk_settings_preferred_minimum_contents_width_get/set API
        https://bugs.webkit.org/show_bug.cgi?id=101467

        Reviewed by Kenneth Rohde Christiansen.

        Added ewk_settings_preferred_minimum_contents_width_get/set API which is used for setting/getting
        of default minimum contents width for non viewport meta element sites.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_preferred_minimum_contents_width_set):
        (ewk_settings_preferred_minimum_contents_width_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-11-07  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Avoid creating an empty surface
        https://bugs.webkit.org/show_bug.cgi?id=101464

        Reviewed by Kenneth Rohde Christiansen.

        Make sure we have a valid view size before creating a GL surface.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][UNIX] Crash in WebKit::PluginProcessProxy::scanPlugin()
        https://bugs.webkit.org/show_bug.cgi?id=101446

        Reviewed by Kenneth Rohde Christiansen.

        Make sure that the disposition of the SIGCHLD signal is reset to the default
        before calling g_spawn_sync(). If the disposition is set to SIG_IGN, then
        g_spawn_sync() will not be able to return the exit status of the child
        process, our exit failure check will be useless and the following warning
        will be printed:

        GLib-WARNING **: In call to g_spawn_sync(), exit status of a child process
        was requested but SIGCHLD action was set to SIG_IGN and ECHILD was received
        by waitpid(), so exit status can't be returned. This is a bug in the
        program calling g_spawn_sync(); either don't request the exit status, or
        don't set the SIGCHLD action.

        This patch also adds a NULL-check for stdOut to avoid crashing in such
        case and makes use of String::split() to parse stdOut instead of doing it
        manually.

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2012-11-07  Shinya Kawanaka  <shinyak@chromium.org>

        [Shadow] Use setPseudo() instead of setShadowPseudoId().
        https://bugs.webkit.org/show_bug.cgi?id=101306

        Reviewed by Kent Tamura.

        Exposes necessary symbols.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make EWK classes Ewk_Objects
        https://bugs.webkit.org/show_bug.cgi?id=101057

        Reviewed by Kenneth Rohde Christiansen.

        Now all the existing EWK classes share common Ewk_Object ref/unref API.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (Ewk_Database_Manager::createOriginList):
        * UIProcess/API/efl/ewk_database_manager_private.h:
        * UIProcess/API/efl/ewk_file_chooser_request.cpp:
        (EwkFileChooserRequest::EwkFileChooserRequest):
        (EwkFileChooserRequest::~EwkFileChooserRequest):
        (EwkFileChooserRequest::allowMultipleFiles):
        (EwkFileChooserRequest::acceptedMIMETypes):
        (EwkFileChooserRequest::cancel):
        (EwkFileChooserRequest::chooseFiles):
        (ewk_file_chooser_request_allow_multiple_files_get):
        (ewk_file_chooser_request_accepted_mimetypes_get):
        (ewk_file_chooser_request_cancel):
        (ewk_file_chooser_request_files_choose):
        (ewk_file_chooser_request_file_choose):
        * UIProcess/API/efl/ewk_file_chooser_request.h:
        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
        (EwkFileChooserRequest):
        (EwkFileChooserRequest::create):
        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (EwkFormSubmissionRequest::EwkFormSubmissionRequest):
        (EwkFormSubmissionRequest::~EwkFormSubmissionRequest):
        (EwkFormSubmissionRequest::fieldValue):
        (EwkFormSubmissionRequest::fieldNames):
        (EwkFormSubmissionRequest::submit):
        (ewk_form_submission_request_field_names_get):
        (ewk_form_submission_request_field_value_get):
        (ewk_form_submission_request_submit):
        * UIProcess/API/efl/ewk_form_submission_request.h:
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (EwkFormSubmissionRequest):
        (EwkFormSubmissionRequest::create):
        * UIProcess/API/efl/ewk_intent.cpp:
        (EwkIntent::EwkIntent):
        (EwkIntent::webIntentData):
        (EwkIntent::action):
        (EwkIntent::type):
        (EwkIntent::service):
        (EwkIntent::suggestions):
        (EwkIntent::extra):
        (EwkIntent::extraKeys):
        (ewk_intent_action_get):
        (ewk_intent_type_get):
        (ewk_intent_service_get):
        (ewk_intent_suggestions_get):
        (ewk_intent_extra_get):
        (ewk_intent_extra_names_get):
        * UIProcess/API/efl/ewk_intent.h:
        * UIProcess/API/efl/ewk_intent_private.h:
        (EwkIntent):
        (EwkIntent::create):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (EwkIntentService::EwkIntentService):
        (EwkIntentService::action):
        (EwkIntentService::type):
        (EwkIntentService::href):
        (EwkIntentService::title):
        (EwkIntentService::disposition):
        (ewk_intent_service_action_get):
        (ewk_intent_service_type_get):
        (ewk_intent_service_href_get):
        (ewk_intent_service_title_get):
        (ewk_intent_service_disposition_get):
        * UIProcess/API/efl/ewk_intent_service.h:
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (EwkIntentService):
        (EwkIntentService::create):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (EwkNavigationPolicyDecision::EwkNavigationPolicyDecision):
        (EwkNavigationPolicyDecision::~EwkNavigationPolicyDecision):
        (EwkNavigationPolicyDecision::navigationType):
        (EwkNavigationPolicyDecision::mouseButton):
        (EwkNavigationPolicyDecision::modifiers):
        (EwkNavigationPolicyDecision::frameName):
        (EwkNavigationPolicyDecision::request):
        (EwkNavigationPolicyDecision::accept):
        (EwkNavigationPolicyDecision::reject):
        (EwkNavigationPolicyDecision::download):
        (ewk_navigation_policy_navigation_type_get):
        (ewk_navigation_policy_mouse_button_get):
        (ewk_navigation_policy_modifiers_get):
        (ewk_navigation_policy_frame_name_get):
        (ewk_navigation_policy_request_get):
        (ewk_navigation_policy_decision_accept):
        (ewk_navigation_policy_decision_reject):
        (ewk_navigation_policy_decision_download):
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (EwkNavigationPolicyDecision):
        (EwkNavigationPolicyDecision::create):
        * UIProcess/API/efl/ewk_resource.cpp:
        (EwkResource::EwkResource):
        (EwkResource::url):
        (EwkResource::isMainResource):
        (ewk_resource_url_get):
        (ewk_resource_main_resource_get):
        * UIProcess/API/efl/ewk_resource.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        (EwkResource):
        (EwkResource::create):
        * UIProcess/API/efl/ewk_security_origin.cpp:
        (EwkSecurityOrigin::EwkSecurityOrigin):
        (EwkSecurityOrigin::host):
        (EwkSecurityOrigin::protocol):
        (EwkSecurityOrigin::port):
        (ewk_security_origin_host_get):
        (ewk_security_origin_protocol_get):
        (ewk_security_origin_port_get):
        * UIProcess/API/efl/ewk_security_origin.h:
        * UIProcess/API/efl/ewk_security_origin_private.h:
        (EwkSecurityOrigin):
        (EwkSecurityOrigin::create):
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (Ewk_Storage_Manager::createOriginList):
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (EwkUrlSchemeRequest):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):
        * UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp:
        (onFileChooserRequest):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (TEST_F):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::willSubmitForm):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::runOpenPanel):
        * UIProcess/efl/ResourceLoadClientEfl.cpp:
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        * UIProcess/efl/ResourceLoadClientEfl.h:

2012-11-07  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [WK2] Return earlier if a plugin snapshot cannot be created.
        https://bugs.webkit.org/show_bug.cgi?id=101445

        Reviewed by Kenneth Rohde Christiansen.

        Currently only the Mac port has support for creating snapshots of
        Netscape plugins. Return earlier in PluginProxy::snapshot() so
        that we do not pass a null handler to ShareableBitmap::create()
        and avoid crashing when running pixel tests with plugins.

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::snapshot):

2012-11-07  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2] Change encoding detector API names
        https://bugs.webkit.org/show_bug.cgi?id=101450

        Reviewed by Gyuyoung Kim.

        To make settings API name consistent, we need to change two APIs with respect to encoding detector.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_encoding_detector_enabled_set):
        (ewk_settings_encoding_detector_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-11-07  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        WebKitTestRunner needs to turn on 'setContinuousSpellCheckingEnabled'
        https://bugs.webkit.org/show_bug.cgi?id=93611

        Reviewed by Gyuyoung Kim.

        When WebKitTestRunner turns on the spelling feature with the resetStateToConsistentValues() method,
        it happens that the WebProcess is still not launched (although it is already created).
        In this case, isValid() method returns false.

        This fix sends a message to the WebProcess messages queue, and the message
        will be handled once the WebProcess is ready.

        * Target.pri:
        Adds missing files to compile spellcheking feature for WebKit2-Qt
        to use WebKit C API from WKTextChecker.h.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateTextCheckerState):
        Uses canSendMessage() method instead of isValid() to check whether the message to
        the WebProcess can be sent.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        Calls TextChecker::setContinuousSpellCheckingEnabled which additionaly invokes the client's method.
        WK2-EFL settings for text checker (ewk_settings.cpp) set the default language (if it wasn't set earlier) to
        perform the spelling. It allows to pass the tests from editing/spelling directory.

2012-11-07  Christophe Dumez  <christophe.dumez@intel.com>

        Add replaceWithLiteral() method to WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=101257

        Reviewed by Benjamin Poulain.

        Substitute String::replace() calls by String::replaceWithLiteral() where
        adequate, for efficiency.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::makeURLString):

2012-11-06  Vivek Galatage  <vivekgalatage@gmail.com>

        Move DrawingAreaImpl methods graphicsLayerFactory, setRootCompositingLayer & scheduleCompositingLayerSync under ACCELERATED_COMPOSITING
        https://bugs.webkit.org/show_bug.cgi?id=101427

        Reviewed by Anders Carlsson.

        Moving these methods under the ACCELERATED_COMPOSITING flag.
        This fixes broken wincairo due to use of override specifier.

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

2012-11-06  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL][WK2] API test crash with accelerated compositing on.
        https://bugs.webkit.org/show_bug.cgi?id=101384

        Reviewed by Gyuyoung Kim.

        If accelerated compositing is enabled API tests should create GL evas engine
        instead of default one.
        Also, in API tests first window resize and display often comes earlier
        than enterAcceleratedCompositingMode call, so let's create GL surface in
        _ewk_view_smart_calculate on first window resize.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):

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

        Update Java related WKSI function names
        https://bugs.webkit.org/show_bug.cgi?id=101414

        Reviewed by Sam Weinig.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin):
        (WebKit::PluginInfoStore::policyForPlugin):
        (WebKit::PluginInfoStore::reactivateInactivePlugin):

2012-11-06  Kiran Muppala  <cmuppala@apple.com>

        Add application occlusion criterion to enable/disable process suppression on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100997

        Reviewed by Alexey Proskuryakov.

        Provide support for enabling and disabling process suppression when application is completely occluded on Mac.

        * NetworkProcess/NetworkProcess.messages.in: Added message to update application occlusion status.
        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain): Removed call to take process suppression assertion since ChildProcess
        takes one on constrution.
        * PluginProcess/PluginProcess.messages.in: Added message to update application occlusion status.
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain): Removed call to take process suppression assertion since ChildProcess
        takes one on construction.
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::ChildProcess): Take process suppression assertion on construction.
        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::applicationIsOccluded):
        * Shared/mac/ChildProcessMac.mm: Added.
        (WebKit::ChildProcess::setApplicationIsOccluded): Release process suppression assertion if application
        becomes occluded or take a new assertion if application becomes visible.
        (WebKit::ChildProcess::disableProcessSuppression):
        (WebKit::ChildProcess::enableProcessSuppression):
        Helper methods to take and release process suppression assertion.
        * SharedWorkerProcess/SharedWorkerProcess.messages.in: Added message to update application occlusion status.
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain): Removed call to take process suppression assertion since ChildProcess
        takes one on construction.
        * UIProcess/Network/NetworkProcessManager.h:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching): Update application occlusion status post launch.
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit::NetworkProcessProxy::isValid):
        * UIProcess/Network/mac/NetworkProcessManagerMac.mm: Added.
        (WebKit::NetworkProcessManager::setApplicationIsOccluded):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::setApplicationIsOccluded):
        * UIProcess/Plugins/PluginProcessManager.h:
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Update application occlusion status post launch.
        * UIProcess/Plugins/PluginProcessProxy.h:
        (WebKit::PluginProcessProxy::isValid):
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm: Added.
        (WebKit::PluginProcessManager::setApplicationIsOccluded):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::setApplicationIsOccluded):
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        (WebKit::SharedWorkerProcessProxy::didFinishLaunching): Update application occlusion status post launch.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        (WebKit::SharedWorkerProcessProxy::isValid):
        * UIProcess/SharedWorkers/mac/SharedWorkerProcessManagerMac.mm: Added.
        (WebKit::SharedWorkerProcessManager::setApplicationIsOccluded):
        * UIProcess/SharedWorkers/mac/SharedWorkerProcessProxyMac.mm: Added.
        (WebKit::SharedWorkerProcessProxy::setApplicationIsOccluded):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::create): Added call to initialize process suppression support.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::applicationIsOccluded):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching): Update application occlusion status post launch.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::applicationBecameVisible):
        (WebKit::WebContext::applicationBecameOccluded):
        Notification handlers for informing non UI WebKit2 processes of changes to application occlusion state.
        (WebKit::WebContext::registerOcclusionNotificationHandlers):
        (WebKit::WebContext::initializeProcessSuppressionSupport):
        Helper method to register occlusion notification handlers if process suppression support is enabled.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebProcess.messages.in: Added message to update application occlusion status.
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::InitializeWebProcess): Removed call to take process supression assertion since ChildProcess
        takes one on construction.

2012-11-06  Alexey Proskuryakov  <ap@apple.com>

        Clean up which storage cookie jar functions use
        https://bugs.webkit.org/show_bug.cgi?id=101395

        Reviewed by Brady Eidson.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        Updated for two new functions.

2012-11-06  Jihye Kang  <jye.kang@samsung.com>

        [EFL][WK2] Add ewk_database_manager APIs
        https://bugs.webkit.org/show_bug.cgi?id=101193

        Reviewed by Gyuyoung Kim.

        Add ewk_database_manager to manage web database and
        ewk_database_manaager_origins_get to get origins list of web storage.
        Add unit tests for ewk_database_manager APIs.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::databaseManager):
        (ewk_context_database_manager_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_database_manager.cpp: Added.
        (Ewk_Database_Manager::Ewk_Database_Manager):
        (Ewk_Database_Manager::getDatabaseOrigins):
        (Ewk_Database_Manager::createOriginList):
        (Ewk_Database_Origins_Async_Get_Context):
        (Ewk_Database_Origins_Async_Get_Context::Ewk_Database_Origins_Async_Get_Context):
        (getDatabaseOriginsCallback):
        (ewk_database_manager_origins_get):
        * UIProcess/API/efl/ewk_database_manager.h: Added.
        * UIProcess/API/efl/ewk_database_manager_private.h: Added.
        (Ewk_Database_Manager):
        (Ewk_Database_Manager::create):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp: Added.
        (OriginData):
        (OriginData::OriginData):
        (getDatabaseOriginsCallback):
        (timerCallback):
        (TEST_F):

2012-11-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Refactor Ewk_Auth_Request, Ewk_Url_Scheme_Request and Ewk_Download_Job to be Ewk_Objects
        https://bugs.webkit.org/show_bug.cgi?id=101383

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Auth_Request, Ewk_Url_Scheme_Request and Ewk_Download_Job are Ewk_Objects now.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/API/efl/ewk_auth_request.cpp:
        (EwkAuthRequest::EwkAuthRequest):
        (EwkAuthRequest::~EwkAuthRequest):
        (EwkAuthRequest::suggestedUsername):
        (EwkAuthRequest::realm):
        (EwkAuthRequest::host):
        (EwkAuthRequest::continueWithoutCredential):
        (EwkAuthRequest::authenticate):
        (EwkAuthRequest::isRetrying):
        (ewk_auth_request_suggested_username_get):
        (ewk_auth_request_cancel):
        (ewk_auth_request_authenticate):
        (ewk_auth_request_retrying_get):
        (ewk_auth_request_realm_get):
        (ewk_auth_request_host_get):
        * UIProcess/API/efl/ewk_auth_request.h:
        * UIProcess/API/efl/ewk_auth_request_private.h:
        (EwkAuthRequest):
        (EwkAuthRequest::create):
        * UIProcess/API/efl/ewk_back_forward_list.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (EwkDownloadJob::EwkDownloadJob):
        (EwkDownloadJob::id):
        (EwkDownloadJob::viewImpl):
        (ewk_download_job_state_get):
        (EwkDownloadJob::state):
        (ewk_download_job_request_get):
        (EwkDownloadJob::request):
        (ewk_download_job_response_get):
        (EwkDownloadJob::response):
        (ewk_download_job_destination_get):
        (EwkDownloadJob::destination):
        (ewk_download_job_destination_set):
        (EwkDownloadJob::setDestination):
        (ewk_download_job_suggested_filename_get):
        (EwkDownloadJob::suggestedFileName):
        (ewk_download_job_cancel):
        (EwkDownloadJob::cancel):
        (ewk_download_job_estimated_progress_get):
        (EwkDownloadJob::estimatedProgress):
        (ewk_download_job_elapsed_time_get):
        (EwkDownloadJob::elapsedTime):
        (EwkDownloadJob::setResponse):
        (EwkDownloadJob::setSuggestedFileName):
        (EwkDownloadJob::incrementReceivedData):
        (EwkDownloadJob::setState):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        (EwkDownloadJob):
        (EwkDownloadJob::create):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (EwkUrlSchemeRequest::EwkUrlSchemeRequest):
        (EwkUrlSchemeRequest::id):
        (EwkUrlSchemeRequest::url):
        (EwkUrlSchemeRequest::scheme):
        (EwkUrlSchemeRequest::path):
        (EwkUrlSchemeRequest::finish):
        (ewk_url_scheme_request_scheme_get):
        (ewk_url_scheme_request_url_get):
        (ewk_url_scheme_request_path_get):
        (ewk_url_scheme_request_finish):
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (EwkUrlSchemeRequest):
        (EwkUrlSchemeRequest::create):
        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp:
        (onAuthenticationRequest):
        (TEST_F):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didReceiveResponse):
        (WebKit::DownloadManagerEfl::didCreateDestination):
        (WebKit::DownloadManagerEfl::didReceiveData):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::registerDownload):
        (WebKit::DownloadManagerEfl::downloadJob):
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveAuthenticationChallengeInFrame):
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::didReceiveURIRequest):

2012-11-06  Yael Aharon  <yael.aharon@intel.com>

        [WK2] Wrong scroll position when going back in history
        https://bugs.webkit.org/show_bug.cgi?id=101358

        Reviewed by Kenneth Rohde Christiansen.

        Reset the contentsSize after a new load was committed. We should not continue
        to use the contentsSize of the previous page in any calculation.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didCommitLoad):

2012-11-06  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Declare all smart callbacks in EwkViewCallbacks.h
        https://bugs.webkit.org/show_bug.cgi?id=101360

        Reviewed by Kenneth Rohde Christiansen.

        Declare all EwkView smart callbacks in EwkViewCallbacks.h
        and remove remaining calls to evas_object_smart_callback_call().
        It is a good idea to have all the callbacks declared in one
        place for convenience and consistency. We also have better
        argument type checking if we use the new callback mechanism.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        (EwkViewCallbacks::CallBack::call):
        (CallBack):
        (EwkViewCallbacks):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::createNewPage):
        (EwkViewImpl::closePage):

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

        Hook up the remote layer tree drawing area to an environment variable
        https://bugs.webkit.org/show_bug.cgi?id=101267

        Reviewed by Andreas Kling.

        * UIProcess/API/mac/WKView.mm:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::sizeDidChange):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange):

2012-11-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fit-to-width broken on pages with viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=99715

        Reviewed by Jocelyn Turcotte.

        The initial scale from the viewport attributes should only
        be applied if the scale was explicitly specified in the
        viewport meta tag.
        If the initial scale is auto it should be calculated using
        the final contents size, which might be larger than the
        layout size, so that the content fits horizontally into
        the view.

        Also add QML unit tests that cover this functionality.

        * UIProcess/API/qt/tests/qmltests/WebView/tst_fitToView.qml:
        * UIProcess/API/qt/tests/qmltests/common/test5.html: Added.
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::pageTransitionViewportReady):

2012-11-06  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove a parent member in WebLayerInfo.
        https://bugs.webkit.org/show_bug.cgi?id=101142

        Reviewed by Noam Rosenthal.

        The parent member is not used in UI Process, and GraphicsLayer::setParent is
        internally used only, so we don't need to send the parent layer id to UI Process.

        * Shared/WebLayerTreeInfo.h:
        (WebKit::WebLayerInfo::WebLayerInfo):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):

2012-11-06  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove two methods' virtual modifiers in CoordinatedGraphicsLayer.
        https://bugs.webkit.org/show_bug.cgi?id=101141

        Reviewed by Noam Rosenthal.

        The methods exist for only CoordinatedGraphicsLayer and we have no plan to
        extend CoordinatedGraphicsLayer.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-06  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordinatedGraphics] Access to LayerTreeRenderer::m_renderQueue should be thread safe
        https://bugs.webkit.org/show_bug.cgi?id=101341

        Reviewed by Noam Rosenthal.

        The queue can be accessed from public API so we should make
        sure it is not updated concurrently with a threaded render loop.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::syncRemoteContent):
        (WebKit::LayerTreeRenderer::appendUpdate):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):

2012-11-06  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make Ewk_Context Ewk_Object
        https://bugs.webkit.org/show_bug.cgi?id=101322

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Context is Ewk_Object now and using common ref/unref API.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::ewkContext):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        (EwkContext::~EwkContext):
        (EwkContext::create):
        (EwkContext::defaultContext):
        (EwkContext::cookieManager):
        (EwkContext::ensureFaviconDatabase):
        (EwkContext::setFaviconDatabaseDirectoryPath):
        (EwkContext::faviconDatabase):
        (EwkContext::storageManager):
        (EwkContext::requestManager):
        (EwkContext::vibrationProvider):
        (EwkContext::addVisitedLink):
        (EwkContext::setCacheModel):
        (EwkContext::cacheModel):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_directory_set):
        (ewk_context_favicon_database_get):
        (ewk_context_storage_manager_get):
        (EwkContext::wkContext):
        (EwkContext::downloadManager):
        (EwkContext::historyClient):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        * UIProcess/API/efl/ewk_view.cpp:
        (createEwkView):
        (ewk_view_base_add):
        (ewk_view_smart_add):
        (ewk_view_add_with_context):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        * UIProcess/efl/DownloadManagerEfl.h:
        (WebKit::DownloadManagerEfl::create):
        (DownloadManagerEfl):
        * UIProcess/efl/PageClientBase.cpp:
        (WebKit::PageClientBase::handleDownloadRequest):
        * UIProcess/efl/RequestManagerClientEfl.cpp:
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):
        * UIProcess/efl/RequestManagerClientEfl.h:
        (WebKit::RequestManagerClientEfl::create):
        (RequestManagerClientEfl):

2012-11-06  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordinatedGraphics] compositing/iframes/connect-compositing-iframe.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=101232

        Reviewed by Jocelyn Turcotte.

        The crash is happening in CoordinatedGraphicsLayer::flushCompositingState
        because we dereferencing a null m_coordinatedGraphicsLayerClient.
        This happens when the root layer became composited because it has content overlapping
        with an inner iframe that is composited. In this case the RenderLayerCompositor attaches
        the layer with RootLayerAttachedViaEnclosingFrame attachment flag and do not call
        ChromeClient::attachRootGraphcisLayer so we don't have a chance to set m_coordinatedGraphicsLayerClient.
        The solution is to set the client early in the factory method.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createGraphicsLayer):

2012-11-06  Viatcheslav Ostapenko  <v.ostapenko@samsung.com>

        [EFL] [WK2] Random crash in Minibrowser
        https://bugs.webkit.org/show_bug.cgi?id=101241

        Reviewed by Gyuyoung Kim.

        Do not clear GL context and GL surface in exitAcceleratedCompositing.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::exitAcceleratedCompositingMode):

2012-11-05  Sam Weinig  <sam@webkit.org>

        Need a way to send and receive messages between the WKWebProcessPlugIn object and the client
        https://bugs.webkit.org/show_bug.cgi?id=101282

        Reviewed by Anders Carlsson.

        API wise, this adds:
            - A connection property on the WKWebProcessPlugInController
            - A method to send messages across a WKConnection (sendMessageWithName:body).

        It also implements message sending and receiving for WKConnection. Message bodies are currently
        restricted to being object graphs with values that are property list types, but in the future, should
        support all types conforming to the NSSecureCoding protocol.

        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        (WebKit::WebConnection::handleMessage):
        * Shared/WebConnection.h:
        (WebConnection):
        * Shared/WebConnection.messages.in:
        Switch HandleMessage to be a variadic message to avoid an extra copy and support attachments correctly.

        * Shared/mac/ArgumentCodersMac.h:
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::typeFromObject):
        (CoreIPC::encode):
        (CoreIPC::decode):
        Add support for encoding/decoding NSArray, NSDate and NSData.

        * UIProcess/API/mac/WKConnection.h:
        * UIProcess/API/mac/WKConnection.mm:
        (-[WKConnection sendMessageWithName:body:]):
        (didReceiveMessage):
        Implement message sending and receiving.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundleRef:]):
        (-[WKWebProcessPlugInController connection]):
        Add a wrapper for the WKConnectionRef vended via WKBundleGetApplicationConnection() and expose it as
        API on the WKWebProcessPlugInController.

2012-11-05  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Fix wrong coding style in the boilerplates
        https://bugs.webkit.org/show_bug.cgi?id=101283

        Reviewed by Gyuyoung Kim.

        Fix boilerplate which have wrong coding style.

        * UIProcess/efl/InputMethodContextEfl.cpp:
        * UIProcess/efl/InputMethodContextEfl.h:
        * UIProcess/efl/PageClientDefaultImpl.cpp:
        * UIProcess/efl/PageClientDefaultImpl.h:
        * UIProcess/efl/PageClientLegacyImpl.cpp:
        * UIProcess/efl/PageClientLegacyImpl.h:

2012-11-05  KyungTae Kim  <ktf.kim@samsung.com>

        [EFL][WK2] Fix build warning in PageClientLegacyImpl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=101266

        Reviewed by Laszlo Gombos.

        The 'size' is not used when !USE(TILED_BACKING_STORE)
        Use UNUSED_PARAM macro for removing -Wunused-parameter warning

        * UIProcess/efl/PageClientLegacyImpl.cpp:
        (WebKit::PageClientLegacyImpl::updateViewportSize):

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

        Begin stubbing out the new remote layer tree drawing area
        https://bugs.webkit.org/show_bug.cgi?id=101256

        Reviewed by Andreas Kling.

        * Shared/DrawingAreaInfo.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.cpp:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:

2012-11-05  Alexey Proskuryakov  <ap@apple.com>

        Get rid of setCookieStoragePrivateBrowsingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=101247

        Reviewed by Brady Eidson.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession): Added a FIXME.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        We no longer have this function.

2012-11-05  Simon Fraser  <simon.fraser@apple.com>

        Fix layer borders to cleaning appear and disappear on switching
        https://bugs.webkit.org/show_bug.cgi?id=101136

        Reviewed by Sam Weinig.
        
        Remove the GraphicsLayerClient methods showDebugBorders() and
        showRepaintCounter().
        
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
        (LayerTreeHostCA):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

2012-11-05  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Allow using ACCELERATED_COMPOSITING without COORDINATED_GRAPHICS
        https://bugs.webkit.org/show_bug.cgi?id=100674

        Reviewed by Kenneth Rohde Christiansen.

        Make a distinction between calling ewk_view_base_add and ewk_view_smart_add.
        Calling ewk_view_base_add creates a desktop style view, that does not support
        fixed layout size, while calling ewk_view_smart_add does support fixed layout size.
        As a result, WebKitTestRunner and the inspector window do not support
        fixed layout size, while MiniBrowser does. This change allows many DumpAsText
        layout tests to pass without modification, when AC is enabled.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::transformFromScene):
        (EwkViewImpl::informLoadCommitted):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::informContentsSizeChange):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        (EwkViewImpl::pageClient):
        (EwkViewImpl::setScaleFactor):
        (EwkViewImpl::scaleFactor):
        (EwkViewImpl::setScrollPosition):
        (EwkViewImpl::scrollPosition):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):
        (createEwkView):
        (ewk_view_base_add):
        * UIProcess/efl/PageClientBase.cpp: Copied from Source/WebKit2/UIProcess/efl/PageClientImpl.cpp.
        (WebKit::PageClientBase::PageClientBase):
        (WebKit::PageClientBase::~PageClientBase):
        (WebKit::PageClientBase::viewImpl):
        (WebKit::PageClientBase::createDrawingAreaProxy):
        (WebKit::PageClientBase::setViewNeedsDisplay):
        (WebKit::PageClientBase::displayView):
        (WebKit::PageClientBase::scrollView):
        (WebKit::PageClientBase::viewSize):
        (WebKit::PageClientBase::isViewWindowActive):
        (WebKit::PageClientBase::isViewFocused):
        (WebKit::PageClientBase::isViewVisible):
        (WebKit::PageClientBase::isViewInWindow):
        (WebKit::PageClientBase::processDidCrash):
        (WebKit::PageClientBase::didRelaunchProcess):
        (WebKit::PageClientBase::pageClosed):
        (WebKit::PageClientBase::toolTipChanged):
        (WebKit::PageClientBase::setCursor):
        (WebKit::PageClientBase::setCursorHiddenUntilMouseMoves):
        (WebKit::PageClientBase::registerEditCommand):
        (WebKit::PageClientBase::clearAllEditCommands):
        (WebKit::PageClientBase::canUndoRedo):
        (WebKit::PageClientBase::executeUndoRedo):
        (WebKit::PageClientBase::convertToDeviceSpace):
        (WebKit::PageClientBase::convertToUserSpace):
        (WebKit::PageClientBase::screenToWindow):
        (WebKit::PageClientBase::windowToScreen):
        (WebKit::PageClientBase::doneWithKeyEvent):
        (WebKit::PageClientBase::doneWithTouchEvent):
        (WebKit::PageClientBase::createPopupMenuProxy):
        (WebKit::PageClientBase::createContextMenuProxy):
        (WebKit::PageClientBase::createColorChooserProxy):
        (WebKit::PageClientBase::setFindIndicator):
        (WebKit::PageClientBase::enterAcceleratedCompositingMode):
        (WebKit::PageClientBase::exitAcceleratedCompositingMode):
        (WebKit::PageClientBase::updateAcceleratedCompositingMode):
        (WebKit::PageClientBase::didChangeScrollbarsForMainFrame):
        (WebKit::PageClientBase::didCommitLoadForMainFrame):
        (WebKit::PageClientBase::didFinishLoadingDataForCustomRepresentation):
        (WebKit::PageClientBase::customRepresentationZoomFactor):
        (WebKit::PageClientBase::setCustomRepresentationZoomFactor):
        (WebKit::PageClientBase::flashBackingStoreUpdates):
        (WebKit::PageClientBase::findStringInCustomRepresentation):
        (WebKit::PageClientBase::countStringMatchesInCustomRepresentation):
        (WebKit::PageClientBase::updateTextInputState):
        (WebKit::PageClientBase::handleDownloadRequest):
        * UIProcess/efl/PageClientBase.h: Copied from Source/WebKit2/UIProcess/efl/PageClientImpl.h.
        (PageClientBase):
        * UIProcess/efl/PageClientDefaultImpl.cpp: Added.
        (WebKit):
        (WebKit::PageClientDefaultImpl::PageClientDefaultImpl):
        (WebKit::PageClientDefaultImpl::didCommitLoad):
        (WebKit::PageClientDefaultImpl::updateViewportSize):
        (WebKit::PageClientDefaultImpl::didChangeViewportProperties):
        (WebKit::PageClientDefaultImpl::didChangeContentsSize):
        (WebKit::PageClientDefaultImpl::pageDidRequestScroll):
        (WebKit::PageClientDefaultImpl::didRenderFrame):
        (WebKit::PageClientDefaultImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientDefaultImpl.h: Added.
        (WebKit):
        (PageClientDefaultImpl):
        (WebKit::PageClientDefaultImpl::create):
        (WebKit::PageClientDefaultImpl::~PageClientDefaultImpl):
        * UIProcess/efl/PageClientImpl.cpp: Removed.
        * UIProcess/efl/PageClientImpl.h: Removed.
        * UIProcess/efl/PageClientLegacyImpl.cpp: Added.
        (WebKit):
        (WebKit::PageClientLegacyImpl::PageClientLegacyImpl):
        (WebKit::PageClientLegacyImpl::didCommitLoad):
        (WebKit::PageClientLegacyImpl::updateViewportSize):
        (WebKit::PageClientLegacyImpl::didChangeViewportProperties):
        (WebKit::PageClientLegacyImpl::didChangeContentsSize):
        (WebKit::PageClientLegacyImpl::pageDidRequestScroll):
        (WebKit::PageClientLegacyImpl::didRenderFrame):
        (WebKit::PageClientLegacyImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientLegacyImpl.h: Added.
        (WebKit):
        (PageClientLegacyImpl):
        (WebKit::PageClientLegacyImpl::create):
        (WebKit::PageClientLegacyImpl::~PageClientLegacyImpl):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::viewWidget):

2012-11-05  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make Ewk_Url_Request, Ewk_Url_Response, Ewk_Navigation_Data  Ewk_Objects
        https://bugs.webkit.org/show_bug.cgi?id=101205

        Reviewed by Gyuyoung Kim.

        Ewk_Url_Request, Ewk_Url_Response, Ewk_Navigation_Data are using common Ewk_Object interface now.

        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::request):
        (Ewk_Download_Job::response):
        (Ewk_Download_Job::setResponse):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (EwkNavigationData::EwkNavigationData):
        (EwkNavigationData::originalRequest):
        (EwkNavigationData::title):
        (EwkNavigationData::url):
        (ewk_navigation_data_title_get):
        (ewk_navigation_data_original_request_get):
        (ewk_navigation_data_url_get):
        * UIProcess/API/efl/ewk_navigation_data.h:
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (EwkNavigationData):
        (EwkNavigationData::create):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (Ewk_Navigation_Policy_Decision::Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::request):
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (Ewk_Navigation_Policy_Decision::create):
        (Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (EwkUrlRequest::EwkUrlRequest):
        (EwkUrlRequest::url):
        (EwkUrlRequest::firstParty):
        (EwkUrlRequest::httpMethod):
        (ewk_url_request_url_get):
        (ewk_request_cookies_first_party_get):
        (ewk_url_request_http_method_get):
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_request_private.h:
        (EwkUrlRequest):
        (EwkUrlRequest::create):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (EwkUrlResponse::EwkUrlResponse):
        (EwkUrlResponse::httpStatusCode):
        (EwkUrlResponse::url):
        (EwkUrlResponse::mimeType):
        (EwkUrlResponse::contentLength):
        (ewk_url_response_url_get):
        (ewk_url_response_status_code_get):
        (ewk_url_response_mime_type_get):
        (ewk_url_response_content_length_get):
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_url_response_private.h:
        (EwkUrlResponse):
        (EwkUrlResponse::create):
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::didReceiveResponse):
        * UIProcess/efl/ResourceLoadClientEfl.cpp:
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):

2012-11-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] EWK2UnitTestBase.ewk_auth_request_cancel API test is failing after r133389
        https://bugs.webkit.org/show_bug.cgi?id=101203

        Reviewed by Kenneth Rohde Christiansen.

        Attempt for continue without credential when the client cancels
        authentication (or does not handle the authentication request)
        instead of cancelling the load. We now get a 402 error when
        when cancelling the authentication, which is the behavior we
        want (and the behavior we used to have before r133389).

        * UIProcess/API/efl/ewk_auth_request.cpp:
        (Ewk_Auth_Request::~Ewk_Auth_Request):
        (Ewk_Auth_Request::continueWithoutCredential):
        (ewk_auth_request_cancel):
        * UIProcess/API/efl/ewk_auth_request_private.h:
        (Ewk_Auth_Request):
        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp:
        (TEST_F):

2012-11-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] The icon database path should be set by the client
        https://bugs.webkit.org/show_bug.cgi?id=101182

        Reviewed by Kenneth Rohde Christiansen.

        No longer set the favicon database path in database instance getter.
        Instead, a new ewk_context_favicon_database_directory_set() API
        function was added to let the client set the icon database path.
        This is needed because the icon database path can only be set once
        and setting it unconditionally in the getter prevents the client
        from setting it.

        This will also avoid crashes in WebKitTestRunner since WKTR was
        setting the path once and ewk_context was attempting to override it.

        Note that the favicon database functionality is disabled until the
        client sets its path.

        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::ensureFaviconDatabase):
        (Ewk_Context::setFaviconDatabaseDirectoryPath):
        (Ewk_Context::faviconDatabase):
        (ewk_context_favicon_database_directory_set):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (Ewk_Favicon_Database::Ewk_Favicon_Database):
        (Ewk_Favicon_Database::~Ewk_Favicon_Database):
        (Ewk_Favicon_Database::iconURLForPageURL):
        (Ewk_Favicon_Database::iconForPageURL):
        (Ewk_Favicon_Database::getIconSurfaceSynchronously):
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (WebKit):
        (Ewk_Favicon_Database::create):
        (Ewk_Favicon_Database):
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        (TEST_F):

2012-11-04  Halton Huo  <halton.huo@intel.com>

        [EFL] Use _LIBRARIES instead of _LIBRARY
        https://bugs.webkit.org/show_bug.cgi?id=101042

        Reviewed by Gyuyoung Kim.

        In CMake Find files, _LIBRARY is intended for internal use, should
        use _LIBRARIES instead.

        * PlatformEfl.cmake: s/_LIBRARY}/_LIBRARIES}

2012-11-04  Jon Lee  <jonlee@apple.com>

        Expose security origin to BundleFrame
        https://bugs.webkit.org/show_bug.cgi?id=101139
        <rdar://problem/12629900>

        Reviewed by Darin Adler.

        Create a WebSecurityOrigin instance, sharing the security origin instance
        that comes directly from the frame's document. We can do this because the
        WK2 API only retrieves information about the origin, and because those
        results are returned as copies. The security origin holds no references
        that could lead to a retain cycle, avoiding the possibility that the
        injected bundle accidentally keeps something alive.

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toCopiedAPI): Create copied API for WebCore::SecurityOrigin
        instances.
        * Shared/WebSecurityOrigin.h:
        (WebKit::WebSecurityOrigin::create): Add a new create() function that
        takes a PassRefPtr to a WebCore SecurityOrigin instance.
        (WebKit::WebSecurityOrigin::createFromString): Refactor to use new create()
        function.
        (WebKit::WebSecurityOrigin::createFromDatabaseIdentifier): Refactor to
        use new create() function.
        (WebKit::WebSecurityOrigin::create): Refactor to use new create()
        function.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCopySecurityOrigin): Add function to retrieve the security
        origin as a WK2 API object.
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.h:

2012-11-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL] Unify transforms in WK2
        https://bugs.webkit.org/show_bug.cgi?id=101051

        Reviewed by Simon Hausmann.

        Move our transforms into EwkViewImpl and use them
        everywhere needed.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::smartData):
        (EwkViewImpl::transformFromScene):
        (EwkViewImpl::transformToScene):
        (EwkViewImpl::transformToScreen):
        (EwkViewImpl::displayTimerFired):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl):
        (EwkViewImpl::pageViewportControllerClient):
        (EwkViewImpl::pageViewportController):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (ewk_view_feed_touch_event):

2012-11-03  Alexey Proskuryakov  <ap@apple.com>

        Get rid of USE(CFURLSTORAGESESSIONS)
        https://bugs.webkit.org/show_bug.cgi?id=101131

        Reviewed by Sam Weinig.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::switchNetworkLoaderToNewTestingSession):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformHasLocalDataForURL):
        (WebKit::cachedResponseForURL):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformClearResourceCaches):

2012-11-03  Pavel Feldman  <pfeldman@chromium.org>

        REGRESSION (r132014-r132047): Webkit Inspector Window docking broken
        https://bugs.webkit.org/show_bug.cgi?id=101125

        Reviewed by Vsevolod Vlasov.

        Migrated from ?docked= to ?dockSide= format.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage):

2012-10-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Move soup authentication from GtkAuthenticationDialog to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=99914

        Reviewed by Carlos Garcia Campos.

        Instead of passing the libsoup objects to the GtkAuthenticationDialog, pass the
        AuthenticationChallenge itself.

        * WebProcess/WebCoreSupport/gtk/WebFrameLoaderClientGtk.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):

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

        Very speculative ArgumentDecoder crash fix
        https://bugs.webkit.org/show_bug.cgi?id=101130
        <rdar://problem/11917046>

        Reviewed by Sam Weinig.

        Switch from fastMalloc/fastFree to system malloc/free in the hopes that it'll give more information about
        a crash inside TCMalloc when freeing the argument data. (It seems unlikely that this is a bug in TCMalloc, but
        switching to the system malloc could potentially give better error reporting).

        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::~ArgumentDecoder):
        (CoreIPC::ArgumentDecoder::initialize):

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

        Don't instantiate the Java plug-in if it's inactive
        https://bugs.webkit.org/show_bug.cgi?id=101102
        <rdar://problem/12595679>

        Reviewed by Andreas Kling.

        * Shared/Plugins/PluginModuleInfo.h:
        Add a PluginModuleLoadPolicy enum.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::policyForPlugin):
        * UIProcess/Plugins/PluginInfoStore.h:
        (PluginInfoStore):
        Rename shouldBlockPlugin to policyForPlugin and make it return an enum so we can handle inactive plug-ins.
        
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::shouldBlockPlugin):
        Add helper function.

        (WebKit::PluginInfoStore::policyForPlugin):
        If the Java plug-in is inactive, return PluginModuleInactive.

        (WebKit::PluginInfoStore::reactivateInactivePlugin):
        If the given plug-in is the Java plug-in, call WKJLReportWebComponentsUsed() to reactivate it.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
        If the plug-in is inactive, try to reactivate it and reload the page if reactivation succeeded.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getPluginPath):
        * UIProcess/WebProcessProxy.h:
        This now returns a plug-in load policy.

        * UIProcess/WebProcessProxy.messages.in:
        GetPluginPack now returns a load policy enum.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::shouldUnavailablePluginMessageBeButton):
        Change this to a switch statement and always return true for RenderEmbeddedObject::PluginInactive.

        (WebKit::WebChromeClient::unavailablePluginButtonClicked):
        Add RenderEmbeddedObject::PluginInactive to the assertion.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Update now that GetPluginPath returns a pluginLoadPolicy enum.

        (WebKit::canPluginHandleResponse):
        Ditto.

2012-11-02  Alexey Proskuryakov  <ap@apple.com>

        [Mac] ResourceHandle changes for network process
        https://bugs.webkit.org/show_bug.cgi?id=101111

        Reviewed by Jessie Berlin.

        * NetworkProcess/mac/NetworkProcessMainMac.mm: (WebKit::NetworkProcessMain):
        We want to use WebKitSystemInterface in network process.
        * NetworkProcess/mac/RemoteNetworkingContext.h:
        (WebKit::RemoteNetworkingContext::create): Added a constructor and a create function.
        Switched from scheduledRunLoopPairs() to the new scheduledOperationQueue().

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::RemoteNetworkingContext):
        (WebKit::RemoteNetworkingContext::scheduledOperationQueue):
        Ditto.

2012-11-02  Simon Fraser  <simon.fraser@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        https://bugs.webkit.org/show_bug.cgi?id=101076

        Reviewed by Dave Hyatt.

        Define ENABLE_SUBPIXEL_LAYOUT and include it in FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

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

        Add a PluginInactive plug-in unavailability reason
        https://bugs.webkit.org/show_bug.cgi?id=101089

        Reviewed by Sam Weinig.

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

2012-11-02  Adam Barth  <abarth@webkit.org>

        ENABLE(UNDO_MANAGER) is disabled everywhere and is not under active development
        https://bugs.webkit.org/show_bug.cgi?id=100711

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2012-11-02  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][EFL] Crash when calling WebOpenPanelResultListenerProxy::cancel() after PageClient is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=100977

        Reviewed by Alexey Proskuryakov.

        Call WebPageProxy::close() in EwkViewImpl's destructor to avoid crashes
        if other objects keep a reference to the WebPageProxy and try to use
        it after the view (and therefore the PageClient) is destroyed.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::~EwkViewImpl):

2012-11-02  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove dependency on SoupPasswordManager
        https://bugs.webkit.org/show_bug.cgi?id=100775

        Reviewed by Carlos Garcia Campos.

        Add a libsecret dependency to the build. This is necessary so that we can remove
        a dependency on SoupPasswordManager.

        * GNUmakefile.am: Add libsecret CFLAGS to the WebKit2 build.

2012-11-02  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Change the scope of locking in WorkQueueEfl.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=98978

        Reviewed by Kenneth Rohde Christiansen.

        Release the m_workItemQueueLock and m_timerWorkItemsLock mutexes
        immediately after the protected resource is no longer modified to
        prevent a possible source of a deadlock.

        And additional mutex locker for the m_writeToPipeDescriptor is added
        to ensure thread-safety of the sendMessageToThread() function.

        * Platform/WorkQueue.h:
        (WorkQueue):
        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::insertTimerWorkItem):
        (WorkQueue::performTimerWork):
        (WorkQueue::sendMessageToThread):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfterDelay):

2012-11-02  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add API unit tests for Ewk_Object
        https://bugs.webkit.org/show_bug.cgi?id=101037

        Reviewed by Kenneth Rohde Christiansen.

        Added API unit tests for Ewk_Object.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/test_ewk2_object.cpp: Added.
        (TestEwkObject1):
        (TestEwkObject1::create):
        (TestEwkObject1::~TestEwkObject1):
        (TestEwkObject2):
        (TestEwkObject2::create):
        (TEST_F):

2012-11-02  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        REGRESSION (r133075): plugins/plugin-javascript-access.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=101045

        Reviewed by Kenneth Rohde Christiansen.

        Encode the plugin filename in ArgumentCoder<PluginInfo> so that
        plugin.filename returns the filename instead of name of the plugin.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):

2012-11-01  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Wrong translation of mouse events
        https://bugs.webkit.org/show_bug.cgi?id=100983

        Reviewed by Kenneth Rohde Christiansen.

        The transform that we build for mouse events is scaled by the scale factor.
        The url bar should not be scaled, so it should be scaled in the oposite
        direction to compensate for that.

        * UIProcess/API/efl/ewk_view.cpp:
        (toWebContentTransform):

2012-11-02  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Add missing variable initialization in PageViewportController

        Reviewed by Jocelyn Turcotte.

        Updating the viewport state depends on uninitialized booleans
        which it should not.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):

2012-11-02  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL][WK2] Use MutexLocker instead of lock()/unlock().
        https://bugs.webkit.org/show_bug.cgi?id=101015

        Reviewed by Kenneth Rohde Christiansen.

        Instead of lock()/unlock(), use MutexLocker in WorkQueue::performWork()
        and WorkQueue::performTimerWork().

        The locking scope will be more clear and simple with using MutexLocker.

        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::performWork):
        (WorkQueue::insertTimerWorkItem):
        (WorkQueue::performTimerWork):
        (WorkQueue::dispatchAfterDelay):

2012-11-02  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Common ref and unref functions for EFL WK2 objects
        https://bugs.webkit.org/show_bug.cgi?id=100751

        Reviewed by Kenneth Rohde Christiansen.

        Added common Ewk_Object class with ref/unref API also added several aux functions for safe
        Ewk_Object conversion. Used new approach on ewk_back_forward_list_item as example.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (Ewk_Back_Forward_List::getFromCacheOrCreate):
        (Ewk_Back_Forward_List::createEinaList):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (EwkBackForwardListItem::EwkBackForwardListItem):
        (EwkBackForwardListItem::url):
        (EwkBackForwardListItem::title):
        (EwkBackForwardListItem::originalURL):
        (ewk_back_forward_list_item_url_get):
        (ewk_back_forward_list_item_title_get):
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (EwkBackForwardListItem):
        (EwkBackForwardListItem::create):
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        * UIProcess/API/efl/ewk_object.cpp: Copied from Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item_private.h.
        (ewk_object_ref):
        (ewk_object_unref):
        * UIProcess/API/efl/ewk_object.h: Copied from Source/WebKit2/UIProcess/API/efl/ewk_back_forward_list_item_private.h.
        * UIProcess/API/efl/ewk_object_private.h: Added.
        (Ewk_Object):
        (Ewk_Object::~Ewk_Object):
        (ewk_object_is_of_type):
        (ewk_object_cast_check):
        (ewk_object_cast):
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (freeEinaList):

2012-11-02  Nandor Huszka  <hnandor@inf.u-szeged.hu>

        [Qt][Mac][Win] Unreviewed build fix after r133182
        https://bugs.webkit.org/show_bug.cgi?id=100995

        Remove two methods' OVERRIDE and virtual modifiers, because they cannot be found in any base class.
        Also relocate their prototypes, because they mix with the overridden ones.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-11-02  Jihye Kang  <jye.kang@samsung.com>

        [EFL][WK2] Add ewk_security_origin and ewk_storage_manager APIs
        https://bugs.webkit.org/show_bug.cgi?id=92827

        Reviewed by Gyuyoung Kim.

        Add ewk_security_origin APIs to get security origin.
        These APIs will be used to get host, protocol and port of security
        origin.
        Add ewk_storage_manager to manage web storage and
        ewk_storage_manager_origins_get to get origins list of web storage.
        Add Unit tests for ewk_storage_manager and ewk_security_origin APIs.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::storageManager):
        (ewk_context_storage_manager_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_security_origin.cpp: Added.
        (Ewk_Security_Origin::Ewk_Security_Origin):
        (Ewk_Security_Origin::host):
        (Ewk_Security_Origin::protocol):
        (Ewk_Security_Origin::port):
        (ewk_security_origin_ref):
        (ewk_security_origin_unref):
        (ewk_security_origin_host_get):
        (ewk_security_origin_protocol_get):
        (ewk_security_origin_port_get):
        * UIProcess/API/efl/ewk_security_origin.h: Added.
        * UIProcess/API/efl/ewk_security_origin_private.h: Added.
        (Ewk_Security_Origin):
        (Ewk_Security_Origin::create):
        * UIProcess/API/efl/ewk_storage_manager.cpp: Added.
        (Ewk_Storage_Manager::Ewk_Storage_Manager):
        (Ewk_Storage_Manager::getStorageOrigins):
        (Ewk_Storage_Manager::createOriginList):
        (_Ewk_Storage_Origins_Async_Get_Context):
        (_Ewk_Storage_Origins_Async_Get_Context::_Ewk_Storage_Origins_Async_Get_Context):
        (getStorageOriginsCallback):
        (ewk_storage_manager_origins_get):
        * UIProcess/API/efl/ewk_storage_manager.h: Added.
        * UIProcess/API/efl/ewk_storage_manager_private.h: Added.
        (Ewk_Storage_Manager):
        (Ewk_Storage_Manager::create):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp: Added.
        (getStorageOriginsCallback):
        (TEST_F):

2012-11-02  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Manage the lifecycle of shareable surfaces precisely.
        https://bugs.webkit.org/show_bug.cgi?id=100797

        Reviewed by Noam Rosenthal.

        Internal Review by Gwang Yoon Hwang and Jae Hyun Park.

        This patch makes UpdateAtlas manage the lifecycle of shareable surfaces
        containing the updates in the way how CoordinatedTile manages the lifecycle of
        tiles. Currently, UI Process creates the shareable surface when receiving an
        UpdateTileForLayer message, but there is no exact point to remove the shareable
        surface. Now, we introduce new two messages to handle the lifecycle:
        CreateUpdateAtlas and RemoveUpdateAtlas.

        This patch gives us two benefits.
        1. Reduce file and mmap operations. Web Process does not need to duplicate a
        file handle every tile update. UI Process does not need to create a
        ShareableSurface every UpdateTileForLayer message.
        2. Save memory. We can remove a ShareableSurface in UI Process when UpdateAtlas
        in Web Process is removed.

        * Shared/SurfaceUpdateInfo.cpp:
        (WebKit::SurfaceUpdateInfo::encode):
        (WebKit::SurfaceUpdateInfo::decode):
        * Shared/SurfaceUpdateInfo.h:
        (SurfaceUpdateInfo):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::createUpdateAtlas):
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::removeUpdateAtlas):
        (WebKit::LayerTreeCoordinatorProxy::purgeBackingStores):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit::CoordinatedTile::updateBackBuffer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h:
        (CoordinatedTileClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::createUpdateAtlas):
        (WebKit):
        (WebKit::LayerTreeCoordinator::removeUpdateAtlas):
        (WebKit::LayerTreeCoordinator::beginContentUpdate):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/UpdateAtlas.cpp:
        (WebKit::UpdateAtlas::UpdateAtlas):
        (WebKit):
        (WebKit::UpdateAtlas::~UpdateAtlas):
        (WebKit::UpdateAtlas::beginPaintingOnAvailableBuffer):
        * WebProcess/WebPage/UpdateAtlas.h:
        (UpdateAtlasClient):
        (WebKit):
        (UpdateAtlas):

2012-11-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Remove redundant internal function
        https://bugs.webkit.org/show_bug.cgi?id=100969

        Reviewed by Gyuyoung Kim.

        Remove ewk_view_text_found() in ewk_view.cpp which is not used anymore.
        Now, "text,found" signal is emitted by DECLARE_EWK_VIEW_CALLBACK(TextFound, "text,found", unsigned) 
        in EwkViewCallback.h

        * UIProcess/API/efl/ewk_view.cpp:

2012-11-01  Anders Carlsson  <andersca@apple.com>

        Reformat the annotationStyle initializer to appease update-webkit-localizable-strings.

        Rubber-stamped by Dan Bernstein.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2012-11-01  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Move MeshBoxType out of CustomFilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=100782

        Reviewed by Dean Jackson.

        Renamed the CustomFilterOperation::MeshBoxType to CustomFilterMeshBoxType.

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

2012-11-01  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=100917
        There should be a way to dump the scrolling tree from the layout tests
        
        Reviewed by Simon Fraser.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-11-01  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Clean up headers of Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=100907

        Reviewed by Noam Rosenthal.

        This patch performs:
        1. Remove unused methods.
        2. Change public methods to private if needed.
        3. Put virtual, OVERRIDE and explicit keywords if needed.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::fixedToViewport):
        (WebCore::CoordinatedGraphicsLayer::setMaskTarget):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-11-01  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_Auth_Request API
        https://bugs.webkit.org/show_bug.cgi?id=100858

        Reviewed by Kenneth Rohde Christiansen.

        Add Ewk_Auth_Request API for the client to handle
        HTTP authentication.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        (EwkViewCallbacks):
        * UIProcess/API/efl/ewk_auth_request.cpp: Added.
        (Ewk_Auth_Request::Ewk_Auth_Request):
        (Ewk_Auth_Request::~Ewk_Auth_Request):
        (Ewk_Auth_Request::suggestedUsername):
        (Ewk_Auth_Request::realm):
        (Ewk_Auth_Request::host):
        (Ewk_Auth_Request::cancel):
        (Ewk_Auth_Request::authenticate):
        (Ewk_Auth_Request::isRetrying):
        (ewk_auth_request_ref):
        (ewk_auth_request_unref):
        (ewk_auth_request_suggested_username_get):
        (ewk_auth_request_cancel):
        (ewk_auth_request_authenticate):
        (ewk_auth_request_retrying_get):
        (ewk_auth_request_realm_get):
        (ewk_auth_request_host_get):
        * UIProcess/API/efl/ewk_auth_request.h: Added.
        * UIProcess/API/efl/ewk_auth_request_private.h: Added.
        (WebKit):
        (Ewk_Auth_Request):
        (Ewk_Auth_Request::create):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_auth_request.cpp: Added corresponding API tests.
        (serverCallback):
        (onAuthenticationRequest):
        (TEST_F):
        (onResourceLoadResponse):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveAuthenticationChallengeInFrame):
        (WebKit):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (PageLoadClientEfl):

2012-11-01  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Fix the Mac breakage
        https://bugs.webkit.org/show_bug.cgi?id=100383

        Reviewed by Kenneth Rohde Christiansen.

        acceleratedCompositingForFixedPositionEnabled needs to be enabled
        for fixed layout to work efficiently but it's wrong to force it
        to false if fixed layout isn't enabled.

        Separate hard requirements for fixed layout from rendering optimizations
        and guard the later with USE(COORDINATED_GRAPHICS).
        Also add an early return to make sure that ports always having a false
        useFixedLayout creation parameter won't get their settings adjusted.

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

2012-10-24  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        WebIconDatabase: Properly clean up on destruction
        https://bugs.webkit.org/show_bug.cgi?id=100237

        Reviewed by Brady Eidson.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::invalidate):
        Make sure that IconDatabaseBase::iconDatabase won't return a dangling pointer.

2012-11-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL] Fix event mapping for WebKit2 with coordinated graphics
        https://bugs.webkit.org/show_bug.cgi?id=100956

        Reviewed by Alexis Menard.

        Apply scale after translation.

        * UIProcess/API/efl/ewk_view.cpp:
        (toWebContentTransform):

2012-11-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL] Correct our use of the coordinated graphics
        https://bugs.webkit.org/show_bug.cgi?id=100947

        Reviewed by Alexis Menard.

        Replace the display(...) call with a regular update() on the view.
        In the coordinated graphics case this updates our view using
        paintToCurrentGLContext with our viewmodel matrix and clips it to
        the viewport. This avoid the need to manually joining update regions.

        Unneeded update calls have also been removed and the resizing
        logic has been improved.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::update):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl):
        (EwkViewImpl::clearEvasGLSurface):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):
        * UIProcess/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (PageViewportControllerClientEfl):

2012-11-01  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Double clicks/taps aren't passed down to the page
        https://bugs.webkit.org/show_bug.cgi?id=100949

        Reviewed by Kenneth Rohde Christiansen.

        Since we are passing double click events as press events and that
        they are preceeded by a real press event, double clicks are passed
        down to the page as triple clicks.

        Ignore double click events and let WebCore::EventHandler handle it
        through press and release events.

        * Shared/qt/WebEventFactoryQt.cpp:
        (WebKit::webEventTypeForEvent):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::handleMouseEvent):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleInputEvent):

2012-11-01  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [AC][EFL][WK2] Rename PageViewportControllerClientEfl::m_pageViewportController to m_controller
        https://bugs.webkit.org/show_bug.cgi?id=100933

        Reviewed by Kenneth Rohde Christiansen.

        PageViewportControllerClientEfl::m_pageViewportController has to be renamed to m_controller
        to keep consistency with other ports. Assertinons were also added.

        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/efl/PageViewportControllerClientEfl.h:
        (PageViewportControllerClientEfl):

2012-11-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r133126.
        http://trac.webkit.org/changeset/133126
        https://bugs.webkit.org/show_bug.cgi?id=100925

        This made EFL API test break on EFL buildbots (Requested by
        gyuyoung on #webkit).

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_security_origin.cpp: Removed.
        * UIProcess/API/efl/ewk_security_origin.h: Removed.
        * UIProcess/API/efl/ewk_security_origin_private.h: Removed.
        * UIProcess/API/efl/ewk_storage_manager.cpp: Removed.
        * UIProcess/API/efl/ewk_storage_manager.h: Removed.
        * UIProcess/API/efl/ewk_storage_manager_private.h: Removed.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp: Removed.

2012-11-01  Yuni Jeong  <yhnet.jung@samsung.com>

        [WK2] Add APIs to get/set encoding detector
        https://bugs.webkit.org/show_bug.cgi?id=100066

        Reviewed by Gyuyoung Kim.

        Add setting APIs for encoding dector and a unit test.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetUsesEncodingDetector):
        (WKPreferencesGetUsesEncodingDetector):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_setting_uses_encoding_detector_set):
        (ewk_setting_uses_encoding_detector_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-10-31  Jihye Kang  <jye.kang@samsung.com>

        [EFL][WK2] Add ewk_security_origin and ewk_storage_manager APIs
        https://bugs.webkit.org/show_bug.cgi?id=92827

        Reviewed by Gyuyoung Kim.

        Add ewk_security_origin APIs to get security origin.
        These APIs will be used to get host, protocol and port of security
        origin.
        Add ewk_storage_manager to manage web storage and
        ewk_storage_manager_origins_get to get origins list of web storage.
        Add Unit tests for ewk_storage_manager and ewk_security_origin APIs.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::storageManager):
        (ewk_context_storage_manager_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_security_origin.cpp: Added.
        (Ewk_Security_Origin::Ewk_Security_Origin):
        (Ewk_Security_Origin::host):
        (Ewk_Security_Origin::protocol):
        (Ewk_Security_Origin::port):
        (ewk_security_origin_ref):
        (ewk_security_origin_unref):
        (ewk_security_origin_host_get):
        (ewk_security_origin_protocol_get):
        (ewk_security_origin_port_get):
        * UIProcess/API/efl/ewk_security_origin.h: Added.
        * UIProcess/API/efl/ewk_security_origin_private.h: Added.
        (Ewk_Security_Origin):
        (Ewk_Security_Origin::create):
        * UIProcess/API/efl/ewk_storage_manager.cpp: Added.
        (Ewk_Storage_Manager::Ewk_Storage_Manager):
        (Ewk_Storage_Manager::getStorageOrigins):
        (Ewk_Storage_Manager::createOriginList):
        (_Ewk_Storage_Origins_Async_Get_Context):
        (_Ewk_Storage_Origins_Async_Get_Context::_Ewk_Storage_Origins_Async_Get_Context):
        (getStorageOriginsCallback):
        (ewk_storage_manager_origins_get):
        * UIProcess/API/efl/ewk_storage_manager.h: Added.
        * UIProcess/API/efl/ewk_storage_manager_private.h: Added.
        (Ewk_Storage_Manager):
        (Ewk_Storage_Manager::create):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp: Added.
        (getStorageOriginsCallback):
        (TEST_F):

2012-10-31  Alexandru Chiculita  <achicu@adobe.com>

        CustomFilterOperation parameters list is not decoded correctly in CoordinatedGraphicsArgumentCoders
        https://bugs.webkit.org/show_bug.cgi?id=100889

        Reviewed by Noam Rosenthal.

        The custom filters parameters list was initialized with a specific size and then
        the decoder was expected to fill it with all the decoded parameters. The decoder was
        using the append command which added the paramters at the end, so it doubled the size
        of the vector leaving empty spaces at the beginning of the list. Fixed it by writting
        directly into the allocated space.

        No new tests, the code path is not activated yet.

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

2012-10-31  Sam Weinig  <sam@webkit.org>

        Convert the rest of the encoders to take the encoder as a reference
        https://bugs.webkit.org/show_bug.cgi?id=100821

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/ArgumentCoders.h:
        (CoreIPC::SimpleArgumentCoder::encode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::encodeTimingFunction):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        * Shared/SessionState.cpp:
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageDecoder::baseDecode):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::encode):
        * Shared/WebLayerTreeInfo.cpp:
        (WebKit::WebLayerInfo::encode):
        * Shared/gtk/ArgumentCodersGtk.cpp:
        (CoreIPC::encodeImage):
        (CoreIPC::encodeDataObject):
        (CoreIPC::::encode):
        (CoreIPC::encodeGKeyFile):
        (CoreIPC::encode):
        * Shared/gtk/ArgumentCodersGtk.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::encode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        * Shared/qt/ArgumentCodersQt.h:
        (CoreIPC):
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encodePlatformData):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::::encodePlatformData):
        * WebProcess/WebPage/DecoderAdapter.cpp:
        (WebKit::DecoderAdapter::decodeBytes):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::encodeBytes):

2012-10-31  Jesse van den Kieboom  <jessevdk@gnome.org>

        Enable webkit2 introspection
        https://bugs.webkit.org/show_bug.cgi?id=94313

        Reviewed by Martin Robinson.

        This patch enables generation of introspection information for webkit2
        in the same was as it is done for webkit. The resulting gir and
        typelib file are named WebKit2-3.0.{gir,typelib}.

        * GNUmakefile.am:
        * UIProcess/API/gtk/WebKitBackForwardList.cpp:

2012-10-31  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_File_Chooser_Request API
        https://bugs.webkit.org/show_bug.cgi?id=100818

        Reviewed by Kenneth Rohde Christiansen.

        Add Ewk_File_Chooser_Request API so that the client
        can handle file chooser requests (e.g. Show a file
        picker dialog) when the user clicks on an input
        element of type "file".

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        (EwkViewCallbacks):
        * UIProcess/API/efl/ewk_file_chooser_request.cpp: Added.
        (Ewk_File_Chooser_Request::Ewk_File_Chooser_Request):
        (Ewk_File_Chooser_Request::~Ewk_File_Chooser_Request):
        (Ewk_File_Chooser_Request::allowMultipleFiles):
        (Ewk_File_Chooser_Request::acceptedMIMETypes):
        (Ewk_File_Chooser_Request::cancel):
        (Ewk_File_Chooser_Request::chooseFiles):
        (ewk_file_chooser_request_ref):
        (ewk_file_chooser_request_unref):
        (ewk_file_chooser_request_allow_multiple_files_get):
        (ewk_file_chooser_request_accepted_mimetypes_get):
        (ewk_file_chooser_request_cancel):
        (ewk_file_chooser_request_files_choose):
        (ewk_file_chooser_request_file_choose):
        * UIProcess/API/efl/ewk_file_chooser_request.h: Added.
        * UIProcess/API/efl/ewk_file_chooser_request_private.h: Added.
        (WebKit):
        (Ewk_File_Chooser_Request):
        (Ewk_File_Chooser_Request::create):
        (Ewk_File_Chooser_Request::wasHandled):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/resources/file_chooser.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_file_chooser_request.cpp: Added corresponding
        unit tests.
        (onFileChooserRequest):
        (compareStrings):
        (freeStringList):
        (TEST_F):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::runOpenPanel):
        (WebKit):
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        * UIProcess/efl/PageUIClientEfl.h:
        (PageUIClientEfl):

2012-10-31  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Texmap] Enable filter animations in GraphicsLayerAnimation
        https://bugs.webkit.org/show_bug.cgi?id=100318

        Reviewed by Kenneth Rohde Christiansen.

        Encode/decode KeyframeValues of type FilterOperations.

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

2012-10-31  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2][AC] Avoid storing dirty rects in a Vector inside EwkViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=100736

        Reviewed by Kenneth Rohde Christiansen.

        No longer store dirty rectangles in a temporary Vector and construct
        a WebCore::Region directly from them instead. This avoid having to
        iterate over the Vector in EwkViewImpl::displayTimerFired() to construct
        a Region object, which should be more efficient.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::redrawRegion):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl):

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

        Connection::Client::didReceiveInvalidMessage should take the full message name
        https://bugs.webkit.org/show_bug.cgi?id=100788

        Reviewed by Sam Weinig.

        Change Connection::Client::didReceiveInvalidMessage to take the message receiver name and message name as parameters
        and make WebProcessProxy::didReceiveInvalidMessage print out the full message name.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (NetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkProcess.h:
        (NetworkProcess):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (Client):
        * Platform/CoreIPC/StringReference.cpp:
        (CoreIPC::StringReference::toString):
        (CoreIPC):
        * Platform/CoreIPC/StringReference.h:
        (StringReference):
        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::didReceiveInvalidMessage):
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveInvalidMessage):
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::didReceiveInvalidMessage):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Network/NetworkProcessProxy.h:
        (NetworkProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didReceiveInvalidMessage):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        (WebKit::SharedWorkerProcessProxy::didReceiveInvalidMessage):
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        (SharedWorkerProcessProxy):
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::didReceiveInvalidMessage):
        * UIProcess/WebConnectionToWebProcess.h:
        (WebConnectionToWebProcess):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveInvalidMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        (NetworkProcessConnection):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (PluginProcessConnection):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::didReceiveInvalidMessage):
        * WebProcess/WebConnectionToUIProcess.h:
        (WebConnectionToUIProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveInvalidMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-10-31  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2][AC] Use smart pointers for Evas_GL types
        https://bugs.webkit.org/show_bug.cgi?id=100745

        Reviewed by Kenneth Rohde Christiansen.

        Replace raw pointers to Evas_GL, Evas_GL_Context and
        Evas_GL_Surface by smart pointers in EwkViewImpl.

        C++ wrappers were added for Evas_GL_Context and
        Evas_GL_Surface in order to use OwnPtr. This is needed
        because their destroy functions need the Evas_GL.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EvasGLContext.cpp: Added.
        (WebKit):
        (WebKit::EvasGLContext::EvasGLContext):
        (WebKit::EvasGLContext::~EvasGLContext):
        * UIProcess/API/efl/EvasGLContext.h: Added.
        (WebKit):
        (EvasGLContext):
        (WebKit::EvasGLContext::create):
        (WebKit::EvasGLContext::context):
        * UIProcess/API/efl/EvasGLSurface.cpp: Added.
        (WebKit):
        (WebKit::EvasGLSurface::EvasGLSurface):
        (WebKit::EvasGLSurface::~EvasGLSurface):
        * UIProcess/API/efl/EvasGLSurface.h: Added.
        (WebKit):
        (EvasGLSurface):
        (WebKit::EvasGLSurface::create):
        (WebKit::EvasGLSurface::surface):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::exitAcceleratedCompositingMode):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl::evasGL):
        (EwkViewImpl::evasGLContext):
        (EwkViewImpl::evasGLSurface):
        (EwkViewImpl::resetEvasGLSurface):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

2012-10-31  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Fix "Unable to find a renderable master window QQuickView" warnings in tst_QQuickWebView
        https://bugs.webkit.org/show_bug.cgi?id=100247

        Reviewed by Jocelyn Turcotte.

        Make sure we have a visible window for tests that want to render.

        * UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp:
        (tst_QQuickWebView::showWebView):
        (tst_QQuickWebView::removeFromCanvas):
        (tst_QQuickWebView::multipleWebViewWindows):
        (tst_QQuickWebView::multipleWebViews):
        (tst_QQuickWebView::basicRenderingSanity):
        (tst_QQuickWebView::transparentWebViews):
        Removed some unnecessary resize now that the window have a default size.
        * UIProcess/API/qt/tests/testwindow.h:
        (TestWindow): Resize the window to a default size at construction.

2012-10-31  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] WebContext::platformDefaultIconDatabasePath() should return a path to a file
        https://bugs.webkit.org/show_bug.cgi?id=100679

        Reviewed by Kenneth Rohde Christiansen.

        This patch aligns the EFL implementation with other ports. Before
        that, we had an inconsistence: the return value of the getter could
        not be used on the setter (the setter expects a full path, not a
        directory).

        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::faviconDatabase):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath):

2012-10-31  Ian Vollick  <vollick@chromium.org>

        Add support for text-based repaint testing
        https://bugs.webkit.org/show_bug.cgi?id=100584

        Reviewed by Simon Fraser.

        Allows tracked repaint rects to be dumped as text.

        * mac/WebKit2.order:
        * win/WebKit2.def:
        * win/WebKit2CFLite.def:
          Exports for:
            FrameView::setTracksRepaints(bool)
            Frame::trackedRepaintRectsAsText() const

2012-10-31  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL] Skip EWK2UnitTestBase.ewk_context_vibration_client_callbacks_set API test
        https://bugs.webkit.org/show_bug.cgi?id=100839

        Unreviewed, Skip EWK2UnitTestBase.ewk_context_vibration_client_callbacks_set
        API test since it is failing on the bots.

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

2012-10-31  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][EFL] Assert check need to be changed in InputMethodContextEfl::InputMethodContextEfl
        https://bugs.webkit.org/show_bug.cgi?id=100840

        Reviewed by Kenneth Rohde Christiansen.

        Because 'context' is already set to 'm_context', assert check need to be done for m_context.

        * UIProcess/efl/InputMethodContextEfl.cpp:
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):

2012-10-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [WK2/EFL] Make sure all our events are transformed correctly
        https://bugs.webkit.org/show_bug.cgi?id=100836

        Reviewed by Alexis Menard.

        When moving to using the tiled backing store, we need to
        transform our events before sending them to the web process.

        We needed to do that before as well, as the webkit view
        doesn't have to be positioned at (0,0), but it was done in
        a hacking way in the WebEvent creating.

        Now we generate two transforms, one for transforming points
        to the web content, and one for transforming them into the
        device screen coordinate system.

        This fixes the global position which was wrong before.

        * Shared/NativeWebMouseEvent.h:
        (NativeWebMouseEvent):
        * Shared/NativeWebTouchEvent.h:
        (NativeWebTouchEvent):
        * Shared/NativeWebWheelEvent.h:
        (NativeWebWheelEvent):
        * Shared/efl/NativeWebMouseEventEfl.cpp:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent):
        * Shared/efl/NativeWebTouchEventEfl.cpp:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * Shared/efl/NativeWebWheelEventEfl.cpp:
        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebTouchEvent):
        * Shared/efl/WebEventFactory.h:
        (WebEventFactory):
        * UIProcess/API/efl/ewk_view.cpp:
        (toDeviceScreenTransform):
        (toWebContentTransform):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (ewk_view_feed_touch_event):

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

        [WK2] Change the scope of locking in CoreIPC::Connection class.
        https://bugs.webkit.org/show_bug.cgi?id=98998

        Reviewed by Laszlo Gombos.

        Release the m_incomingMessagesLock and m_outgoingMessagesLock mutexes
        immediately after the protected resource is no longer modified to
        prevent a possible source of a deadlock.

        The change allows the EFL port to prevent an actual dead-lock
        situation with some upcoming changes.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::enqueueIncomingMessage):

2012-10-31  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, fix header sorting in r132992.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:

2012-10-31  Tim Horton  <timothy_horton@apple.com>

        Unreviewed, fix 32bit build breakage.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::updateGeometry):

2012-10-31  Tim Horton  <timothy_horton@apple.com>

        Full-page PDFPlugin should support inline form editing
        https://bugs.webkit.org/show_bug.cgi?id=100155

        Reviewed by Dan Bernstein.

        Add form controls corresponding to Text and Choice PDF annotations,
        allowing for single- and multi-line text input, and <select>-like input.

        Currently, forms are only implemented for full-page PDF documents.

        * Shared/mac/PDFKitImports.h:
        (WebKit): Add pdfAnnotationTextWidgetClass and pdfAnnotationChoiceWidgetClass.
        * Shared/mac/PDFKitImports.mm:
        (WebKit::pdfAnnotationTextWidgetClass): Add pdfAnnotationTextWidgetClass.
        (WebKit::pdfAnnotationChoiceWidgetClass): Add pdfAnnotationChoiceWidgetClass.
        * WebKit2.xcodeproj/project.pbxproj: Add PDFLayerControllerDetails, PDFPluginTextAnnotation, PDFPluginChoiceAnnotation,
        and PDFPluginAnnotation.
        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Added. Extract PDFLayerController details category into a header.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add m_activeAnnotation, to keep track of the active PDFPluginAnnotation, and m_annotationContainer,
        the <div> that form controls are inserted into.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate pdfLayerController:didChangeActiveAnnotation:]): Forward active annotation changes to PDFPlugin.
        (WebKit::PDFPlugin::PDFPlugin): Add a <div> to the PluginDocument <body>, which will contain <input>, <select>, and <textarea> elements
        corresponding to the active annotation. This div is made to fit to the body, and is "overflow: hidden" so that form elements scrolled
        out of the viewport do not cause the Document to expand to be larger than the Plugin.
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Update PDFPlugin's notion of the scroll position immediately after the document loads, in case
        the scroll position is constrained by PDFKit.
        (WebKit::PDFPlugin::destroy): Tear down any forms for the active annotation.
        (WebKit::PDFPlugin::geometryDidChange): Notify the current annotation that it should update its geometry when the Plugin's geometry changes.
        (WebKit::PDFPlugin::setScrollOffset): Notify the current annotation that it should update its geometry when we scroll.
        (WebKit::PDFPlugin::setActiveAnnotation): Commit changes to the current annotation, if there is one, then make a new PDFPluginAnnotation
        corresponding to the newly active annotation, and attach it to our document.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.h: Added.
        (WebKit::PDFPluginAnnotation::element): Return the Element corresponding to this object.
        (WebKit::PDFPluginAnnotation::annotation): Return the PDFAnnotation corresponding to this object.
        (WebKit::PDFPluginAnnotation::plugin): Return the Plugin that created this object.
        (WebKit::PDFPluginAnnotation::commit): Commit changes from the form to the PDFAnnotation. This is implemented in subclasses.
        (WebKit::PDFPluginAnnotation::attach): Attach a PDFPluginAnnotation to its parent Element.
        (WebKit::PDFPluginAnnotation::parent): Return the parent Element that we're attach()ed to.
        (WebKit::PDFPluginAnnotation::pdfLayerController): Return the pdfLayerController that the PDFAnnotation comes from.
        (PDFPluginAnnotationEventListener): Add an event listener to respond to "change" and "blur" events from m_element.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm: Added.
        (WebKit::PDFPluginAnnotation::create): Create the appropriate PDFPluginAnnotation subclass (PDFPluginTextAnnotation or
        PDFPluginChoiceAnnotation based on the class of the PDFAnnotation).
        (WebKit::PDFPluginAnnotation::attach): Lazily create the HTML form element corresponding to this annotation. Add it to its parent
        element. Add event listeners for "change" and "blur".
        (WebKit::PDFPluginAnnotation::~PDFPluginAnnotation): Tear down the annotation, by removing event listeners and removing
        the form element from its parent element.
        (WebKit::PDFPluginAnnotation::updateGeometry): Update the size and position of the form element, given the current PDF scale and scrolling position.
        (WebKit::PDFPluginAnnotation::PDFPluginAnnotationEventListener::handleEvent): If we get a blur or change event, we should remove the
        form control to match the behavior of PDFKit.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.h: Added.
        (WebKit::PDFPluginChoiceAnnotation::choiceAnnotation): Return annotation() with the appropriate cast.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm: Added.
        (WebKit::PDFPluginChoiceAnnotation::updateGeometry): Update the font size of the choice widget given the current PDF scale.
        (WebKit::PDFPluginChoiceAnnotation::commit): Save the value of the currently selected <option> into the PDFAnnotationChoiceWidget.
        (WebKit::PDFPluginChoiceAnnotation::createAnnotationElement): Create a <select> element, populated with <option> elements
        for the PDFAnnotationChoiceWidget's available choices. Select the correct <option> initially.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h: Added.
        (WebKit::PDFPluginTextAnnotation::textAnnotation): Return annotation() with the appropriate cast.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm: Added.
        (WebKit::cssAlignmentValueForNSTextAlignment): Return the CSS alignment value for a given NSTextAlignment.
        (WebKit::PDFPluginTextAnnotation::createAnnotationElement): Create a <textarea> or <input> element, depending on whether the
        PDFAnnotationTextWidget supports multiline editing or not.
        (WebKit::PDFPluginTextAnnotation::updateGeometry): Update the font size of the text widget given the current PDF scale.
        (WebKit::PDFPluginTextAnnotation::commit): Save the current string in the form element into the PDFAnnotationTextWidget.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::focusedPluginViewForFrame): Return the PluginView for a Frame only if the Plugin's element is focused.
        (WebKit::WebPage::executeEditingCommand): Only forward editing commands to PluginView if the plugin itself is focused.
        (WebKit::WebPage::isEditingCommandEnabled): Ditto.
        (WebKit::WebPage::validateCommand): Ditto.

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Make WebKit2 Build with NETWORK_PROCESS disabled
        https://bugs.webkit.org/show_bug.cgi?id=100798

        Reviewed by David Kilzer.

        Wrap a few remaining NetworkProcess files and related code in
        ENABLE(NETWORK_PROCESS) guards to avoid being compiled when disabled.

        * NetworkProcess/HostRecord.cpp:
        * NetworkProcess/HostRecord.h:
        * NetworkProcess/NetworkRequest.cpp:
        * NetworkProcess/NetworkRequest.h:
        * NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm:
        * UIProcess/Network/NetworkProcessManager.cpp:
        * UIProcess/Network/NetworkProcessManager.h:
        Wrap files in guards.

        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        Wrap NetworkProcess enum access in guards.

        * WebProcess/WebKitMain.cpp:
        (WebKitMain):
        Wrap NetworkProcess enum switch case in guards.

        * WebKit2Prefix.h:
        Remove an extraneous close and reopen of the same guard.

2012-10-30  Jae Hyun Park  <jae.park@company100.net>

        Coordinated Graphics: Remove unused methods
        https://bugs.webkit.org/show_bug.cgi?id=100799

        Reviewed by Noam Rosenthal.

        Currently, there are several unused methods regarding Coordinated
        Graphics. This patch removes those unused methods.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/DrawingAreaProxy.h:

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Sync up FeatureDefine Configuration Files
        https://bugs.webkit.org/show_bug.cgi?id=100171

        Reviewed by David Kilzer.

        Follow up to better coordinate with iOS feature defines. Make:

          - ENABLE_FILTERS always on
          - ENABLE_INPUT_* iphonesimulator values point to the iphoneos values

        * Configurations/FeatureDefines.xcconfig:

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Sync up FeatureDefine Configuration Files
        https://bugs.webkit.org/show_bug.cgi?id=100171

        Reviewed by David Kilzer.

        Ensure an identical FeatureDefine files across all projects. Changes:

          - ENABLE_CSS_BOX_DECORATION_BREAK should be in all
          - ENABLE_PDFKIT_PLUGIN should be in all
          - ENABLE_RESOLUTION_MEDIA_QUERY should be in all
          - ENABLE_ENCRYPTED_MEDIA should be in all
          - ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING with corrected value
          - Some alphabetical ordering cleanup

        * Configurations/FeatureDefines.xcconfig:

2012-10-30  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r132887): Caused segfault in a EWK2UnitTestBase.ewk_view_text_find
        https://bugs.webkit.org/show_bug.cgi?id=100781

        Reviewed by Kenneth Rohde Christiansen.

        Make sure we pass a pointer to zero instead of a NULL pointer
        as parameter to the "text,found" in case the text could not
        be found. This prevents crashing in
        EWK2UnitTestBase.ewk_view_text_find when trying to dereference
        the parameter pointer.

        * UIProcess/efl/FindClientEfl.cpp:
        (WebKit::FindClientEfl::didFailToFindString):

2012-10-30  Brady Eidson  <beidson@apple.com>

        Crash in WebProcess at com.apple.WebCore: WebCore::ResourceLoader::start
        <rdar://problem/12596761> and https://webkit.org/b/100792

        Reviewed by Tim Hatcher.

        In release builds we can sometimes end up with a null ResourceLoader due to a race condition
        with the WebProcess telling the NetworkProcess to remove a resource load at the very same time
        the NetworkProcess is about to start that load.

        Until we can resolve that race condition an early return will be necessary.

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

2012-10-30  Jesse van den Kieboom  <jessevdk@gnome.org>

        Fixed transfer annotation for default web context
        https://bugs.webkit.org/show_bug.cgi?id=94314

        Reviewed by Martin Robinson.

        Add a missing colon which prevented the transfer annotation of
        webkit_web_context_get_default to be parsed correctly.

        * UIProcess/API/gtk/WebKitWebContext.cpp:

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

        Use the message name when dispatching messages
        https://bugs.webkit.org/show_bug.cgi?id=100774

        Reviewed by Andreas Kling.

        Change the message generator to decide which function to call based on the message name instead
        of the MessageID. This is yet another step towards eliminating MessageID completely.

        * Scripts/webkit2/messages.py:
        (async_message_statement):
        (sync_message_statement):
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):

2012-10-29  Sam Weinig  <sam@webkit.org>

        Switch more class to use the new << form of encode
        https://bugs.webkit.org/show_bug.cgi?id=100725

        Reviewed by Anders Carlsson.

        - Switches many uses of encoder.encode(foo) to encoder << foo.
        - Switches a few places to take an ArgumentEncoder& rather than an ArgumentEncoder*.
        - Switches a few places away from using encoder.encodeVariableLengthByteArray(foo) to
          using encoder << CoreIPC::DataReference(foo).

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::handleMessage):
        (CoreIPC::handleMessageVariadic):
        * Platform/CoreIPC/StringReference.cpp:
        (CoreIPC::StringReference::encode):
        (CoreIPC::StringReference::decode):
        * Platform/CoreIPC/mac/MachPort.h:
        (CoreIPC::MachPort::encode):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::encode):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        * Shared/OriginAndDatabases.cpp:
        (WebKit::OriginAndDatabases::encode):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::encode):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::encode):
        * Shared/SessionState.cpp:
        (WebKit::SessionState::encode):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode):
        * Shared/SharedWorkerProcessCreationParameters.cpp:
        (WebKit::SharedWorkerProcessCreationParameters::encode):
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::encode):
        * Shared/StringPairVector.h:
        (WebKit::StringPairVector::encode):
        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::encode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode):
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        * Shared/WebGestureEvent.cpp:
        (WebKit::WebGestureEvent::encode):
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::encode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::encode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        * Shared/WebPlatformTouchPoint.cpp:
        (WebKit::WebPlatformTouchPoint::encode):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        * Shared/WebTouchEvent.cpp:
        (WebKit::WebTouchEvent::encode):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::encode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::encode):
        (CoreIPC::decode):
        * Shared/cf/ArgumentCodersCF.h:
        (CoreIPC):
        * Shared/mac/ArgumentCodersMac.h:
        (CoreIPC):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::encode):
        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode):
        * Shared/mac/KeychainAttribute.cpp:
        (CoreIPC::encode):
        * Shared/mac/KeychainAttribute.h:
        (CoreIPC):
        * Shared/mac/LayerTreeContextMac.mm:
        (WebKit::LayerTreeContext::encode):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::encode):
        (WebKit::SandboxExtension::Handle::decode):
        (WebKit::SandboxExtension::HandleArray::encode):
        (WebKit::SandboxExtension::HandleArray::decode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode):
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode):
        * Shared/mac/SecKeychainItemRequestData.cpp:
        (WebKit::SecKeychainItemRequestData::encode):
        (WebKit::SecKeychainItemRequestData::decode):
        * Shared/mac/SecKeychainItemResponseData.cpp:
        (WebKit::SecKeychainItemResponseData::encode):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encodePlatformData):
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::encodeMessageBody):
        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::encodeMessageBody):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Build WebKit as C++11 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100720

        Reviewed by Daniel Bates.

        * Configurations/Base.xcconfig:
        Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.

        * UIProcess/mac/WebCookieManagerProxyMac.mm:
        (WebKit::WebCookieManagerProxy::persistHTTPCookieAcceptPolicy):
        * WebProcess/Cookies/mac/WebCookieManagerMac.mm:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy):
        Add explicit casts to NSHTTPCookieAcceptPolicy.

2012-10-30  Sergio Villar Senin  <svillar@igalia.com>

        [WK2][Qt] Enable hover and mouse events in flickable WebView
        https://bugs.webkit.org/show_bug.cgi?id=100296

        Reviewed by Kenneth Rohde Christiansen.

        Flickable WebView is now allowed to handle both hover and mouse
        events. Flickable was initially meant to be the mobile interface and
        was only handling touch events, but now the idea is that it will be
        the WebView for both mobile and desktop environments.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize): refactored hover and mouse
        event handling from children classes.
        (QQuickWebViewLegacyPrivate::initialize):
        (QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate):

2012-10-29  Anders Carlsson  <andersca@apple.com>

        String::createCFString should return a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=100419

        Reviewed by Andreas Kling.

        Update callers of String::createCFString.

        * Platform/mac/ModuleMac.mm:
        (WebKit::Module::load):
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::initializeSandbox):
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        (WebKit::NetscapePluginModule::createPluginMIMETypesPreferences):
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData):
        (WebKit::autosaveKey):
        (WebKit::WebPageProxy::saveRecentSearches):
        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::clearCacheForOrigin):
        * WebProcess/WebPage/win/WebPageWin.cpp:
        (WebKit::cachedResponseForURL):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-10-30  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        Regression(r132647)-Enable WebGL in EwkView.
        https://bugs.webkit.org/show_bug.cgi?id=100552.

        Reviewed by Kenneth Rohde Christiansen.

        WebGL is enabled with following changeset: http://trac.webkit.org/changeset/132627.
        Some changes are lost after the following changeset: http://trac.webkit.org/changeset/132647
        i.e setWebGLEnabled(true);  in EwkViewImpl.cpp.
        This patch re-applies the lost changes.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):

2012-10-30  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt] Animations jump when the page is suspended
        https://bugs.webkit.org/show_bug.cgi?id=100673

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsLayerAnimations::pause() should accept time from start and not an offset.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        (WebCore::CoordinatedGraphicsLayer::pauseAnimation):
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):

2012-10-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Fix EFL build after r132887
        https://bugs.webkit.org/show_bug.cgi?id=100748

        Reviewed by Gyuyoung Kim.

        Fixed EFL build failure with WTF_USE_TILED_BACKING_STORE enabled caused by http://trac.webkit.org/changeset/132887.

        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):

2012-10-30  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Reject vertex shaders with custom attributes
        https://bugs.webkit.org/show_bug.cgi?id=98973

        Reviewed by Dean Jackson.

        Replace CustomFilterOperation::MeshType with CustomFilterMeshType from
        CustomFilterConstants.h.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
            Read the shader strings directly from the CustomFilterProgram instead of asking for a
            CustomFilterProgramInfo object. Also, encode the meshType earlier so that decoding can
            can use it to create a WebCustomFilterProgram, which now requires a meshType.
        (CoreIPC::::decode):
            Decode the meshType earlier to pass it to the new WebCustomFilterProgram constructor.
        * Shared/CoordinatedGraphics/WebCustomFilterProgram.h:
        (WebKit::WebCustomFilterProgram::create):
            Add a meshType parameter to pass to the base class constructor.
        (WebKit::WebCustomFilterProgram::WebCustomFilterProgram): Ditto.

2012-10-30  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Remove ViewportUpdateDeferrer from PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=100665

        Reviewed by Jocelyn Turcotte.

        Since the original use case of delayed viewport updates and the issue
        of infinite loop conditions between the programmatic adjustmet of the
        viewport and the Qt notification signals are not present any more the
        ViewportUpdateDeferrer became an unnecessary legacy and can be removed.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::pageDidRequestScroll):
        * UIProcess/PageViewportController.h:
        (WebKit):
        (PageViewportController):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::flickMoveStarted):
        (WebKit::PageViewportControllerClientQt::flickMoveEnded):
        (WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
        (WebKit::PageViewportControllerClientQt::touchBegin):
        (WebKit::PageViewportControllerClientQt::touchEnd):
        (WebKit::PageViewportControllerClientQt::setContentsRectToNearestValidBounds):
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
        (WebKit::PageViewportControllerClientQt::pinchGestureEnded):
        (WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-10-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Simplify signal emitting API in EwkViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=100506

        Reviewed by Kenneth Rohde Christiansen.

        Now signal emitting API in EwkViewImpl is simplified so that
        there is one EwkViewImpl::smartCallback template method
        returning EwkViewCallbacks::CallBack class instance
        which encapsulates Ewk_view callback info and also provide
        arguments type checking.

        * UIProcess/API/efl/EwkViewCallbacks.h: Added.
        (EwkViewCallbacks):
        (CallBackInfo):
        (EwkViewCallbacks::CallBackInfo::name):
        (EwkViewCallbacks::CallBackInfo::hasArguments):
        (CallBack):
        (EwkViewCallbacks::CallBack::CallBack):
        (EwkViewCallbacks::CallBack::call):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        (EwkViewImpl::smartCallback):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        * UIProcess/efl/FindClientEfl.cpp:
        (WebKit::FindClientEfl::didFindString):
        (WebKit::FindClientEfl::didFailToFindString):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::willSubmitForm):
        * UIProcess/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::toolTipChanged):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveTitleForFrame):
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didChangeProgress):
        (WebKit::PageLoadClientEfl::didFinishLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didStartProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        * UIProcess/efl/ResourceLoadClientEfl.cpp:
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):
        (WebKit::ResourceLoadClientEfl::didFinishLoadForResource):
        (WebKit::ResourceLoadClientEfl::didFailLoadForResource):
        (WebKit::ResourceLoadClientEfl::ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::~ResourceLoadClientEfl):

2012-10-30  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Coordinated Graphics: Unrelease adopted images
        https://bugs.webkit.org/show_bug.cgi?id=100671

        Reviewed by Kenneth Rohde Christiansen.

        Reloading could cause a crash since r132640 where the directly composited
        image would be re-adopted with the same key before it was properly released
        in the UI process.
        Cancel the release when this happens rather than creating a new image.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):

2012-10-30  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Let Ecore_Evas own the cursor object
        https://bugs.webkit.org/show_bug.cgi?id=100731

        Reviewed by Kenneth Rohde Christiansen.

        Ecore_Evas takes care of calling evas_object_del() on
        the cursor object when it is no longer used (e.g. when
        it is replaced by another cursor object). Therefore,
        we don't need to keep a RefPtr to the cursor Evas
        Object as a data member of EwkViewImpl. We pass
        ownership of the cursor object to Ecore_Evas.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::setCursor):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):

2012-10-30  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Simplify getting impl from ewk_view evas object instance
        https://bugs.webkit.org/show_bug.cgi?id=100505

        Reviewed by Kenneth Rohde Christiansen.

        Macros are removed from EwkViewImpl.h. New macro added to EwkViewImpl.cpp
        so that it's possible to get impl directly from ewk view.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::displayTimerFired):
        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (mapToWebContent):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_smart_calculate):
        (_ewk_view_smart_color_set):
        (ewk_view_context_get):
        (ewk_view_url_set):
        (ewk_view_url_get):
        (ewk_view_icon_url_get):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_settings_get):
        (ewk_view_title_get):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_theme_set):
        (ewk_view_theme_get):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_back_forward_list_get):
        (ewk_view_html_string_load):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        (ewk_view_text_matches_count):
        (ewk_view_mouse_events_enabled_set):
        (ewk_view_mouse_events_enabled_get):
        (ewk_view_feed_touch_event):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):

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

        [WK2] Remove incorrect use of preprocessor macro in API headers.
        https://bugs.webkit.org/show_bug.cgi?id=100722

        Reviewed by Gyuyoung Kim.

        Remove the preprocessor macro ENABLE(INSPECTOR) from the WKAPICast.h
        and WKInspector.h.

        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorGetTypeID):
        (WKInspectorGetPage):
        (WKInspectorIsVisible):
        (WKInspectorIsFront):
        (WKInspectorShow):
        (WKInspectorClose):
        (WKInspectorShowConsole):
        (WKInspectorShowResources):
        (WKInspectorShowMainResourceForFrame):
        (WKInspectorIsAttached):
        (WKInspectorAttach):
        (WKInspectorDetach):
        (WKInspectorIsDebuggingJavaScript):
        (WKInspectorToggleJavaScriptDebugging):
        (WKInspectorIsProfilingJavaScript):
        (WKInspectorToggleJavaScriptProfiling):
        (WKInspectorIsProfilingPage):
        (WKInspectorTogglePageProfiling):
        * UIProcess/API/C/WKInspector.h:

2012-10-29  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION(r130755): All WebKit2 unit tests are failing in WebKit2 bot
        https://bugs.webkit.org/show_bug.cgi?id=98864

        Reviewed by Martin Robinson.

        Use a dedicated directory to store WebKit2 generated resources.

        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/TestMain.cpp:
        (registerGResource): load the resource from the new directory.

2012-10-29  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Delete cached ShareableSurfaces when purging backingStores.
        https://bugs.webkit.org/show_bug.cgi?id=100705

        Reviewed by Noam Rosenthal.

        LayerTreeCoordinatorProxy can be used after calling
        LayerTreeCoordinatorProxy::purgeBackingStores(). So we should clear cached
        ShareableSurfaces.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::purgeBackingStores):

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Simplify Xcode configuration settings that used to vary between OS versions.

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/WebKit2.xcconfig:

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Remove references to unsupported OS and Xcode versions.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Removed.
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:

2012-10-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Add a NetworkingContext for NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=100708

        Reviewed by Anders Carlsson.

        Each request will have a context, because these are so lightweight on Mac, and
        other platforms will need ResourceHandle refactored anyway to use NetworkProcess.

        * NetworkProcess/mac/RemoteNetworkingContext.h: Added.
        * NetworkProcess/mac/RemoteNetworkingContext.mm: Added.
        These go mac/ subdirectory, because NetworkingContext interface is different on
        each platform, as ResourceHandle needs dictate.

        * WebKit2.xcodeproj/project.pbxproj:

2012-10-29  Michael Saboff  <msaboff@apple.com>

        buildHTTPHeaders() should use a StringBuilder.appendLiteral() for separator
        https://bugs.webkit.org/show_bug.cgi?id=100689

        Reviewed by Darin Adler.

        Changed from using a String temporary for the separator to using StringBuilder.appendLiteral(": ").

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

2012-10-29  Michael Saboff  <msaboff@apple.com>

        WKStringCopyCFString() should directly use 8 bit Strings data instead of up converting
        https://bugs.webkit.org/show_bug.cgi?id=100579

        Reviewed by Oliver Hunt.

        Changed to use CFStringCreateWithBytes() for 8 bit strings using characters8() for an 8 bit argument string.
        Changed the current call to characters16().

        * Shared/API/c/cf/WKStringCF.cpp:
        (WKStringCopyCFString):

2012-10-29  Enrica Casucci  <enrica@apple.com>

        Add ENABLE_USERSELECT_ALL feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=100559

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2012-10-29  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][WKTR] Enable Shadow DOM at runtime if compiled with SHADOW_DOM support
        https://bugs.webkit.org/show_bug.cgi?id=100668

        Reviewed by Kenneth Rohde Christiansen.

        Add Bundle API to enable Shadow DOM functionality. This is
        now needed by WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetShadowDOMEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setShadowDOMEnabled):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-10-29  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Fix cursor change detection in EwkViewImpl::setCursor()
        https://bugs.webkit.org/show_bug.cgi?id=100662

        Reviewed by Kenneth Rohde Christiansen.

        Cursor change detection in EwkViewImpl::setCursor() relies on
        addresses returned by Cursor::platformCursor(). However, the
        value returned is currently assigned to a WKEinaSharedString
        instead of a raw pointer. Therefore, the address is always
        different and we keep recreating Evas Objects for the same
        cursor.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::setCursor): Call smartData() after same cursor
        detection since it is not needed if the cursor has not changed
        and it may affect performance.
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):

2012-10-29  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Coordinated Graphics: Make sure that we release images immediately when purging resources
        https://bugs.webkit.org/show_bug.cgi?id=100661

        Reviewed by Noam Rosenthal.

        When we purge, we do both on the UI and web process at the same time,
        both are expected to release references of the other process.
        This creates problem when delaying the release of directly composited
        images.

        Release them immediately in that case.

        Fixes the tst_QQuickWebView::removeFromCanvas API test.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::purgeReleasedImages):
        (WebKit):
        (WebKit::LayerTreeCoordinator::purgeBackingStores):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-29  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Avoid useless assignment in EwkViewImpl::setCustomTextEncodingName()
        https://bugs.webkit.org/show_bug.cgi?id=100667

        Reviewed by Kenneth Rohde Christiansen.

        Remove useless m_customEncoding assignment in EwkViewImpl::setCustomTextEncodingName()
        since the member is anyway assigned in EwkViewImpl::customTextEncodingName().

        Have EwkViewImpl::setCustomTextEncodingName() take a String in argument instead
        of a const char* to make the API more C++ and since we don't need a const char*
        to assign to m_customEncoding anymore.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::setCustomTextEncodingName):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_setting_encoding_custom_set):

2012-10-29  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [WK2] Enable delegated scrolling as soon as the FrameView is created when using fixed layout
        https://bugs.webkit.org/show_bug.cgi?id=100383

        Reviewed by Kenneth Rohde Christiansen.

        Scroll requests and PageTransitionViewportReady messages depend on
        delegated scrolling being set properly on the FrameView to behave
        properly. Since we were waiting for the viewport information to be
        ready before setting the flag this could cause those messages to be avoided.

        This patch takes most of the flag set by setResizesToContentsUsingLayoutSize
        and apply them as soon as possible in WebPage::setUseFixedLayout and
        WebFrameLoaderClient::transitionToCommittedForNewPage.

        The behavior should be the same except for the following settings which are
        now set outside of USE(TILED_BACKING_STORE) if we're using fixed layout:
        - setAcceleratedCompositingForFixedPositionEnabled
        - setFixedElementsLayoutRelativeToFrame
        - setFixedPositionCreatesStackingContext

        This fixes the tst_QQuickWebView::scrollRequest auto test and improves the
        reliability of the loadVisuallyCommitted signal with pages loaded from disk.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::sendViewportAttributesChanged):
        (WebKit::WebPage::setUseFixedLayout):
        (WebKit::WebPage::setFixedLayoutSize):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2012-10-29  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed build fix after r132709.

        * Shared/WebMemorySampler.cpp: Include unistd.h for getpid(3).

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

        [WK2] Fix the incorrect use of preprocessor statement in API header.
        https://bugs.webkit.org/show_bug.cgi?id=100610

        Reviewed by Timothy Hatcher.

        Remove the preprocessor statement to check 'ENABLE_INSPECTOR' feature
        from the WKPage.h.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetInspector):
        * UIProcess/API/C/WKPage.h:

2012-10-28  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Viewport size does not change when the window size changes
        https://bugs.webkit.org/show_bug.cgi?id=100573

        Reviewed by Kenneth Rohde Christiansen.

        The viewport size is set when we create the window the first time
        and does not change automatically afterwards. When we change the window size,
        we need to explicitly change the viewport size as well.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::createGLSurface):

2012-10-27  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Unreviewed build fix for breakage to minimal bot caused by r132742.

        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
            Added appropriate ENABLE(REQUEST_ANIMATION_FRAME) flag.

2012-10-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132740.
        http://trac.webkit.org/changeset/132740
        https://bugs.webkit.org/show_bug.cgi?id=100603

        "Causing many crashes" (Requested by weinig on #webkit).

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::DownloadProxy):
        (WebKit::DownloadProxy::invalidate):
        (WebKit):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createDownloadProxy):
        (WebKit::WebContext::downloadFinished):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebKit):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * UIProcess/WebPageProxy.h:
        (CoreIPC):
        (WebPageProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::~WebPageGroupProxy):
        (WebKit):
        (WebKit::WebPageGroupProxy::didReceiveMessage):
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (CoreIPC):
        (WebPageGroupProxy):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):

2012-10-27  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Animation jerkiness when rAF is enabled
        https://bugs.webkit.org/show_bug.cgi?id=100536

        Reviewed by Kenneth Rohde Christiansen.

        The jerkiness comes from the fact that we schedule animations excessively; That's because
        the previous patch broke requestAnimationFrame behavior during CSS animations, since the
        frame returns right away instead of waiting till the previous frame is actually rendered.

        This patch makes sure that when animations are scheduled, they're only serviced after the
        UI process has actually painted the previous frame. We do so by sending a
        RequestAnimationFrame message to the UI process, which responds with AnimationFrameReady
        after the UI process paints.

        New test: fast/animations/request-animation-frame-too-rapid.html
        Tests that we don't receive an unreasonably high number of callbacks from
        requestAnimationFrame (> 1000FPS).

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit):
        (WebKit::LayerTreeCoordinatorProxy::requestAnimationFrame):
        (WebKit::LayerTreeCoordinatorProxy::animationFrameReady):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
        (WebKit):
        (WebKit::LayerTreeRenderer::animationFrameReady):
        (WebKit::LayerTreeRenderer::requestAnimationFrame):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit):
        (WebKit::LayerTreeCoordinator::scheduleAnimation):
        (WebKit::LayerTreeCoordinator::animationFrameReady):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.messages.in:

2012-10-27  Sam Weinig  <sam@webkit.org>

        Yet more MessageReceivering
        https://bugs.webkit.org/show_bug.cgi?id=100325

        Reviewed by Anders Carlsson.

        Make DownloadProxy, WebPageProxy, and WebPageGroupProxy MessageReceivers.

        * UIProcess/Downloads/DownloadProxy.cpp:
        (WebKit::DownloadProxy::DownloadProxy):
        (WebKit::DownloadProxy::invalidate):
        (WebKit::DownloadProxy::didReceiveMessage):
        (WebKit::DownloadProxy::didReceiveSyncMessage):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):
        Make a MessageReceiver.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit::WebContext::removeMessageReceiver):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        Add additional MessageReceiverMap forwards, and stop dealing with DownloadProxy explicitly.
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::~WebPageProxy):
        (WebKit::WebPageProxy::didReceiveMessage):
        (WebKit::WebPageProxy::didReceiveSyncMessage):
        * UIProcess/WebPageProxy.h:
        Make a MessageReceiver, but keep sub objects using didReceiveMessage for now (like WebPage).
        
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addMessageReceiver):
        (WebKit::WebProcessProxy::removeMessageReceiver):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        Give WebProcessProxy a MessageReceiverMap and all the appropriate forwarding methods.
        
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::~WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::didReceiveMessage):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::isVisibleToHistoryClient):
        (WebPageGroupProxy):
        Make a MessageReceiver and register/unregister with the WebProcess.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveSyncMessage):
        Remove extraneous return statement.
        (WebKit::WebProcess::didReceiveMessage):
        Stop handling WebPageGroupProxy special.

2012-10-27  Sam Weinig  <sam@webkit.org>

        Completely roll out https://bugs.webkit.org/show_bug.cgi?id=99251 (r131686)

        It has caused too many crashes.

        * UIProcess/API/mac/PageClientImpl.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/API/mac/WKViewPrivate.h:
        * UIProcess/mac/CorrectionPanel.mm:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:

2012-10-27  Michael Saboff  <msaboff@apple.com>

        buildHTTPHeaders() should use a StringBuilder instead of a Vector<UChar>
        https://bugs.webkit.org/show_bug.cgi?id=100580

        Reviewed by Oliver Hunt.

        Replaced Vector<UChar> with StringBuilder in the HTTP header construction function buildHTTPHeaders.
        This eliminates 8 -> 16 bit up conversion of the strings involved.

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

2012-10-27  Dan Bernstein  <mitz@apple.com>

        REAL_PLATFORM_NAME build setting is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100587

        Reviewed by Mark Rowe.

        Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
        to PLATFORM_NAME.

        * Configurations/Base.xcconfig:
        * Configurations/BaseTarget.xcconfig:
        * Configurations/CompilerVersion.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKit2.xcconfig:

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

        Have NetworkProcess manage resource load scheduling.
        https://bugs.webkit.org/show_bug.cgi?id=100479

        Reviewed by Alexey Proskuryakov.

        Implement a ResourceLoadScheduler that models the same behavior as WebCore::ResourceLoadScheduler.
        
        The WebProcess scheduler acts as a marshall to the NetworkProcess scheduler via CoreIPC messaging.

        Besides MainResourceLoads which are started directly in the WebProcess, all other loads are now
        started only when the NetworkProcess tells them to start.

        Build-system and messaging related stuff:
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * WebKit2.xcodeproj/project.pbxproj:

        Add a new Network logging channel.
        * Platform/Logging.cpp:
        (WebKit::getChannelFromName):
        * Platform/Logging.h:

        Modeled after ResourceLoadScheduler::HostInformation but more specifically geared towards what NetworkProcess needs to track:
        * NetworkProcess/HostRecord.cpp: Added.
        (WebKit::HostRecord::HostRecord):
        (WebKit::HostRecord::~HostRecord):
        (WebKit::HostRecord::schedule):
        (WebKit::HostRecord::addLoadInProgress):
        (WebKit::HostRecord::remove):
        (WebKit::HostRecord::hasRequests):
        (WebKit::HostRecord::limitRequests):
        * NetworkProcess/HostRecord.h:
        (WebKit::HostRecord::name):
        (WebKit::HostRecord::requestsPending):

        Gateway messaging from the WebResourceLoadScheduler to the NetworkResourceLoadScheduler:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::registerObserver):
        (WebKit::NetworkConnectionToWebProcess::unregisterObserver):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::scheduleNetworkRequest):
        (WebKit::NetworkConnectionToWebProcess::addLoadInProgress):
        (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
        (WebKit::NetworkConnectionToWebProcess::crossOriginRedirectReceived):
        (WebKit::NetworkConnectionToWebProcess::servePendingRequests):
        (WebKit::NetworkConnectionToWebProcess::suspendPendingRequests):
        (WebKit::NetworkConnectionToWebProcess::resumePendingRequests):
        (WebKit::NetworkConnectionToWebProcess::setSerialLoadingEnabled):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (NetworkConnectionToWebProcessObserver): Add an observer interface so arbitrary objects can be notified if
          a Network->WebProcess connection closes.
        (WebKit::NetworkConnectionToWebProcessObserver::~NetworkConnectionToWebProcessObserver):
        (WebKit::NetworkConnectionToWebProcess::isSerialLoadingEnabled):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        Represents a request,  ResourceLoadIdentifier, and connection that all correspond to the same pending NetworkLoad:
        * NetworkProcess/NetworkRequest.cpp:
        (WebKit::NetworkRequest::NetworkRequest):
        (WebKit::NetworkRequest::~NetworkRequest):
        (WebKit::NetworkRequest::connectionToWebProcessDidClose): Using the NetworkConnectionToWebProcessObserver interface,
          if the connection closes then clear out the connection pointer for this request that is now irrelevant.
        * NetworkProcess/NetworkRequest.h:
        (WebKit::NetworkRequest::create):
        (WebKit::NetworkRequest::identifier):
        (WebKit::NetworkRequest::connectionToWebProcess):

        Manages connection-per-host scheduling with the same structure as WebCore::ResourceLoadScheduling but also with IPC:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp: Added.
        (WebKit::NetworkResourceLoadScheduler::NetworkResourceLoadScheduler):
        (WebKit::NetworkResourceLoadScheduler::scheduleServePendingRequests):
        (WebKit::NetworkResourceLoadScheduler::requestTimerFired):
        (WebKit::NetworkResourceLoadScheduler::scheduleNetworkRequest):
        (WebKit::NetworkResourceLoadScheduler::addLoadInProgress):
        (WebKit::NetworkResourceLoadScheduler::hostForURL):
        (WebKit::NetworkResourceLoadScheduler::removeLoadIdentifier):
        (WebKit::NetworkResourceLoadScheduler::crossOriginRedirectReceived):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequests):
        (WebKit::NetworkResourceLoadScheduler::servePendingRequestsForHost): Serve as many requests for the host as we should,
          skipping the NetworkRequests who have lost their connection to their WebProcess.
        (WebKit::NetworkResourceLoadScheduler::suspendPendingRequests):
        (WebKit::NetworkResourceLoadScheduler::resumePendingRequests):
        * NetworkProcess/NetworkResourceLoadScheduler.h: Added.
        * NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm: Added.
        (WebKit::NetworkResourceLoadScheduler::platformInitializeMaximumHTTPConnectionCountPerHost):

        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::networkResourceLoadScheduler): Add a scheduler global to the NetworkProcess.

        A thin derivation of WebCore::ResourceLoadScheduler, most of what WebResourceLoadScheduler does is handle IPC to the NetworkProcess:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
        (WebKit::WebResourceLoadScheduler::scheduleSubresourceLoad):
        (WebKit::WebResourceLoadScheduler::schedulePluginStreamLoad):
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        (WebKit::WebResourceLoadScheduler::addMainResourceLoad):
        (WebKit::WebResourceLoadScheduler::remove):
        (WebKit::WebResourceLoadScheduler::crossOriginRedirectReceived):
        (WebKit::WebResourceLoadScheduler::servePendingRequests):
        (WebKit::WebResourceLoadScheduler::suspendPendingRequests):
        (WebKit::WebResourceLoadScheduler::resumePendingRequests):
        (WebKit::WebResourceLoadScheduler::setSerialLoadingEnabled):
        (WebKit::WebResourceLoadScheduler::startResourceLoad):
        * WebProcess/Network/WebResourceLoadScheduler.h:

        Add the ability for the NetworkProcess to message back to the WebProcess telling it to start a resource load:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        (WebKit::NetworkProcessConnection::startResourceLoad):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::resourceLoadScheduler): Only return the WebResourceLoadScheduler if NetworkProcess is enabled.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensureNetworkProcessConnection): Actually keep the NetworkProcessConnection around in a member variable.
        (WebKit::WebProcess::networkConnection):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::usesNetworkProcess): Expose this for platform strategies sake.

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

        Crash in WebProces at WebCore::ResourceLoadScheduler::crossOriginRedirectReceived + 78
        https://bugs.webkit.org/show_bug.cgi?id=100554

        Reviewed by Alexey Proskuryakov.

        For now, just have WebPlatformStrategies return the same default resourceLoadScheduler that
        WebCore knows about.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::resourceLoadScheduler):

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

        Crash when making NPRuntime calls with a null NPP pointer
        https://bugs.webkit.org/show_bug.cgi?id=100569
        <rdar://problem/11726426>
        <rdar://problem/12352836>

        Reviewed by Darin Adler.

        Finally bite the bullet and remove the assertion from NetscapePlugin::fromNPP. The WebKit1 equivalent of this
        function used to return the plug-in currently being initialized in NPP_New, but we've never done that in WebKit2
        and it has never been necessary. The crashes fixed here are not from calls underneath NPP_New so fixing it wouldn't
        do us any good anyway.
        
        Also, make the PluginDestructionProtector handle a null plug-in gracefully.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::PluginDestructionProtector::PluginDestructionProtector):
        (PluginDestructionProtector):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::fromNPP):

2012-10-26  Stephanie Lewis  <slewis@apple.com>

        Add pids to WebMemorySampleFiles.
        https://bugs.webkit.org/show_bug.cgi?id=100449.

        Reviewed by Tim Horton.

        Make it easier to associate WebMemorySamples with a process.  Add the pid to the filename and header.

        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::initializeTimers): Update notification.
        (WebKit::WebMemorySampler::stop): Update notification.
        (WebKit::WebMemorySampler::writeHeaders): dump pid in the header.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching): append pid to filename.

2012-10-26  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Build fix after r132647.
        https://bugs.webkit.org/show_bug.cgi?id=100540

        Reviewed by Kenneth Rohde Christiansen.

        AC enabled build is broken after the latest refactoring of EFL WK2.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::informLoadCommitted):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::exitAcceleratedCompositingMode):
        (EwkViewImpl::informContentsSizeChange):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        (EwkViewImpl::pageViewportControllerClient):
        (EwkViewImpl::pageViewportController):
        (EwkViewImpl::evasGl):
        (EwkViewImpl::evasGlContext):
        (EwkViewImpl::evasGlSurface):
        (EwkViewImpl::resetEvasGlSurface):
        * UIProcess/API/efl/ewk_view.cpp:
        (mapToWebContent):
        (_ewk_view_smart_calculate):

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Get rid of C'ism in text checker API
        https://bugs.webkit.org/show_bug.cgi?id=100513

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Text_Checker a C++ class and move the
        WebKitTextChecker code to this new class. This
        gets rid of the C'ism in the text checker code
        and make it consistent with other Ewk classes.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        * UIProcess/API/efl/ewk_settings.cpp:
        (spellCheckingLanguagesSetUpdate):
        (ewk_settings_continuous_spell_checking_enabled_set):
        (ewk_settings_spell_checking_available_languages_get):
        (ewk_settings_spell_checking_languages_get):
        * UIProcess/API/efl/ewk_text_checker.cpp:
        (ClientCallbacks):
        (textCheckerEnchant):
        (clientCallbacks):
        (isContinuousSpellCheckingEnabled):
        (setContinuousSpellCheckingEnabled):
        (uniqueSpellDocumentTag):
        (closeSpellDocumentWithTag):
        (checkSpellingOfString):
        (guessesForWord):
        (learnWord):
        (ignoreWord):
        (Ewk_Text_Checker):
        (Ewk_Text_Checker::availableSpellCheckingLanguages):
        (Ewk_Text_Checker::updateSpellCheckingLanguages):
        (Ewk_Text_Checker::loadedSpellCheckingLanguages):
        (Ewk_Text_Checker::initialize):
        * UIProcess/API/efl/ewk_text_checker_private.h:
        (Ewk_Text_Checker):
        * UIProcess/efl/WebKitTextChecker.cpp: Removed.
        * UIProcess/efl/WebKitTextChecker.h: Removed.

2012-10-26  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Clean up construction/destruction code in Ewk_view
        https://bugs.webkit.org/show_bug.cgi?id=100232

        Reviewed by Kenneth Rohde Christiansen.

        Simplified a lot of initialization and destruction code of Ewk_view and EwkViewImpl
        put all the impl stuff to its constructor and destructor, also made EwkViewImpl member
        variables private.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (pageViewMap):
        (EwkViewImpl::addToPageViewMap):
        (EwkViewImpl::removeFromPageViewMap):
        (EwkViewImpl::viewFromPageViewMap):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::wkPage):
        (EwkViewImpl::title):
        (EwkViewImpl::setThemePath):
        (EwkViewImpl::customTextEncodingName):
        (EwkViewImpl::setCustomTextEncodingName):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::informWebProcessCrashed):
        (EwkViewImpl::updateTextInputState):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::onFaviconChanged):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        (EwkViewImpl::view):
        (EwkViewImpl::page):
        (EwkViewImpl::ewkContext):
        (EwkViewImpl::backForwardList):
        * UIProcess/API/efl/ewk_settings.cpp:
        (Ewk_Settings::preferences):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_smart_add):
        (_ewk_view_smart_del):
        (_ewk_view_smart_calculate):
        (_ewk_view_smart_color_set):
        (createEwkViewSmartClass):
        (createEwkView):
        (ewk_view_base_add):
        (ewk_view_smart_add):
        (ewk_view_add_with_context):
        (ewk_view_url_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_back_forward_list_get):
        (ewk_view_html_string_load):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        (ewk_view_text_matches_count):
        (ewk_view_feed_touch_event):
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Initialize Ewk_Context class members in initialization list
        https://bugs.webkit.org/show_bug.cgi?id=100503

        Reviewed by Kenneth Rohde Christiansen.

        Move Ewk_Context class members initialization from the
        constructor body to the initialization list for
        efficiency.

        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):

2012-10-26  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        LayerTreeCoordinator: Make sure that dependent layers are deleted before their directly composited image
        https://bugs.webkit.org/show_bug.cgi?id=100495

        Reviewed by Kenneth Rohde Christiansen.

        Since r128980 layers removals are delayed until we flush the layer tree.
        This causes a crash if such a layer had a directly composited image since
        the image is now deleted while the layer is still active in the UI process
        and tries to access a deleted backing store.

        Fix it by delaying the directly composited image removal as well.

        Fixes a crash in tst_QQuickWebView::basicRenderingSanity since showWebView is
        called first and loads direct-image-compositing.html.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h: 
        (LayerTreeRenderer): Remove unused variable.
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-26  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Enable WebGL
        https://bugs.webkit.org/show_bug.cgi?id=97652

        Reviewed by Gyuyoung Kim.

        Set WebGLEnabled to true when WebGL is enabled.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_Color_Picker API
        https://bugs.webkit.org/show_bug.cgi?id=100472

        Reviewed by Kenneth Rohde Christiansen.

        Move the color picker code out of EwkViewImpl and into
        a new Ewk_Color_Picker class to avoid cluttering the
        view code.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::dismissColorPicker):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_color_picker.cpp: Added.
        (Ewk_Color_Picker::Ewk_Color_Picker):
        (Ewk_Color_Picker::setColor):
        (Ewk_Color_Picker::color):
        (ewk_color_picker_color_set):
        (ewk_color_picker_color_get):
        * UIProcess/API/efl/ewk_color_picker.h: Added.
        * UIProcess/API/efl/ewk_color_picker_private.h: Added.
        (Ewk_Color_Picker):
        (Ewk_Color_Picker::create):
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_color_picker.cpp: Added.
        (onColorPickerDone):
        (setColorPickerColor):
        (showColorPicker):
        (hideColorPicker):
        (hideColorPickerByRemovingElement):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::showColorPicker):

2012-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132601.
        http://trac.webkit.org/changeset/132601
        https://bugs.webkit.org/show_bug.cgi?id=100494

        It broke the Qt build (Requested by Ossy on #webkit).

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-26  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] Enable WebGL
        https://bugs.webkit.org/show_bug.cgi?id=97652

        Reviewed by Gyuyoung Kim.

        Set WebGLEnabled to true when WebGL is enabled.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add feature flags for CSS Device Adaptation
        https://bugs.webkit.org/show_bug.cgi?id=95960

        Reviewed by Kenneth Rohde Christiansen.

        * Configurations/FeatureDefines.xcconfig:

2012-10-26  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Move input method code out of EwkViewImpl
        https://bugs.webkit.org/show_bug.cgi?id=100468

        Reviewed by Kenneth Rohde Christiansen.

        Move input method code out of EwkViewImpl and into
        a new InputMethodContextEfl class to avoid cluttering
        the view code.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::inputMethodContext):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_key_down):
        * UIProcess/efl/InputMethodContextEfl.cpp: Added.
        (WebKit):
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::~InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::onIMFInputSequenceComplete):
        (WebKit::InputMethodContextEfl::onIMFPreeditSequenceChanged):
        (WebKit::InputMethodContextEfl::createIMFContext):
        (WebKit::InputMethodContextEfl::handleMouseUpEvent):
        (WebKit::InputMethodContextEfl::handleKeyDownEvent):
        (WebKit::InputMethodContextEfl::updateTextInputState):
        * UIProcess/efl/InputMethodContextEfl.h: Added.
        (WebKit):
        (InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::create):
        * UIProcess/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::updateTextInputState):

2012-10-26  Jaehun Lim  <ljaehun.lim@samsung.com>

        Implement {get,set}FloatValueForKey
        https://bugs.webkit.org/show_bug.cgi?id=100452

        Reviewed by Anders Carlsson.

        Implement missing functions in WebPreferencesStore.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::setFloatValueForKey):
        (WebKit):
        (WebKit::WebPreferencesStore::getFloatValueForKey):

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

        [WK2] Use per destination ID message receivers for DownloadProxy.
        https://bugs.webkit.org/show_bug.cgi?id=100342

        Reviewed by Anders Carlsson.

        Per destination ID message receivers were proposed in r132386.
        IPC messages of DownloadProxy use download ID for destination ID,
        so the messages should be handled by the messsage receiver that was
        newly proposed.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::createDownloadProxy):
        (WebKit::WebContext::downloadFinished):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit):
        (WebKit::WebContext::removeMessageReceiver):
        * UIProcess/WebContext.h:
        (WebContext):

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add Ewk_Popup_Menu API
        https://bugs.webkit.org/show_bug.cgi?id=100404

        Reviewed by Kenneth Rohde Christiansen.

        Add new Ewk_Popup_Menu API to complete the existing
        Ewk_Popup_Menu_Item one. This way, we can move the
        popup menu code out of Ewk_View.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::requestPopupMenu):
        (EwkViewImpl::closePopupMenu):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_popup_menu.cpp: Added.
        (Ewk_Popup_Menu::Ewk_Popup_Menu):
        (Ewk_Popup_Menu::~Ewk_Popup_Menu):
        (Ewk_Popup_Menu::close):
        (Ewk_Popup_Menu::items):
        (Ewk_Popup_Menu::selectedIndex):
        (Ewk_Popup_Menu::setSelectedIndex):
        (ewk_popup_menu_close):
        (ewk_popup_menu_selected_index_set):
        (ewk_popup_menu_selected_index_get):
        (ewk_popup_menu_items_get):
        * UIProcess/API/efl/ewk_popup_menu.h: Added.
        * UIProcess/API/efl/ewk_popup_menu_private.h: Copied from Source/WebKit2/UIProcess/efl/WebPopupMenuProxyEfl.cpp.
        (WebKit):
        (Ewk_Popup_Menu):
        (Ewk_Popup_Menu::create):
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_popup_menu.cpp: Added.
        (checkBasicPopupMenuItem):
        (selectItemAfterDelayed):
        (showPopupMenu):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp:
        (WebKit::WebPopupMenuProxyEfl::hidePopupMenu):

2012-10-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Close the IconDatabase before the WebContext gets destroyed
        https://bugs.webkit.org/show_bug.cgi?id=100389

        Reviewed by Alexis Menard.

        The WebContext normally gets destroyed 60 seconds after the last page is
        closed and will take down the WebIconDatabase with itself if nothing
        holds a reference to it at this moment.
        We need to close the IconDatabase explicitely before this happens
        to terminate it cleanly and avoid leaking its thread.

        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::~QtWebIconDatabaseClient):

2012-10-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        Conditionalize XHR timeout support
        https://bugs.webkit.org/show_bug.cgi?id=100356

        Reviewed by Adam Barth.

        Adding XHR_TIMEOUT feature to conditionalize this on ports without network backend support.
        Defaults to ON on Mac since the Mac NSUrlConnection based backend has setTimeoutInterval support.

        * Configurations/FeatureDefines.xcconfig:

2012-10-25  Tim Horton  <timothy_horton@apple.com>

        Only full-page PDFPlugins should purport to handle page scale changes
        https://bugs.webkit.org/show_bug.cgi?id=99635

        Reviewed by Sam Weinig.

        PDFPlugin should only handle page scale factor changes itself if it's in the main frame.
        Subframe PDFs will act like images, zooming with the page.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Move implementation of handlesPageScaleFactor() to PDFPlugin.mm.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Only copy PDFLayerController's default autoscale magnification to PluginView's
        notion of the current scale factor if we're supposed to be handling page scale factor changes.
        (WebKit::PDFPlugin::geometryDidChange): Only update PDFLayerController's magnification from the page scale factor
        if we're supposed to be handling page scale factor changes.
        (WebKit::PDFPlugin::handlesPageScaleFactor): We should only handle page scale factor changes if we're in the main frame.

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Move non-API classes out of UIProcess/API/efl
        https://bugs.webkit.org/show_bug.cgi?id=100391

        Reviewed by Kenneth Rohde Christiansen.

        Move non-API classes from UIProcess/API/efl to
        UIProcess/efl for clarity.

        * PlatformEfl.cmake:
        * UIProcess/efl/BatteryProvider.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/BatteryProvider.cpp.
        (toBatteryProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (BatteryProvider::~BatteryProvider):
        (BatteryProvider::create):
        (BatteryProvider::BatteryProvider):
        (BatteryProvider::startUpdating):
        (BatteryProvider::stopUpdating):
        (BatteryProvider::didChangeBatteryStatus):
        * UIProcess/efl/BatteryProvider.h: Renamed from Source/WebKit2/UIProcess/API/efl/BatteryProvider.h.
        (WebKit):
        (BatteryProvider):
        * UIProcess/efl/NetworkInfoProvider.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.cpp.
        (toNetworkInfoProvider):
        (startUpdatingCallback):
        (stopUpdatingCallback):
        (getBandwidthCallback):
        (isMeteredCallback):
        (NetworkInfoProvider::create):
        (NetworkInfoProvider::NetworkInfoProvider):
        (NetworkInfoProvider::~NetworkInfoProvider):
        (NetworkInfoProvider::bandwidth):
        (NetworkInfoProvider::metered):
        (NetworkInfoProvider::startUpdating):
        (NetworkInfoProvider::stopUpdating):
        * UIProcess/efl/NetworkInfoProvider.h: Renamed from Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.h.
        (WebKit):
        (NetworkInfoProvider):
        * UIProcess/efl/PageClientImpl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp.
        (WebKit):
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::~PageClientImpl):
        (WebKit::PageClientImpl::viewImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::displayView):
        (WebKit::PageClientImpl::scrollView):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::pageClosed):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::setCursorHiddenUntilMouseMoves):
        (WebKit::PageClientImpl::didChangeViewportProperties):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):
        (WebKit::PageClientImpl::convertToDeviceSpace):
        (WebKit::PageClientImpl::convertToUserSpace):
        (WebKit::PageClientImpl::screenToWindow):
        (WebKit::PageClientImpl::windowToScreen):
        (WebKit::PageClientImpl::doneWithKeyEvent):
        (WebKit::PageClientImpl::doneWithTouchEvent):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::createContextMenuProxy):
        (WebKit::PageClientImpl::createColorChooserProxy):
        (WebKit::PageClientImpl::setFindIndicator):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode):
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation):
        (WebKit::PageClientImpl::customRepresentationZoomFactor):
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor):
        (WebKit::PageClientImpl::flashBackingStoreUpdates):
        (WebKit::PageClientImpl::findStringInCustomRepresentation):
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation):
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit::PageClientImpl::pageDidRequestScroll):
        (WebKit::PageClientImpl::didChangeContentsSize):
        (WebKit::PageClientImpl::didRenderFrame):
        (WebKit::PageClientImpl::pageTransitionViewportReady):
        * UIProcess/efl/PageClientImpl.h: Renamed from Source/WebKit2/UIProcess/API/efl/PageClientImpl.h.
        (WebKit):
        (PageClientImpl):
        (WebKit::PageClientImpl::create):
        (WebKit::PageClientImpl::setPageViewportController):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/PageViewportControllerClientEfl.cpp.
        (WebKit):
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::~PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::setRendererActive):
        (WebKit::PageViewportControllerClientEfl::display):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientEfl::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/efl/PageViewportControllerClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/PageViewportControllerClientEfl.h.
        (WebKit):
        (PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::create):
        (WebKit::PageViewportControllerClientEfl::viewSize):
        (WebKit::PageViewportControllerClientEfl::scaleFactor):
        (WebKit::PageViewportControllerClientEfl::scrollPosition):
        * UIProcess/efl/VibrationProvider.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/VibrationProvider.cpp.
        (Ewk_Vibration_Client):
        (Ewk_Vibration_Client::Ewk_Vibration_Client):
        (toVibrationProvider):
        (vibrateCallback):
        (cancelVibrationCallback):
        (VibrationProvider::create):
        (VibrationProvider::VibrationProvider):
        (VibrationProvider::~VibrationProvider):
        (VibrationProvider::vibrate):
        (VibrationProvider::cancelVibration):
        (VibrationProvider::setVibrationClientCallbacks):
        * UIProcess/efl/VibrationProvider.h: Renamed from Source/WebKit2/UIProcess/API/efl/VibrationProvider.h.
        (WebKit):
        (VibrationProvider):
        * UIProcess/efl/WebKitTextChecker.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.cpp.
        (WebKit):
        (WebKit::isContinuousSpellCheckingEnabled):
        (WebKit::setContinuousSpellCheckingEnabled):
        (WebKit::uniqueSpellDocumentTag):
        (WebKit::closeSpellDocumentWithTag):
        (WebKit::checkSpellingOfString):
        (WebKit::guessesForWord):
        (WebKit::learnWord):
        (WebKit::ignoreWord):
        (WebKit::availableSpellCheckingLanguages):
        (WebKit::updateSpellCheckingLanguages):
        (WebKit::loadedSpellCheckingLanguages):
        * UIProcess/efl/WebKitTextChecker.h: Renamed from Source/WebKit2/UIProcess/API/efl/WebKitTextChecker.h.
        (WebKit):

2012-10-25  Brady Eidson  <beidson@apple.com>

        Allow LoaderStrategy to override the ResourceLoadScheduler
        https://bugs.webkit.org/show_bug.cgi?id=100355

        Reviewed by Anders Carlsson.

        Add a WebKit2 subclass of ResourceLoadScheduler that currently adds no new functionality:
        * WebProcess/Network/WebResourceLoadScheduler.cpp: 
        (WebKit::WebResourceLoadScheduler::~WebResourceLoadScheduler):
        * WebProcess/Network/WebResourceLoadScheduler.h: 

        WebProcess hangs on to the default shared WebResourceLoadScheduler:
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::webResourceLoadScheduler):

        If the NetworkProcess is enabled, return the new WebResourceLoadScheduler:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::resourceLoadScheduler):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

        * WebKit2.xcodeproj/project.pbxproj:

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Remove some C'ism from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=100370

        Reviewed by Kenneth Rohde Christiansen.

        Remove a lot of C'ism from EwkView:
        - Make more members private and add C++ methods to
        EwkViewImpl for the public C API to use
        - Use smart pointers when possible instead of raw
        ones
        - Use C++ naming conventions for callback functions
        and define them as static methods in EwkViewImpl.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::onIMFInputSequenceComplete):
        (EwkViewImpl::onIMFPreeditSequenceChanged):
        (EwkViewImpl::createIMFContext):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        (EwkViewImpl::setCursor):
        (EwkViewImpl::setColorPickerColor):
        (EwkViewImpl::isFocused):
        (EwkViewImpl::isVisible):
        (EwkViewImpl::title):
        (EwkViewImpl::inputMethodContext):
        (EwkViewImpl::themePath):
        (EwkViewImpl::setThemePath):
        (EwkViewImpl::customTextEncodingName):
        (EwkViewImpl::setCustomTextEncodingName):
        (EwkViewImpl::setMouseEventsEnabled):
        (EwkViewImpl::setTouchEventsEnabled):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::dismissColorPicker):
        (EwkViewImpl::updateTextInputState):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::onMouseDown):
        (EwkViewImpl::onMouseUp):
        (EwkViewImpl::onMouseMove):
        (EwkViewImpl::feedTouchEvents):
        (EwkViewImpl::onTouchDown):
        (EwkViewImpl::onTouchUp):
        (EwkViewImpl::onTouchMove):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl::ewkContext):
        (EwkViewImpl::settings):
        (EwkViewImpl):
        (EwkViewImpl::url):
        (EwkViewImpl::faviconURL):
        (EwkViewImpl::mouseEventsEnabled):
        (EwkViewImpl::touchEventsEnabled):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_settings_private.h:
        (Ewk_Settings::create):
        (Ewk_Settings::Ewk_Settings):
        (Ewk_Settings):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_add):
        (ewk_view_context_get):
        (ewk_view_url_get):
        (ewk_view_icon_url_get):
        (ewk_view_settings_get):
        (ewk_view_title_get):
        (ewk_view_theme_set):
        (ewk_view_theme_get):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        (ewk_view_mouse_events_enabled_set):
        (ewk_view_mouse_events_enabled_get):
        (ewk_view_color_picker_color_set):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2012-10-25  Anders Carlsson  <andersca@apple.com>

        Assertion failure trying to dispatch notification messages
        https://bugs.webkit.org/show_bug.cgi?id=100387
        <rdar://problem/12573195>

        Reviewed by Jessie Berlin.

        Pass a zero destination ID when sending WebNotificationManagerProxy messages; they are not
        used by the UI process and since the WebNotificationManagerProxy message receiver is global
        passing a non-zero destination ID would cause the aforementioned assertion failure.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::cancel):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::didDestroyNotification):

2012-10-25  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r131686): Crashes in NSToolTipManager
        https://bugs.webkit.org/show_bug.cgi?id=99792

        Now that NSToolTip related parts of this change have been rolled out, roll out
        the initial crash fix, too. We have no direct evidence that it's to blame, but it
        doesn't serve any specific purpose any more.

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

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Memory leak in _ewk_view_preedit_changed()
        https://bugs.webkit.org/show_bug.cgi?id=100380

        Reviewed by Antonio Gomes.

        Fix memory leak in _ewk_view_preedit_changed(). The buffer
        returned by ecore_imf_context_preedit_string_get() is never
        freed.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (_ewk_view_preedit_changed):

2012-10-25  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Regression(132392) infinite loop when displaying certain animations.
        https://bugs.webkit.org/show_bug.cgi?id=100288

        Reviewed by Kenneth Rohde Christiansen.

        When PageClientImpl::setViewNeedsDisplay is called, start a 0 length timer.
        That breaks the synchronous loop we were experiencing when ewk_view_display
        was called directly.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::displayTimerFired):
        (EwkViewImpl::redrawRegion):
        * UIProcess/API/efl/EwkViewImpl.h:
        (EwkViewImpl):

2012-10-25  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Add setMediaTypeOverride to window.internals.settings
        https://bugs.webkit.org/show_bug.cgi?id=100249

        Reviewed by Kenneth Rohde Christiansen.

        Exported WebCore::Settings::setMediaTypeOverride(WTF::String const&) for WIN port.

        * win/WebKit2.def:

2012-10-25  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][EFL] Add ewk_view_pagination_mode_set/get() APIs
        https://bugs.webkit.org/show_bug.cgi?id=100213

        Reviewed by Gyuyoung Kim.

        Add ewk_view_pagination_mode_set/get() APIs for paginated display.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_pagination_mode_set):
        (ewk_view_pagination_mode_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-10-25  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][AC] Fix build break when AC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=100367

        Unreviewed build fix after r132405.

        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):

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

        [EFL][WK2] Add missing namespace.
        https://bugs.webkit.org/show_bug.cgi?id=100251

        Reviewed by Kenneth Rohde Christiansen.

        Add 'WebKit' namespace for BatteryProvider, NetworkInfoProvider and
        VibrationProvider.

        * UIProcess/API/efl/BatteryProvider.h:
        (WebKit):
        * UIProcess/API/efl/NetworkInfoProvider.cpp:
        * UIProcess/API/efl/NetworkInfoProvider.h:
        (WebKit):
        * UIProcess/API/efl/VibrationProvider.cpp:
        * UIProcess/API/efl/VibrationProvider.h:
        (WebKit):
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (Ewk_Context):

2012-10-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Detach WebContext's clients from QtWebContext
        https://bugs.webkit.org/show_bug.cgi?id=100224

        Reviewed by Simon Hausmann.

        The lifetime of WebContext isn't bound to QtWebContext and we wouldn't
        keep a reference to our WebContext and would create a new one if a new
        QQuickWebView/QtWebContext was created after we destroyed our QtWebContext.
        This would cause a new WebContext and a new web process and somehow the
        new WebContext could pick the IPC messages from the old WebProcess
        and this would cause the new download client to receive messages about
        downloads he doesn't know about and crash.

        We assumed in the past that we would need multiple WebContext to allow
        multiple web processes but this assumption doesn't hold anymore with
        the work on ProcessModelMultipleSecondaryProcesses.
        This patch enforces the use of a single WebContext by:
        - Holding a single instance of QtWebIconDatabaseClient and QtDownloadManager
        statically in QtWebContext
        - Removing the context ID from QWebIconImageProvider's URLs
        - Using QtWebContext as a temporary wrapper handle on WebContext to
        initialize the WebContext's clients and allow us creating the first web page

        platformInvalidateContext is used to clean up static global instances
        when the WebContext is getting destroyed.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::handleDownloadRequest):
        * UIProcess/API/qt/qwebiconimageprovider.cpp:
        (QWebIconImageProvider::iconURLForPageURLInContext):
        (QWebIconImageProvider::requestImage):
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit):
        (WebKit::QtWebContext::QtWebContext):
        (WebKit::QtWebContext::~QtWebContext):
        (WebKit::QtWebContext::create):
        (WebKit::QtWebContext::defaultContext):
        (WebKit::QtWebContext::downloadManager):
        (WebKit::QtWebContext::iconDatabase):
        (WebKit::QtWebContext::invalidateContext):
        * UIProcess/qt/QtWebContext.h:
        (QtWebContext):
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::QtWebIconDatabaseClient):
        * UIProcess/qt/QtWebIconDatabaseClient.h:
        (WebKit):
        (QtWebIconDatabaseClient):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInvalidateContext):

2012-10-25  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Make the context injected bundle client static
        https://bugs.webkit.org/show_bug.cgi?id=100223

        Reviewed by Kenneth Rohde Christiansen.

        It doesn't need any data from QtWebContext.

        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::didReceiveMessageFromInjectedBundle):
        (WebKit):
        (WebKit::initializeContextInjectedBundleClient):
        (WebKit::QtWebContext::defaultContext):
        * UIProcess/qt/QtWebContext.h:
        (QtWebContext):

2012-10-25  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Get rid of Ewk_View private C API (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=100331

        Reviewed by Kenneth Rohde Christiansen.

        Convert most of the remaining Ewk_View private C API
        into C++ methods in EwkViewImpl class. Only one private
        C function remains but it will be taken care of in a
        later patch to clean up the view construction code.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::addToPageViewMap):
        (EwkViewImpl::removeFromPageViewMap):
        (EwkViewImpl::viewFromPageViewMap):
        (EwkViewImpl::fromEvasObject):
        (EwkViewImpl::informLoadFinished):
        (EwkViewImpl::informProvisionalLoadRedirect):
        (EwkViewImpl::informProvisionalLoadStarted):
        (EwkViewImpl::informWebProcessCrashed):
        (EwkViewImpl::informContentsSizeChange):
        (EwkViewImpl::requestPopupMenu):
        (EwkViewImpl::requestJSAlertPopup):
        (EwkViewImpl::requestJSConfirmPopup):
        (EwkViewImpl::requestJSPromptPopup):
        (EwkViewImpl::informDatabaseQuotaReached):
        (EwkViewImpl::updateTextInputState):
        (EwkViewImpl::informURLChange):
        (EwkViewImpl::createNewPage):
        (EwkViewImpl::closePage):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::didChangeContentsSize):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_del):
        (_ewk_view_initialize):
        (ewk_view_url_set):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_html_string_load):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/efl/ContextHistoryClientEfl.cpp:
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        (WebKit::ContextHistoryClientEfl::didPerformClientRedirect):
        (WebKit::ContextHistoryClientEfl::didPerformServerRedirect):
        (WebKit::ContextHistoryClientEfl::didUpdateHistoryTitle):
        * UIProcess/efl/FindClientEfl.cpp:
        * UIProcess/efl/FormClientEfl.cpp:
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        * UIProcess/efl/PageLoadClientEfl.h:
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        * UIProcess/efl/PagePolicyClientEfl.h:
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::closePage):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        * UIProcess/efl/PageUIClientEfl.h:
        * UIProcess/efl/ResourceLoadClientEfl.h:
        * UIProcess/efl/WebPopupMenuProxyEfl.cpp:
        (WebKit::WebPopupMenuProxyEfl::WebPopupMenuProxyEfl):
        (WebKit::WebPopupMenuProxyEfl::showPopupMenu):
        (WebKit::WebPopupMenuProxyEfl::hidePopupMenu):
        * UIProcess/efl/WebPopupMenuProxyEfl.h:
        (WebKit::WebPopupMenuProxyEfl::create):
        (WebPopupMenuProxyEfl):

2012-10-24  Joone Hur  <joone.hur@intel.com>

        [EFL][AC] Unreviewed, fix build break when AC is enabled

        Fix build break after r132405.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::enterAcceleratedCompositingMode):
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

2012-10-24  Anders Carlsson  <andersca@apple.com>

        Make it a compile error to send a sync message as async (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=100285

        Reviewed by Sam Weinig.

        Add an "isSync" boolean to each generated message struct and add compile asserts to the message senders.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendSync):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        * Scripts/webkit2/messages_unittest.py:
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::send):
        (WebKit::WebProcessProxy::sendSync):

2012-10-24  Kiran Muppala  <cmuppala@apple.com>

        Disable auto termination of WebKit2 processes on mac
        https://bugs.webkit.org/show_bug.cgi?id=100176

        Reviewed by Alexey Proskuryakov.

        Disable WebKit2 auto termination by taking corresponding assertion
        until UI process is enhanced to determine when it is safe to enable it.

        * NetworkProcess/mac/NetworkProcessMainMac.mm:
        (WebKit::NetworkProcessMain):
        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain):
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        (WebKit::SharedWorkerProcessMain):
        * WebProcess/mac/WebProcessInitialization.mm:
        (WebKit::InitializeWebProcess):

2012-10-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Get rid of Ewk_View private C API (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=100230

        Reviewed by Kenneth Rohde Christiansen.

        Remove part of the Ewk_View private C API and replace
        it by C++ methods in EwkViewImpl class. Eventually,
        all the private C functions will be removed but it
        will be done in several patches.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewGetPage):
        * UIProcess/API/efl/EwkViewImpl.cpp:
        (_ewk_view_commit):
        (_ewk_view_preedit_changed):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::smartData):
        (EwkViewImpl::fromEvasObject):
        (EwkViewImpl::wkPage):
        (EwkViewImpl::setCursor):
        (EwkViewImpl::redrawRegion):
        (EwkViewImpl::informDownloadJobCancelled):
        (EwkViewImpl::informDownloadJobFailed):
        (EwkViewImpl::informDownloadJobFinished):
        (EwkViewImpl::informDownloadJobRequested):
        (EwkViewImpl::informNewFormSubmissionRequest):
        (EwkViewImpl::enterFullScreen):
        (EwkViewImpl::exitFullScreen):
        (EwkViewImpl::setImageData):
        (EwkViewImpl::informLoadError):
        (EwkViewImpl::informLoadFinished):
        (EwkViewImpl::informLoadProgress):
        (EwkViewImpl::informProvisionalLoadFailed):
        (EwkViewImpl::informLoadCommitted):
        (EwkViewImpl::informProvisionalLoadRedirect):
        (EwkViewImpl::informProvisionalLoadStarted):
        (EwkViewImpl::informNavigationPolicyDecision):
        (EwkViewImpl::informNewWindowPolicyDecision):
        (EwkViewImpl::informResourceLoadStarted):
        (EwkViewImpl::informResourceLoadResponse):
        (EwkViewImpl::informResourceLoadFailed):
        (EwkViewImpl::informResourceLoadFinished):
        (EwkViewImpl::informResourceRequestSent):
        (EwkViewImpl::informTitleChange):
        (EwkViewImpl::informTooltipTextChange):
        (EwkViewImpl::informTextFound):
        (EwkViewImpl::size):
        (EwkViewImpl::informIconChange):
        (EwkViewImpl::informIntentRequest):
        (EwkViewImpl::informIntentServiceRegistration):
        (EwkViewImpl::createGLSurface):
        (EwkViewImpl::enterAcceleratedCompositingMode):
        (EwkViewImpl::exitAcceleratedCompositingMode):
        (EwkViewImpl::requestColorPicker):
        (EwkViewImpl::dismissColorPicker):
        (EwkViewImpl::informBackForwardListChange):
        * UIProcess/API/efl/EwkViewImpl.h:
        (WebCore):
        (EwkViewImpl):
        (EwkViewImpl::view):
        (EwkViewImpl::page):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::viewImpl):
        (WebKit):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::setViewNeedsDisplay):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::processDidCrash):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::toolTipChanged):
        (WebKit::PageClientImpl::setCursor):
        (WebKit::PageClientImpl::createPopupMenuProxy):
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode):
        (WebKit::PageClientImpl::updateTextInputState):
        (WebKit::PageClientImpl::handleDownloadRequest):
        (WebKit::PageClientImpl::didChangeContentsSize):
        * UIProcess/API/efl/PageClientImpl.h:
        (WebKit::PageClientImpl::create):
        (PageClientImpl):
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/API/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::create):
        (PageViewportControllerClientEfl):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::Ewk_Download_Job):
        (Ewk_Download_Job::viewImpl):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job::create):
        (Ewk_Download_Job):
        * UIProcess/API/efl/ewk_view.cpp:
        (pageViewMap):
        (addToPageViewMap):
        (removeFromPageViewMap):
        (_ewk_view_on_favicon_changed):
        (_ewk_view_smart_focus_in):
        (_ewk_view_smart_focus_out):
        (mapToWebContent):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_smart_key_down):
        (_ewk_view_smart_key_up):
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_impl_del):
        (_ewk_view_smart_del):
        (_ewk_view_smart_calculate):
        (_ewk_view_smart_color_set):
        (_ewk_view_initialize):
        (_ewk_view_add_with_smart):
        (ewk_view_context_get):
        (ewk_view_url_update):
        (ewk_view_url_set):
        (ewk_view_url_get):
        (ewk_view_icon_url_get):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_stop):
        (ewk_view_settings_get):
        (ewk_view_title_get):
        (ewk_view_text_input_state_update):
        (ewk_view_load_progress_get):
        (ewk_view_scale_set):
        (ewk_view_scale_get):
        (ewk_view_device_pixel_ratio_set):
        (ewk_view_device_pixel_ratio_get):
        (ewk_view_theme_set):
        (ewk_view_theme_get):
        (ewk_view_back):
        (ewk_view_forward):
        (ewk_view_intent_deliver):
        (ewk_view_back_possible):
        (ewk_view_forward_possible):
        (ewk_view_back_forward_list_get):
        (ewk_view_html_string_load):
        (ewk_view_setting_encoding_custom_get):
        (ewk_view_setting_encoding_custom_set):
        (ewk_view_page_create):
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):
        (ewk_view_text_matches_count):
        (ewk_view_contents_size_changed):
        (ewk_view_popup_menu_request):
        (ewk_view_popup_menu_close):
        (ewk_view_popup_menu_select):
        (ewk_view_mouse_events_enabled_set):
        (ewk_view_mouse_events_enabled_get):
        (ewk_view_webprocess_crashed):
        (ewk_view_color_picker_color_set):
        (ewk_view_feed_touch_event):
        (ewk_view_touch_events_enabled_set):
        (ewk_view_touch_events_enabled_get):
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::registerDownload):
        * UIProcess/efl/DownloadManagerEfl.h:
        (DownloadManagerEfl):
        * UIProcess/efl/FindClientEfl.cpp:
        (WebKit::FindClientEfl::didFindString):
        (WebKit::FindClientEfl::didFailToFindString):
        (WebKit::FindClientEfl::FindClientEfl):
        * UIProcess/efl/FindClientEfl.h:
        (WebKit::FindClientEfl::create):
        (FindClientEfl):
        * UIProcess/efl/FormClientEfl.cpp:
        (WebKit::FormClientEfl::willSubmitForm):
        (WebKit::FormClientEfl::FormClientEfl):
        * UIProcess/efl/FormClientEfl.h:
        (WebKit::FormClientEfl::create):
        (FormClientEfl):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didReceiveTitleForFrame):
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didChangeProgress):
        (WebKit::PageLoadClientEfl::didFinishLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didStartProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (WebKit::PageLoadClientEfl::create):
        (PageLoadClientEfl):
        (WebKit::PageLoadClientEfl::viewImpl):
        * UIProcess/efl/PagePolicyClientEfl.cpp:
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        (WebKit::PagePolicyClientEfl::PagePolicyClientEfl):
        * UIProcess/efl/PagePolicyClientEfl.h:
        (WebKit::PagePolicyClientEfl::create):
        (PagePolicyClientEfl):
        * UIProcess/efl/PageUIClientEfl.cpp:
        (WebKit::PageUIClientEfl::closePage):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::showColorPicker):
        (WebKit::PageUIClientEfl::hideColorPicker):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        * UIProcess/efl/PageUIClientEfl.h:
        (WebKit::PageUIClientEfl::create):
        (PageUIClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.cpp:
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):
        (WebKit::ResourceLoadClientEfl::didFinishLoadForResource):
        (WebKit::ResourceLoadClientEfl::didFailLoadForResource):
        (WebKit::ResourceLoadClientEfl::ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::~ResourceLoadClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.h:
        (WebKit::ResourceLoadClientEfl::create):
        (ResourceLoadClientEfl):
        * UIProcess/efl/WebFullScreenManagerProxyEfl.cpp:
        (WebKit::WebFullScreenManagerProxy::enterFullScreen):
        (WebKit::WebFullScreenManagerProxy::exitFullScreen):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::viewWidget):

2012-10-24  Brady Eidson  <beidson@apple.com>

        Add a strategy for loader customization.
        https://bugs.webkit.org/show_bug.cgi?id=100278

        Reviewed by Alexey Proskuryakov.

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

2012-10-24  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Reviewed by Caio Marcelo de Oliveira Filho.

        In some cases there are pending changes in the layers, but no actual changes to the frame.
        In that case we should unlock the animations.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):

2012-10-24  Noam Rosenthal  <noam.rosenthal@nokia.com>

        [Qt-on-Mac] GraphicsSurfaces should not create a global IOSurface handle
        https://bugs.webkit.org/show_bug.cgi?id=89885

        Reviewed by Kenneth Rohde Christiansen.

        Use mach_port instead of global tokens for IOSurfaces.
        Global IOSurfaces are accessible from other processes, while mach_ports can only be shared
        directly via IPC.

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

2012-10-24  Anders Carlsson  <andersca@apple.com>

        Add per destination ID message receivers
        https://bugs.webkit.org/show_bug.cgi?id=100276

        Reviewed by Andreas Kling.

        Extend MessageReceiverMap to handle adding message receivers for a given destinationID/receiver name pair.
        Use this to make every WebPage object a message receiver.

        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC):
        (CoreIPC::MessageReceiverMap::removeMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addMessageReceiver):
        (WebKit):
        (WebKit::WebProcess::removeMessageReceiver):
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-10-24  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector WKView/WebView become the first responder when bringToFront is called.

        https://bugs.webkit.org/show_bug.cgi?id=100209

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformBringToFront): Make the Inspector WKView become the first responder.

2012-10-23  Alexey Proskuryakov  <ap@apple.com>

        Add a strategy for shared workers
        https://bugs.webkit.org/show_bug.cgi?id=100165

        Reviewed by Brady Eidson.

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

2012-10-23  Sam Weinig  <sam@webkit.org>

        Move a few more WebProcess sub-objects to be MessageReceivers
        https://bugs.webkit.org/show_bug.cgi?id=100186

        Reviewed by Anders Carlsson.

        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::WebBatteryManager):
        * WebProcess/Battery/WebBatteryManager.h:
        (WebBatteryManager):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::WebIconDatabaseProxy):
        (WebKit):
        * WebProcess/IconDatabase/WebIconDatabaseProxy.h:
        (WebIconDatabaseProxy):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp:
        (WebKit::WebNetworkInfoManager::WebNetworkInfoManager):
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h:
        (WebNetworkInfoManager):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::WebNotificationManager):
        * WebProcess/Notifications/WebNotificationManager.h:
        (WebNotificationManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::WebSoupRequestManager):
        * WebProcess/soup/WebSoupRequestManager.h:
        (WebSoupRequestManager):

2012-10-23  Anders Carlsson  <andersca@apple.com>

        encode should take an ArgumentEncoder reference
        https://bugs.webkit.org/show_bug.cgi?id=100183

        Reviewed by Jessie Berlin.

        * Platform/CoreIPC/ArgumentCoder.h:
        (CoreIPC::ArgumentCoder::encode):
        * Platform/CoreIPC/Arguments.h:
        (CoreIPC::Arguments0::encode):
        (CoreIPC::Arguments1::encode):
        (CoreIPC::Arguments2::encode):
        (CoreIPC::Arguments3::encode):
        (CoreIPC::Arguments4::encode):
        (CoreIPC::Arguments5::encode):
        (CoreIPC::Arguments6::encode):
        (CoreIPC::Arguments7::encode):
        (CoreIPC::Arguments8::encode):
        (CoreIPC::Arguments10::encode):
        * Platform/CoreIPC/Attachment.cpp:
        (CoreIPC::Attachment::encode):
        * Platform/CoreIPC/Attachment.h:
        (Attachment):
        * Platform/CoreIPC/DataReference.cpp:
        (CoreIPC::DataReference::encode):
        * Platform/CoreIPC/DataReference.h:
        (DataReference):
        * Platform/CoreIPC/StringReference.cpp:
        (CoreIPC::StringReference::encode):
        * Platform/CoreIPC/StringReference.h:
        (StringReference):
        * Platform/CoreIPC/mac/MachPort.h:
        (CoreIPC::MachPort::encode):
        * Platform/SharedMemory.h:
        (Handle):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * PluginProcess/PluginCreationParameters.cpp:
        (WebKit::PluginCreationParameters::encode):
        * PluginProcess/PluginCreationParameters.h:
        (PluginCreationParameters):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        * Shared/DictionaryPopupInfo.h:
        (DictionaryPopupInfo):
        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        * Shared/EditorState.h:
        (EditorState):
        * Shared/FontInfo.cpp:
        (WebKit::FontInfo::encode):
        * Shared/FontInfo.h:
        (FontInfo):
        * Shared/LayerTreeContext.h:
        (LayerTreeContext):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (NetworkProcessCreationParameters):
        * Shared/OriginAndDatabases.cpp:
        (WebKit::OriginAndDatabases::encode):
        * Shared/OriginAndDatabases.h:
        (OriginAndDatabases):
        * Shared/PlatformPopupMenuData.cpp:
        (WebKit::PlatformPopupMenuData::encode):
        * Shared/PlatformPopupMenuData.h:
        (PlatformPopupMenuData):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        * Shared/Plugins/NPIdentifierData.h:
        (NPIdentifierData):
        * Shared/Plugins/NPVariantData.cpp:
        (WebKit::NPVariantData::encode):
        * Shared/Plugins/NPVariantData.h:
        (NPVariantData):
        * Shared/Plugins/PluginProcessCreationParameters.cpp:
        (WebKit::PluginProcessCreationParameters::encode):
        * Shared/Plugins/PluginProcessCreationParameters.h:
        (PluginProcessCreationParameters):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        * Shared/PrintInfo.h:
        (PrintInfo):
        * Shared/SandboxExtension.h:
        (Handle):
        (HandleArray):
        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::encode):
        * Shared/SecurityOriginData.h:
        (SecurityOriginData):
        * Shared/SessionState.cpp:
        (WebKit::SessionState::encode):
        * Shared/SessionState.h:
        (SessionState):
        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::encode):
        * Shared/ShareableBitmap.h:
        (Handle):
        * Shared/SharedWorkerProcessCreationParameters.cpp:
        (WebKit::SharedWorkerProcessCreationParameters::encode):
        * Shared/SharedWorkerProcessCreationParameters.h:
        (SharedWorkerProcessCreationParameters):
        * Shared/StatisticsData.cpp:
        (WebKit::StatisticsData::encode):
        * Shared/StatisticsData.h:
        (StatisticsData):
        * Shared/StringPairVector.h:
        (WebKit::StringPairVector::encode):
        * Shared/UpdateInfo.cpp:
        (WebKit::UpdateInfo::encode):
        * Shared/UpdateInfo.h:
        (UpdateInfo):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode):
        * Shared/WebContextMenuItemData.h:
        (WebContextMenuItemData):
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        * Shared/WebEvent.h:
        (WebEvent):
        (WebMouseEvent):
        (WebWheelEvent):
        (WebKeyboardEvent):
        (WebGestureEvent):
        (WebPlatformTouchPoint):
        (WebTouchEvent):
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::encode):
        * Shared/WebGeolocationPosition.h:
        (Data):
        * Shared/WebGestureEvent.cpp:
        (WebKit::WebGestureEvent::encode):
        * Shared/WebHitTestResult.cpp:
        (WebKit::WebHitTestResult::Data::encode):
        * Shared/WebHitTestResult.h:
        (Data):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::encode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        * Shared/WebNavigationDataStore.h:
        (WebKit::WebNavigationDataStore::encode):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        * Shared/WebPageGroupData.h:
        (WebPageGroupData):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode):
        * Shared/WebPopupItem.h:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode):
        * Shared/WebPreferencesStore.h:
        (WebPreferencesStore):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * Shared/WebWheelEvent.cpp:
        (WebKit::WebWheelEvent::encode):
        * Shared/mac/AttributedString.h:
        (AttributedString):
        * Shared/mac/AttributedString.mm:
        (WebKit::AttributedString::encode):
        * Shared/mac/ColorSpaceData.h:
        (ColorSpaceData):
        * Shared/mac/ColorSpaceData.mm:
        (WebKit::ColorSpaceData::encode):
        * Shared/mac/LayerTreeContextMac.mm:
        (WebKit::LayerTreeContext::encode):
        * Shared/mac/PlatformCertificateInfo.h:
        (PlatformCertificateInfo):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::Handle::encode):
        (WebKit::SandboxExtension::HandleArray::encode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode):
        * Shared/mac/SecItemRequestData.h:
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode):
        * Shared/mac/SecItemResponseData.h:
        (SecItemResponseData):
        * Shared/mac/SecKeychainItemRequestData.cpp:
        (WebKit::SecKeychainItemRequestData::encode):
        * Shared/mac/SecKeychainItemRequestData.h:
        * Shared/mac/SecKeychainItemResponseData.cpp:
        (WebKit::SecKeychainItemResponseData::encode):
        * Shared/mac/SecKeychainItemResponseData.h:
        (SecKeychainItemResponseData):
        * UIProcess/WebContextUserMessageCoders.h:
        (WebKit::WebContextUserMessageEncoder::encode):
        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
        (WebKit::InjectedBundleUserMessageEncoder::encode):
        * WebProcess/Plugins/Plugin.cpp:
        (WebKit::Plugin::Parameters::encode):
        * WebProcess/Plugins/Plugin.h:
        (Parameters):

2012-10-24  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Move the QQuickWebViewExperimental pointer to QQuickWebViewPrivate
        https://bugs.webkit.org/show_bug.cgi?id=100253

        Reviewed by Kenneth Rohde Christiansen.

        We'll need to avoid placing data in QQuickWebView to preserve
        its binary compatibility once it's public.
        Also make the QQuickWebViewExperimental constructor private.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewExperimental::QQuickWebViewExperimental):
        (QQuickWebView::QQuickWebView):
        (QQuickWebView::experimental):
        * UIProcess/API/qt/qquickwebview_p.h:
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):

2012-10-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Ewk_Settings refactoring
        https://bugs.webkit.org/show_bug.cgi?id=100233

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Settings private implementation is now C++ class which allows direct internal
        access to WebKit::WebPreferences.

        * UIProcess/API/efl/EwkViewImpl.cpp:
        (EwkViewImpl::EwkViewImpl):
        * UIProcess/API/efl/ewk_settings.cpp:
        (Ewk_Settings::preferences):
        (ewk_settings_fullscreen_enabled_set):
        (ewk_settings_fullscreen_enabled_get):
        (ewk_settings_javascript_enabled_set):
        (ewk_settings_javascript_enabled_get):
        (ewk_settings_loads_images_automatically_set):
        (ewk_settings_loads_images_automatically_get):
        (ewk_settings_developer_extras_enabled_set):
        (ewk_settings_developer_extras_enabled_get):
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):
        (ewk_settings_frame_flattening_enabled_set):
        (ewk_settings_frame_flattening_enabled_get):
        (ewk_settings_dns_prefetching_enabled_set):
        (ewk_settings_dns_prefetching_enabled_get):
        * UIProcess/API/efl/ewk_settings_private.h:
        (WebKit):
        (Ewk_Settings):
        (Ewk_Settings::Ewk_Settings):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_initialize):

2012-10-24  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][AC] Fix build break when AC is enabled
        https://bugs.webkit.org/show_bug.cgi?id=100245

        Reviewed by Kenneth Rohde Christiansen.

        Fix build break after r132337.

        * UIProcess/API/efl/EwkViewImpl.h:
        * UIProcess/API/efl/ewk_view.cpp:

2012-10-24  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [EFL] run-webkit-tests writes garbage on stderr when running on Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=100243

        Reviewed by Kenneth Rohde Christiansen.

        These errors generate noise on the reports and in some cases, like when
        running perf tests, makes the test fail. By using Xext, we can add a
        dummy handler to ignore these errors.

        * PlatformEfl.cmake:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (dummyExtensionErrorHandler):
        (WebKit::WebProcessMainEfl):

2012-10-24  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Maciej Stachowiak.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new WKSI function pointers.

2012-10-24  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Expose useful WebCore::Settings
        https://bugs.webkit.org/show_bug.cgi?id=100239

        Reviewed by Kenneth Rohde Christiansen.

        Expose the two settings CaretBrowsingEnabled and NotificationsEnabled.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::caretBrowsingEnabled):
        (QWebPreferences::setCaretBrowsingEnabled):
        (QWebPreferences::notificationsEnabled):
        (QWebPreferences::setNotificationsEnabled):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-10-24  Zeno Albisser  <zeno@webkit.org>

        Implement GraphicsSurface for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=98147

        Add encode and decode implementation for GraphicsSurfaceToken on Windows.

        Reviewed by Kenneth Rohde Christiansen.

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

2012-10-24  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] ASSERTION FAILED: edje(): could not paint native HTML part due to missing theme
        https://bugs.webkit.org/show_bug.cgi?id=100227

        Reviewed by Kenneth Rohde Christiansen.

        Browser crashes on loading any page due to missing theme after
        the web process has crashed and recovered.

        This patch reset the theme when the web process is recovered to
        avoid a crash.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didRelaunchProcess):

2012-10-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132333.
        http://trac.webkit.org/changeset/132333
        https://bugs.webkit.org/show_bug.cgi?id=100234

        Crashes many tests on the EFL-WK2 bot. (Requested by rakuco on
        #webkit).

        * Target.pri:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateTextCheckerState):

2012-10-24  Christophe Dumez  <christophe.dumez@intel.com> and Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Move Ewk_View_Private_Data out of ewk_view.cpp
        https://bugs.webkit.org/show_bug.cgi?id=100228

        Reviewed by Gyuyoung Kim.

        Move Ewk_View_Private_Data out of ewk_view.cpp and
        rename it to EwkViewImpl. This is a first step towards
        getting rid of C'ism in Ewk_View.

        In a future, we will make EwkViewImpl a proper C++
        class and get rid of the private ewk_view C API so
        that WebKit code interacts with EwkViewImpl instead
        of Evas_Object.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkViewImpl.cpp: Added.
        (_ewk_view_commit):
        (_ewk_view_preedit_changed):
        (_ewk_view_imf_context_destroy):
        (_ewk_view_imf_context_create):
        (EwkViewImpl::EwkViewImpl):
        (EwkViewImpl::~EwkViewImpl):
        * UIProcess/API/efl/EwkViewImpl.h: Added.
        (WebKit):
        (EwkViewImpl):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_del):
        (_ewk_view_smart_add):
        * UIProcess/API/efl/ewk_view.h:

2012-10-24  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL][WK2] Crash when passing NULL instead of ewk_view instance
        https://bugs.webkit.org/show_bug.cgi?id=100078

        Reviewed by Gyuyoung Kim.

        Although applications should pass valid ewk_view to call ewk_view_XXX,
        ewk_view_XXX should not be crashed.

        * UIProcess/API/efl/ewk_view.cpp:
        Checked null and early exited from EWK_VIEW_TYPE_CHECK if error occured.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Added test case.
        (TEST_F):

2012-10-24  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make find and form clients C++ classes
        https://bugs.webkit.org/show_bug.cgi?id=100199

        Reviewed by Kenneth Rohde Christiansen.

        Make form and find client C++ classes to move away
        from C'ism in WK2 EFL port. The new classes have been
        moved up to UIProcess/efl instead of UIProcess/API/efl
        since it is not part of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/efl/FindClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_find_client.cpp.
        (WebKit):
        (WebKit::toFindClientEfl):
        (WebKit::FindClientEfl::didFindString):
        (WebKit::FindClientEfl::didFailToFindString):
        (WebKit::FindClientEfl::FindClientEfl):
        * UIProcess/efl/FindClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_find_client_private.h.
        (WebKit):
        (FindClientEfl):
        (WebKit::FindClientEfl::create):
        * UIProcess/efl/FormClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_form_client.cpp.
        (WebKit):
        (WebKit::toFormClientEfl):
        (WebKit::FormClientEfl::willSubmitForm):
        (WebKit::FormClientEfl::FormClientEfl):
        * UIProcess/efl/FormClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_form_client_private.h.
        (WebKit):
        (FormClientEfl):
        (WebKit::FormClientEfl::create):

2012-10-24  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] WebKitTestRunner needs to turn on 'setContinuousSpellCheckingEnabled'
        https://bugs.webkit.org/show_bug.cgi?id=93611

        Reviewed by Hajime Morita.

        When WebKitTestRunner turns on the spelling feature with the resetStateToConsistentValues() method,
        it happens that the WebProcess is still not launched (although it is already created).
        In this case, isValid() method returns false.

        This fix sends a message to the WebProcess messages queue, and the message
        will be handled once the WebProcess is ready.

        * Target.pri:
        Adds missing files to compile spellcheking feature for WebKit2-Qt
        to use WebKit C API from WKTextChecker.h.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::updateTextCheckerState):
        Uses canSendMessage() method instead of isValid() to check whether the message to
        the WebProcess can be sent.

2012-10-24  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Black screen in web inspector window with AC on
        https://bugs.webkit.org/show_bug.cgi?id=100168

        Reviewed by Kenneth Rohde Christiansen.

        When ACCELERATED_COMPOSITING flag is turned on, and using X11,
        pass "opengl_x11" engine name to ecore_evas_new when creating a
        web inspector window. It is guaranteed to be available, because
        we wouldn't be able to create a main window if it wasn't.

        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2012-10-24  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make History client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100104

        Reviewed by Kenneth Rohde Christiansen.

        Created ContextHistoryClientEfl class to encapsulate history client code for EFL.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (ewk_context_history_callbacks_set):
        * UIProcess/API/efl/ewk_context_history_client.cpp: Removed.
        * UIProcess/API/efl/ewk_context_history_client_private.h: Removed.
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (Ewk_Context):
        * UIProcess/efl/ContextHistoryClientEfl.cpp: Added.
        (WebKit):
        (WebKit::toContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::didNavigateWithNavigationData):
        (WebKit::ContextHistoryClientEfl::didPerformClientRedirect):
        (WebKit::ContextHistoryClientEfl::didPerformServerRedirect):
        (WebKit::ContextHistoryClientEfl::didUpdateHistoryTitle):
        (WebKit::ContextHistoryClientEfl::populateVisitedLinks):
        (WebKit::ContextHistoryClientEfl::ContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::setCallbacks):
        * UIProcess/efl/ContextHistoryClientEfl.h: Added.
        (WebKit):
        (ContextHistoryClientEfl):
        (WebKit::ContextHistoryClientEfl::create):

2012-10-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the WebKitWebView associated to a WebKitDownload to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=99836

        Reviewed by Martin Robinson.

        Add webkit_download_get_web_view() to get the WebKitWebView that
        initiated the download and webkit_web_view_download_uri() to start
        a new download associated to a WebKitWebView.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest): Call
        webkitWebViewBaseHandleDownloadRequest().
        * UIProcess/API/gtk/PageClientImpl.h:
        (PageClientImpl): Add handleDownloadRequest().
        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadSetWebView): Set the WebKitWebView associated to
        the download.
        (webkit_download_get_web_view): Public method to get the
        WebKitWebView associated to the download.
        * UIProcess/API/gtk/WebKitDownload.h:
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_download_uri): Use the new helper
        webkitWebContextStartDownload().
        (webkitWebContextStartDownload): Helper function to start a new
        download that is also used by WebKitWebView.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewHandleDownloadRequest): Call
        webkitDownloadSetWebView() to associate the download with the
        WebKitWebView.
        (webkitWebViewConstructed): Set a download request handler.
        (webkit_web_view_download_uri): Public method to start a new
        download associated to the web view.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetDownloadRequestHandler): Set a function
        pointer to be called when a new download is request for the web
        view.
        (webkitWebViewBaseHandleDownloadRequest): Call the download
        request handler if any.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestDownloads.cpp:
        (testDownloadLocalFile):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testWebViewDownloadURI):
        (testPolicyResponseDownload):
        (beforeAll):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision):
        (WebKit):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):

2012-10-23  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/2966974> [mac] Kerning and ligatures are not enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=100188

        Reviewed by Sam Weinig.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded): Added. Registers a value of YES for the
        WebKitKerningAndLigaturesEnabledByDefault user default if it has not been registered yet.
        (WebKit::WebContext::platformInitializeWebProcess): Added a call to
        registerUserDefaultsIfNeeded, and changed to refer to the defaults key by name.

2012-10-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Unreviewed build fix, some function names changed between review and landing.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::encodeTimingFunction):
        (CoreIPC::decodeTimingFunction):
        (CoreIPC::::encode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):

2012-10-23  Sam Weinig  <sam@webkit.org>

        Stop using NSHomeDirectory() to get the home directory, it doesn't always return what we want
        https://bugs.webkit.org/show_bug.cgi?id=100180

        Reviewed by Anders Carlsson.

        NSHomeDirectory() doesn't return the real home directory if the host process
        is App Sandboxed, so drop down and use getpwuid_r instead.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::appendReadwriteSandboxDirectory):
        There is no reason anymore to try to create the directory.

        (WebKit::WebProcess::initializeSandbox):
        Switch to getpwuid_r.

2012-10-23  Martin Robinson  <mrobinson@igalia.com>

        [GTK][Soup] Implement the default authentication dialog via WebCoreSupport
        https://bugs.webkit.org/show_bug.cgi?id=99351

        Reviewed by Carlos Garcia Campos.

        Instead of using a custom SoupSessionFeature to show the authentication
        dialog, show it using the corresponding WebCore message.

        * GNUmakefile.list.am: Removed the SoupSessionFeature files.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit): Only use the default dispatchDidReceiveAuthenticationChallenge
        for non-GTK+ ports.
        * WebProcess/WebCoreSupport/gtk/WebFrameLoaderClientGtk.cpp: Added.
        (WebKit::WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge): Added
        a GTK+-specific implementation that shows the GtkAuthenticationDialog.
        * WebProcess/gtk/WebAuthDialog.cpp: Removed.
        * WebProcess/gtk/WebAuthDialog.h: Removed.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): Don't install the custom session feature.

2012-10-23  Anders Carlsson  <andersca@apple.com>

        Remove deprecatedSend
        https://bugs.webkit.org/show_bug.cgi?id=100127

        Reviewed by Andreas Kling.

        deprecatedSend is no longer used anywhere, remove it.

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-23  Andy Estes  <aestes@apple.com>

        [WebKit2 API] Add properties to get textRects from a WKDOMRange or WKDOMNode
        https://bugs.webkit.org/show_bug.cgi?id=100162

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::toNSArray): Added a helper function to convert a Vector of IntRects to an NSArray.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode textRects]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange textRects]):

2012-10-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Coordinated Graphics: Enable threaded/IPC animations
        https://bugs.webkit.org/show_bug.cgi?id=93146

        Reviewed by Kenneth Rohde Christiansen.

        Re-enable UI-process animations for Coordinated-Graphics/TextureMapper.
        - Added an argument coder for GraphicsLayerAnimations.
        - Allow LayerTreeCoordinator to manage the animations per layer with the proxy,
          as opposed to applying the animation values in the web process as before.
        - LayerTreeRenderer now calls updateViewport() after painting when an animation is active.

        To overcome the problem we've had in the past with synchronizing UI-side and web-side
        animations, we now lock the animations in the UI process when a frame starts rendering,
        and unlock it when the frame finishes rendering, or if after the layout there is no visible
        changes pending on the screen.

        * Scripts/webkit2/messages.py:
        (headers_for_type):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC):
        (CoreIPC::encodeTimingFunction):
        (CoreIPC::decodeTimingFunction):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):
            Added argument coders for GraphicsLayerAnimations.

        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::setLayerAnimations):
        (WebKit::LayerTreeCoordinatorProxy::setAnimationsLocked):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
            Added an option to sync the layer's animations, and also to lock/unlock animations.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::LayerTreeRenderer):
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
            Sync animations if they're not locked, and call updateViewport() if we have animations.

        (WebKit::LayerTreeRenderer::flushLayerChanges):
        (WebKit::LayerTreeRenderer::setLayerAnimations):
        (WebKit::LayerTreeRenderer::setAnimationsLocked):

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeAnimations):
        (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        (WebCore::CoordinatedGraphicsLayer::pauseAnimation):
        (WebCore::CoordinatedGraphicsLayer::removeAnimation):
        (WebCore::CoordinatedGraphicsLayer::animationStartedTimerFired):
        (WebCore):
            Pass the animation info to the UI process instead of applying it in the web process.

        (WebCore::CoordinatedGraphicsLayer::hasPendingVisibleChanges):
            Compute whether a layer tree might have sync issues or flickers if rendered while
            background animations are ongoing.

        (WebCore::CoordinatedGraphicsLayer::computeTransformedVisibleRect):
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):
            Don't allow progressive tiling for layers with animations.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (WebCore):
        (CoordinatedGraphicsLayerClient):
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::lockAnimations):
        (WebKit):
        (WebKit::LayerTreeCoordinator::unlockAnimations):
        (WebKit::LayerTreeCoordinator::performScheduledLayerFlush):
        (WebKit::LayerTreeCoordinator::setLayerAnimations):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt][WK2] Add preference for enabling scroll animators
        https://bugs.webkit.org/show_bug.cgi?id=100124

        Reviewed by Jocelyn Turcotte.

        Expose the ScollAnimatorEnabled setting in QWebPreferences.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::scrollAnimatorEnabled):
        (QWebPreferences::setScrollAnimatorEnabled):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-10-23  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Use the port independent PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=99850

        Reviewed by Kenneth Rohde Christiansen.

        Take PageViewportController into use, and rely on it to calculate
        scroll position and zoom level.
        With this patch, we can do intra page navigation and use the scrollwheel
        to scroll, when WTF_USE_TILED_BACKING_STORE and all related flags are enabled.

        * CMakeLists.txt:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::didChangeViewportProperties):
        (WebKit::PageClientImpl::pageDidRequestScroll):
        (WebKit::PageClientImpl::didChangeContentsSize):
        (WebKit):
        (WebKit::PageClientImpl::didRenderFrame):
        (WebKit::PageClientImpl::pageTransitionViewportReady):
        * UIProcess/API/efl/PageClientImpl.h:
        (WebKit):
        (PageClientImpl):
        (WebKit::PageClientImpl::setPageViewportController):
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::display):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/API/efl/PageViewportControllerClientEfl.h:
        (WebKit::PageViewportControllerClientEfl::scaleFactor):
        (WebKit::PageViewportControllerClientEfl::scrollPosition):
        (PageViewportControllerClientEfl):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (mapToWebContent):
        (_ewk_view_smart_mouse_wheel):
        (_ewk_view_smart_mouse_down):
        (_ewk_view_smart_mouse_up):
        (_ewk_view_smart_mouse_move):
        (_ewk_view_initialize):
        (ewk_view_load_committed):
        (ewk_view_feed_touch_event):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::didRenderFrame):
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/PageViewportController.cpp:
        * UIProcess/PageViewportController.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit):
        (WebKit::WebPageProxy::pageTransitionViewportReady):
        (WebKit::WebPageProxy::didRenderFrame):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit):
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h:
        (PageLoadClientEfl):
        * UIProcess/qt/WebPageProxyQt.cpp:
        (WebKit):
        (WebKit::WebPageProxy::setUserScripts):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCompletePageTransition):

2012-10-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Add support for resolution media query
        https://bugs.webkit.org/show_bug.cgi?id=99077

        Reviewed by Antti Koivisto.

        * win/WebKit2.def:

            Add exports for the WebCore::Settings setting.

        * Configurations/FeatureDefines.xcconfig:

            Add support for the RESOLUTION_MEDIA_QUERY feature flag.

2012-10-23  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Port QWebPreferences to C++
        https://bugs.webkit.org/show_bug.cgi?id=100121

        Reviewed by Kenneth Rohde Christiansen.

        Port all the WebPreference calls to using the direct API instead of going through
        the auto-generated C API.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferencesPrivate::setFontFamily):
        (QWebPreferencesPrivate::fontFamily):
        (QWebPreferencesPrivate::setFontSize):
        (QWebPreferencesPrivate::fontSize):
        (QWebPreferencesPrivate::preferences):
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2012-10-23  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Convert WebEvent's timestamp from millisecond to second.
        https://bugs.webkit.org/show_bug.cgi?id=100101

        Reviewed by Kenneth Rohde Christiansen.

        Convert timestamp to second to create WebEvent from Evas event because
        the unit of timestamp from Evas Event is millisecond, but the unit of
        timestamp for WebEvent is second.

        * Shared/efl/WebEventFactory.cpp:
        (WebKit::convertMillisecondToSecond):
        (WebKit):
        (WebKit::WebEventFactory::createWebMouseEvent):
        (WebKit::WebEventFactory::createWebWheelEvent):
        (WebKit::WebEventFactory::createWebKeyboardEvent):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make request manager client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100093

        Reviewed by Kenneth Rohde Christiansen.

        Make EFL's request manager client a C++ class and
        move URL scheme handling code to it. The new
        RequestManagerClientEfl is now in UIProcess/efl
        instead of UIProcess/API/efl since it is not
        part of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::requestManager):
        (ewk_context_url_scheme_register):
        * UIProcess/API/efl/ewk_context_private.h:
        (WebKit):
        (Ewk_Context):
        * UIProcess/efl/RequestManagerClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client.cpp.
        (WebKit):
        (Ewk_Url_Scheme_Handler):
        (WebKit::Ewk_Url_Scheme_Handler::Ewk_Url_Scheme_Handler):
        (WebKit::toRequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::didReceiveURIRequest):
        (WebKit::RequestManagerClientEfl::RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::~RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::registerURLSchemeHandler):
        * UIProcess/efl/RequestManagerClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_context_request_manager_client_private.h.
        (WebKit):
        (RequestManagerClientEfl):
        (WebKit::RequestManagerClientEfl::create):

2012-10-23  Alexander Shalamov  <alexander.shalamov@intel.com>

        [EFL][WK2] ecore_x should be initialised in WebProcess to avoid re-initialization by PlatformScreenEfl utilities and systemBeep() function
        https://bugs.webkit.org/show_bug.cgi?id=100110

        Reviewed by Kenneth Rohde Christiansen.

        PlatformScreenEfl functions and systemBeep() depend on ecore_x functionality, therefore,
        ecore_x should be initialized when web process starts to avoid re-initialization.

        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl): Initialized ecore_x module.

2012-10-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add support for IMF composition
        https://bugs.webkit.org/show_bug.cgi?id=89552

        Reviewed by Gyuyoung Kim.

        Implemented basic IMF support.

        * PlatformEfl.cmake:
        * Shared/NativeWebKeyboardEvent.h:
        (NativeWebKeyboardEvent):
        (WebKit::NativeWebKeyboardEvent::isFiltered):
        Added to determine whether current keyboard event is compositing.
        * Shared/efl/NativeWebKeyboardEventEfl.cpp:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::updateTextInputState):
        Added to change input state.
        * UIProcess/API/efl/PageClientImpl.h:
        (PageClientImpl):
        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init): Called ecore_imf_init.
        (ewk_shutdown): Called ecore_imf_shutdown.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_smart_key_down): Modified to send keyboard event to IMF.
        (_ewk_view_smart_mouse_up): Modified to reset input method context.
        (_ewk_view_preedit_changed): Added to send composition string.
        (_ewk_view_commit): Added to send a message that composition is finished.
        (_ewk_view_imf_context_create): Added to create Ecore_IMF_Context.
        (_ewk_view_imf_context_destroy): Added to destroy Ecore_IMF_Context.
        (ewk_view_text_input_state_update): Added to update input state.
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/PageClient.h: Moved updateTextInputState() to share with EFL port.
        (PageClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        Added PLATFORM(EFL) to call updateTextInputState()
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        Added HandleInputMethodKeydown message to determine whether keydown is handled.
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::handleInputMethodKeydown):
        Added to check whether input method handled keydown.
        (WebKit::WebPageProxy::confirmComposition): Added to support composition.
        (WebKit::WebPageProxy::setComposition): Ditto.
        (WebKit::WebPageProxy::cancelComposition): Ditto.
        * WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        Added to check whether input method handled keydown.
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in: Added messages to support composition.
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::targetFrameForEditing): Referenced from QT port to get focused frame.
        (WebKit::WebPage::confirmComposition): Added to support composition.
        (WebKit::WebPage::setComposition): Ditto.
        (WebKit::WebPage::cancelComposition): Ditto.

2012-10-23  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        [EFL] Make plugin process debugging easier (PLUGIN_PROCESS_COMMAND_PREFIX)
        https://bugs.webkit.org/show_bug.cgi?id=99297

        Reviewed by Kenneth Rohde Christiansen.

        Add support for PLUGIN_PROCESS_COMMAND_PREFIX environment variable, to allow easier
        plugin debugging with e.g.:
        $ PLUGIN_PROCESS_COMMAND_PREFIX="xterm gdb --args" MiniBrowser

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):

2012-10-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make Policy client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100089

        Reviewed by Kenneth Rohde Christiansen.

        Make page policy client a C++ class and remove it from API folder.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/efl/PagePolicyClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp.
        (WebKit):
        (WebKit::toPagePolicyClientEfl):
        (WebKit::PagePolicyClientEfl::decidePolicyForNavigationAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForNewWindowAction):
        (WebKit::PagePolicyClientEfl::decidePolicyForResponseCallback):
        (WebKit::PagePolicyClientEfl::PagePolicyClientEfl):
        * UIProcess/efl/PagePolicyClientEfl.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client_private.h.
        (WebKit):
        (PagePolicyClientEfl):
        (WebKit::PagePolicyClientEfl::create):
        (WebKit::PagePolicyClientEfl::view):

2012-10-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Make UI client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100099

        Reviewed by Gyuyoung Kim.

        Made page UI client a C++ class and removed it from API directory.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/API/efl/ewk_view_ui_client.cpp: Removed.
        * UIProcess/API/efl/ewk_view_ui_client_private.h: Removed.
        * UIProcess/efl/PageUIClientEfl.cpp: Added.
        (WebKit):
        (WebKit::toPageUIClientEfl):
        (WebKit::PageUIClientEfl::closePage):
        (WebKit::PageUIClientEfl::createNewPage):
        (WebKit::PageUIClientEfl::runJavaScriptAlert):
        (WebKit::PageUIClientEfl::runJavaScriptConfirm):
        (WebKit::PageUIClientEfl::runJavaScriptPrompt):
        (WebKit::PageUIClientEfl::showColorPicker):
        (WebKit::PageUIClientEfl::hideColorPicker):
        (WebKit::PageUIClientEfl::exceededDatabaseQuota):
        (WebKit::PageUIClientEfl::focus):
        (WebKit::PageUIClientEfl::unfocus):
        (WebKit::PageUIClientEfl::takeFocus):
        (WebKit::PageUIClientEfl::getWindowFrame):
        (WebKit::PageUIClientEfl::setWindowFrame):
        (WebKit::PageUIClientEfl::PageUIClientEfl):
        * UIProcess/efl/PageUIClientEfl.h: Added.
        (WebKit):
        (PageUIClientEfl):
        (WebKit::PageUIClientEfl::create):

2012-10-23  Andreas Kling  <kling@webkit.org>

        [WK2] REGRESSION(r132169): It broke all plugin related test.
        <http://webkit.org/b/100094>

        Unreviewed test fix, make the CoreIPC encode/decode functions for CString match again.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make a download client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100005

        Reviewed by Kenneth Rohde Christiansen.

        Make EFL's Download client a C++ class and move
        the id <-> download mapping from Ewk_Context to
        DownloadManagerEfl.

        The Download client was also moved to
        UIProcess/efl/ instead of UIProcess/API/efl/
        since it is not part of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::downloadManager):
        * UIProcess/API/efl/ewk_context_download_client_private.h: Removed.
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/efl/DownloadManagerEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp.
        (WebKit):
        (WebKit::toDownloadManagerEfl):
        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
        (WebKit::DownloadManagerEfl::didReceiveResponse):
        (WebKit::DownloadManagerEfl::didCreateDestination):
        (WebKit::DownloadManagerEfl::didReceiveData):
        (WebKit::DownloadManagerEfl::didFail):
        (WebKit::DownloadManagerEfl::didCancel):
        (WebKit::DownloadManagerEfl::didFinish):
        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
        (WebKit::DownloadManagerEfl::registerDownload):
        (WebKit::DownloadManagerEfl::downloadJob):
        (WebKit::DownloadManagerEfl::unregisterDownloadJob):
        * UIProcess/efl/DownloadManagerEfl.h: Added.
        (WebKit):
        (DownloadManagerEfl):
        (WebKit::DownloadManagerEfl::create):

2012-10-23  Andras Becsi  <andras.becsi@digia.com>

        Remove devicePixelRatio from ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=99845

        Reviewed by Adam Barth.

        Update PageViewportController and co. to pass the device pixel ratio
        as an argument to functions that need to adjust the visible viewport size.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):

2012-10-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Refactor Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=99594

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Context is now encapsulated to a C++ class inherited from WTF::RefCounted.
        Also the same instance of Ewk_Context is returned for the same instance of
        WKContext, so memory leak in ewk_view is also fixed.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (contextMap):
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::~Ewk_Context):
        (Ewk_Context::create):
        (Ewk_Context::defaultContext):
        (Ewk_Context::cookieManager):
        (Ewk_Context::faviconDatabase):
        (Ewk_Context::registerURLScheme):
        (Ewk_Context::vibrationProvider):
        (Ewk_Context::addVisitedLink):
        (Ewk_Context::setCacheModel):
        (Ewk_Context::cacheModel):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        (Ewk_Context::wkContext):
        (Ewk_Context::addDownloadJob):
        (Ewk_Context::downloadJob):
        (Ewk_Context::removeDownloadJob):
        (Ewk_Context::requestManager):
        (Ewk_Context::urlSchemeRequestReceived):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (getEwkHistoryClient):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        (Ewk_Context::historyClient):
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_context_get):
        (ewk_view_update_icon):

2012-10-23  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make page load client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=100081

        Reviewed by Kenneth Rohde Christiansen.

        Make page load client a C++ class and move it
        up to UIProcess/efl since it is not really part
        of the public API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        * UIProcess/API/efl/ewk_view_loader_client_private.h: Removed.
        * UIProcess/efl/PageLoadClientEfl.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp.
        (WebKit):
        (WebKit::toPageLoadClientEfl):
        (WebKit::PageLoadClientEfl::didReceiveTitleForFrame):
        (WebKit::PageLoadClientEfl::didReceiveIntentForFrame):
        (WebKit::PageLoadClientEfl::registerIntentServiceForFrame):
        (WebKit::PageLoadClientEfl::didChangeProgress):
        (WebKit::PageLoadClientEfl::didFinishLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didStartProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didReceiveServerRedirectForProvisionalLoadForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didChangeBackForwardList):
        (WebKit::PageLoadClientEfl::didSameDocumentNavigationForFrame):
        (WebKit::PageLoadClientEfl::PageLoadClientEfl):
        * UIProcess/efl/PageLoadClientEfl.h: Added.
        (WebKit):
        (PageLoadClientEfl):
        (WebKit::PageLoadClientEfl::create):
        (WebKit::PageLoadClientEfl::view):

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

        Handle ArgumentCoder template specializations that take the ArgumentEncoder as a reference
        https://bugs.webkit.org/show_bug.cgi?id=100056

        Reviewed by Andreas Kling.

        Use template magic to make it possible to have ArgumentCoder specializations where the encode
        function takes the ArgumentEncoder object as a reference instead of as a pointer. Also, add an
        operator<< to ArgumentEncoder and change the string related ArgumentCoder specializations over to taking
        the encoder as a reference and using stream operators.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        (UsesDeprecatedEncodeFunction):
        (NoType):
        (CoreIPC::ArgumentEncoder::encode):
        (CoreIPC::ArgumentEncoder::operator<<):

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

        More Argument coder cleanup
        https://bugs.webkit.org/show_bug.cgi?id=100022

        Reviewed by Andreas Kling.

        Remove the ArgumentDecoder::decode overload that takes a const reference - if the call to decode ends up creating a temporary
        we'll encode into it and then destroy it. Since this decode overload was mostly used with the CoreIPC::Out functions, remove them
        (and CoreIPC::In) as well. Clean up a couple of ArgumentCoders as well.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentDecoder.h:
        * Platform/CoreIPC/Arguments.h:
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::decode):
        * Shared/PrintInfo.cpp:
        (WebKit::PrintInfo::encode):
        (WebKit::PrintInfo::decode):
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::encode):
        (WebKit::WebContextMenuItemData::decode):
        * Shared/WebEvent.cpp:
        (WebKit::WebEvent::encode):
        (WebKit::WebEvent::decode):
        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::Data::encode):
        (WebKit::WebGeolocationPosition::Data::decode):
        * Shared/WebMouseEvent.cpp:
        (WebKit::WebMouseEvent::encode):
        (WebKit::WebMouseEvent::decode):
        * Shared/WebPopupItem.cpp:
        (WebKit::WebPopupItem::encode):
        (WebKit::WebPopupItem::decode):
        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::decodeMessageBody):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):
        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::decodeMessageBody):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::postInjectedBundleMessage):

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

        Remove MessageReceiverMap::deprecatedAddMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=100012

        Reviewed by Andreas Kling.

        Get rid of MessageReceiverMap::deprecatedAddMessageReceiver and make callers use addMessageReceiver instead.
        Also, remove the message receiver map inside Connection and add a message receiver map to WebProcess instead.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::WebGeolocationManager):
        (WebKit::WebGeolocationManager::registerWebPage):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::addMessageReceiver):
        (WebKit):
        (WebKit::WebProcess::didReceiveSyncMessage):
        (WebKit::WebProcess::didReceiveMessage):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-10-22  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [EFL][WK2] ewk_view_color_picker_color_set() is leaking
        https://bugs.webkit.org/show_bug.cgi?id=100007

        Reviewed by Kenneth Rohde Christiansen.

        Fix a leak in ewk_view_color_picker_color_set() by adopting WKStringRef
        returned by WKStringCreateWithUTF8CString().

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_color_picker_color_set):

2012-10-22  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make the resource load client a C++ class
        https://bugs.webkit.org/show_bug.cgi?id=99982

        Reviewed by Kenneth Rohde Christiansen.

        Create a C++ class for the resource load client and
        move the id <-> resource mapping from the Ewk_View
        to ResourceLoadClientEfl for better a cleaner
        separation.

        The resource load client code was also moved out of
        UIProcess/API/efl to UIProcess/efl since this is not
        part of the WK2 EFL API.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_wkpage_get):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        (ewk_view_load_provisional_started):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp: Removed.
        * UIProcess/API/efl/ewk_view_resource_load_client_private.h: Removed.
        * UIProcess/efl/ResourceLoadClientEfl.cpp: Added.
        (WebKit):
        (WebKit::toResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::didInitiateLoadForResource):
        (WebKit::ResourceLoadClientEfl::didSendRequestForResource):
        (WebKit::ResourceLoadClientEfl::didReceiveResponseForResource):
        (WebKit::ResourceLoadClientEfl::didFinishLoadForResource):
        (WebKit::ResourceLoadClientEfl::didFailLoadForResource):
        (WebKit::ResourceLoadClientEfl::onViewProvisionalLoadStarted):
        (WebKit::ResourceLoadClientEfl::ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::~ResourceLoadClientEfl):
        * UIProcess/efl/ResourceLoadClientEfl.h: Added.
        (WebKit):
        (ResourceLoadClientEfl):
        (WebKit::ResourceLoadClientEfl::create):

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

        [WK2] Regression(r131990): plugins/npruntime/remove-property.html started failing
        https://bugs.webkit.org/show_bug.cgi?id=99977

        Reviewed by Alexey Proskuryakov.

        Remove int32_t casts - the ArgumentDecoder::decode overload that takes a const int would cause
        a temporary to be created which the number was then decoded into.

        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        (WebKit::NPIdentifierData::decode):

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

        Don't use CStrings for message receiver names and message names
        https://bugs.webkit.org/show_bug.cgi?id=99853

        Reviewed by Andreas Kling.

        Re-land this with a fix to MessageReceiverMap::dispatchSyncMessage to look in the new global message receivers map.

        Introduce StringReference which is similar to DataReference except it holds a pointer to + length of a char *
        and can be created from a string literal. Use this in place of CString in MessageEncoder/MessageDecoder and
        make MessageReceiverMap use a HashMap from StringReferences to MessageReceivers for global message receivers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC::MessageDecoder::messageReceiverName):
        (CoreIPC::MessageDecoder::messageName):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (CoreIPC):
        (MessageEncoder):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * Platform/CoreIPC/StringReference.cpp: Added.
        (CoreIPC):
        (CoreIPC::StringReference::encode):
        (CoreIPC::StringReference::decode):
        (CoreIPC::StringReference::Hash::hash):
        * Platform/CoreIPC/StringReference.h: Added.
        (CoreIPC):
        (StringReference):
        (CoreIPC::StringReference::StringReference):
        (CoreIPC::StringReference::isEmpty):
        (CoreIPC::StringReference::size):
        (CoreIPC::StringReference::data):
        (CoreIPC::StringReference::operator==):
        (Hash):
        (CoreIPC::StringReference::Hash::equal):
        (WTF):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-10-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r132072.
        http://trac.webkit.org/changeset/132072
        https://bugs.webkit.org/show_bug.cgi?id=100011

        Made most of the tests crash on the WK2 bot. (Requested by
        rakuco on #webkit).

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context):
        (Ewk_Context::Ewk_Context):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        (ewk_context_WKContext_get):
        (ewk_context_new_from_WKContext):
        (ewk_context_download_job_add):
        (ewk_context_download_job_get):
        (ewk_context_download_job_remove):
        (ewk_context_request_manager_get):
        (ewk_context_url_scheme_request_received):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_history_client_get):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (getEwkHistoryDelegate):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_context_get):
        (ewk_view_update_icon):

2012-10-22  Darin Adler  <darin@apple.com>

        * UIProcess/API/mac/WKView.mm:
        (-[WKView view:stringForToolTip:point:userData:]): Fix build. Forgot to save file
        before committing.

2012-10-22  Darin Adler  <darin@apple.com>

        REGRESSION (r131686): Crash in NSToolTipManager mouseEnteredToolTip
        <rdar://problem/12527528> and https://bugs.webkit.org/show_bug.cgi?id=99792

        Roll out the tool tip part of r131686 since it still seems to be causing trouble.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView view:stringForToolTip:point:userData:]): Added this method back.
        (-[WKView _wk_toolTipChangedFrom:to:]): Use self as owner again, eliminating the
        separate WKToolTipDelegate object.

2012-10-22  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Memory leak in Ewk_Form_Submission_Request::fieldValue()
        https://bugs.webkit.org/show_bug.cgi?id=99993

        Reviewed by Kenneth Rohde Christiansen.

        Adopt the WKStringRef returned by toCopiedAPI() in
        Ewk_Form_Submission_Request::fieldValue() to avoid
        a memory leak.

        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (Ewk_Form_Submission_Request::fieldValue):

2012-10-22  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Refactor Ewk_Context
        https://bugs.webkit.org/show_bug.cgi?id=99594

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Context is now encapsulated to a C++ class inherited from WTF::RefCounted.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Context::Ewk_Context):
        (Ewk_Context::~Ewk_Context):
        (Ewk_Context::create):
        (Ewk_Context::defaultContext):
        (Ewk_Context::cookieManager):
        (Ewk_Context::faviconDatabase):
        (Ewk_Context::registerURLScheme):
        (Ewk_Context::vibrationProvider):
        (Ewk_Context::addVisitedLink):
        (Ewk_Context::setCacheModel):
        (Ewk_Context::cacheModel):
        (ewk_context_ref):
        (ewk_context_unref):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        (Ewk_Context::wkContext):
        (Ewk_Context::addDownloadJob):
        (Ewk_Context::downloadJob):
        (Ewk_Context::removeDownloadJob):
        (Ewk_Context::requestManager):
        (Ewk_Context::urlSchemeRequestReceived):
        (ewk_context_default_get):
        (ewk_context_new):
        (ewk_context_new_with_injected_bundle_path):
        (ewk_context_url_scheme_register):
        (ewk_context_vibration_client_callbacks_set):
        (ewk_context_history_callbacks_set):
        (ewk_context_visited_link_add):
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        (ewk_context_download_client_attach):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (getEwkHistoryClient):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_private.h:
        (Ewk_Context):
        (Ewk_Context::create):
        (Ewk_Context::historyClient):
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        (ewk_context_request_manager_client_attach):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_priv_del):
        (_ewk_view_initialize):
        (ewk_view_base_add):
        (ewk_view_add_with_context):
        (ewk_view_context_get):
        (ewk_view_update_icon):

2012-10-22  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build without QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=99981

        Reviewed by Tor Arne Vestbø.

        Make it possible to compile WebProcess without QtWidgets by instantiating a
        QGuiApplication instead of a QApplication if we're built without widgets.

        * WebProcess.pro:
        * qt/MainQt.cpp:
        (main):

2012-10-22  Ryuan Choi  <ryuan.choi@gmail.com>

        [EFL] pc files should use DATA_INSTALL_DIR for datadir
        https://bugs.webkit.org/show_bug.cgi?id=99961

        Reviewed by Gyuyoung Kim.

        * ewebkit.pc.in: Fixed wrong datadir

2012-10-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix "ASSERTION FAILED: !document->inPageCache()" when loading a page
        https://bugs.webkit.org/show_bug.cgi?id=98514

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Use FrameView::fixedVisibleContentRect
        instead of WebFrame::visibleContentBounds as the source to always keep the correct state.

2012-10-22  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: merge "docked" state into the "dock side" enum.
        https://bugs.webkit.org/show_bug.cgi?id=99717

        Reviewed by Vsevolod Vlasov.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-21  Milian Wolff  <milian.wolff@kdab.com>

        [Qt] QNX build fails when building against Qt without clipboard support
        https://bugs.webkit.org/show_bug.cgi?id=98040

        Reviewed by Simon Hausmann.

        Gracefully handle QT_NO_CLIPBOARD and do not try to access qApp->clipboard()
        in such cases. Instead, return false to indicate global selection is unsupported.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::supportsGlobalSelection):

2012-10-21  Hyungchan Kim  <hyungchan2.kim@lge.com>

        Add a separate flag for rgb swizzling whether it can be modified or not
        https://bugs.webkit.org/show_bug.cgi?id=98728

        BitmapTexture swizzles the source image if the OpenGL driver
        doesn't support the BGRA extension.
        In case of directly composited images, the source image should not
        be modified.

        http://www.satine.org/research/webkit/snowleopard/snowstack.html

        Reviewed by Noam Rosenthal.

        No new tests as this is only testable on specific hardware and
        currently not avaiable in the bots.

        * platform/graphics/texmap/TextureMapper.h:
        (BitmapTexture):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperTile::updateContents):
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperTile):
        (TextureMapperTiledBackingStore):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawRepaintCounter):
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/TextureMapperGL.h:
        (BitmapTextureGL):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::updateBackingStore):

2012-10-21  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL] Fix failure to access the inspector resources
        https://bugs.webkit.org/show_bug.cgi?id=99816

        Reviewed by Gyuyoung Kim.

        access() returns -1, if path has a file protocol like "file://".
        And I have removed it from the first argument of access().
        If not, inspectorBaseURL() or inspectorFilesPath() always returns WEB_INSPECTOR_DIR.
        Then all layout test related to inspector can fail after installing webkit package.

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

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Error, Ewk_Resource and Ewk_Popup_Menu_Item members private
        https://bugs.webkit.org/show_bug.cgi?id=99931

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Error, Ewk_Resource and Ewk_Popup_Menu_Item class
        members private.

        * UIProcess/API/efl/ewk_error.cpp:
        (Ewk_Error::Ewk_Error):
        (Ewk_Error::url):
        (Ewk_Error::description):
        (Ewk_Error::domain):
        (Ewk_Error::errorCode):
        (Ewk_Error::isCancellation):
        (ewk_error_type_get):
        (ewk_error_url_get):
        (ewk_error_code_get):
        (ewk_error_description_get):
        (ewk_error_cancellation_get):
        * UIProcess/API/efl/ewk_error_private.h:
        (Ewk_Error):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (Ewk_Popup_Menu_Item::Ewk_Popup_Menu_Item):
        (Ewk_Popup_Menu_Item::type):
        (Ewk_Popup_Menu_Item::textDirection):
        (Ewk_Popup_Menu_Item::text):
        (Ewk_Popup_Menu_Item::tooltipText):
        (Ewk_Popup_Menu_Item::accessibilityText):
        (Ewk_Popup_Menu_Item::hasTextDirectionOverride):
        (Ewk_Popup_Menu_Item::isEnabled):
        (Ewk_Popup_Menu_Item::isLabel):
        (Ewk_Popup_Menu_Item::isSelected):
        (ewk_popup_menu_item_type_get):
        (ewk_popup_menu_item_text_get):
        (ewk_popup_menu_item_text_direction_get):
        (ewk_popup_menu_item_text_direction_override_get):
        (ewk_popup_menu_item_tooltip_get):
        (ewk_popup_menu_item_accessibility_text_get):
        (ewk_popup_menu_item_enabled_get):
        (ewk_popup_menu_item_is_label_get):
        (ewk_popup_menu_item_selected_get):
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_resource.cpp:
        (Ewk_Resource::Ewk_Resource):
        (Ewk_Resource::url):
        (Ewk_Resource::isMainResource):
        (ewk_resource_url_get):
        (ewk_resource_main_resource_get):
        * UIProcess/API/efl/ewk_resource_private.h:
        (Ewk_Resource):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Url_Request, Ewk_Url_Response and Ewk_Url_Scheme_Request members private
        https://bugs.webkit.org/show_bug.cgi?id=99936

        Reviewed by Kenneth Rohde Christiansen.

        Make wk_Url_Request, Ewk_Url_Response and Ewk_Url_Scheme_Request
        class members private.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_url_scheme_request_received):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::estimatedProgress):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (Ewk_Url_Request::Ewk_Url_Request):
        (Ewk_Url_Request::url):
        (Ewk_Url_Request::firstParty):
        (Ewk_Url_Request::httpMethod):
        (ewk_url_request_url_get):
        (ewk_request_cookies_first_party_get):
        (ewk_url_request_http_method_get):
        * UIProcess/API/efl/ewk_url_request_private.h:
        (Ewk_Url_Request):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (Ewk_Url_Response::Ewk_Url_Response):
        (Ewk_Url_Response::httpStatusCode):
        (Ewk_Url_Response::url):
        (Ewk_Url_Response::mimeType):
        (Ewk_Url_Response::contentLength):
        (ewk_url_response_url_get):
        (ewk_url_response_status_code_get):
        (ewk_url_response_mime_type_get):
        (ewk_url_response_content_length_get):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (Ewk_Url_Response):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (Ewk_Url_Scheme_Request::Ewk_Url_Scheme_Request):
        (Ewk_Url_Scheme_Request::id):
        (Ewk_Url_Scheme_Request::url):
        (Ewk_Url_Scheme_Request::scheme):
        (Ewk_Url_Scheme_Request::path):
        (Ewk_Url_Scheme_Request::finish):
        (ewk_url_scheme_request_scheme_get):
        (ewk_url_scheme_request_url_get):
        (ewk_url_scheme_request_path_get):
        (ewk_url_scheme_request_finish):
        * UIProcess/API/efl/ewk_url_scheme_request.h: Fix ewk_url_scheme_request_finish() declaration
        so that the request argument is no longer marked as const and so that the content type is of
        type uint64_t instead of unsigned int.
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (Ewk_Url_Scheme_Request):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Form_Submission_Request, Ewk_Navigation_Data and Ewk_Navigation_Policy_Decision members private
        https://bugs.webkit.org/show_bug.cgi?id=99934

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Form_Submission_Request, Ewk_Navigation_Data and
        Ewk_Navigation_Policy_Decision class members private.

        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (Ewk_Form_Submission_Request::Ewk_Form_Submission_Request):
        (Ewk_Form_Submission_Request::~Ewk_Form_Submission_Request):
        (Ewk_Form_Submission_Request::fieldValue):
        (Ewk_Form_Submission_Request::fieldNames):
        (Ewk_Form_Submission_Request::submit):
        (ewk_form_submission_request_field_names_get):
        (ewk_form_submission_request_field_value_get):
        (ewk_form_submission_request_submit):
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (Ewk_Form_Submission_Request):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (Ewk_Navigation_Data::Ewk_Navigation_Data):
        (Ewk_Navigation_Data::originalRequest):
        (Ewk_Navigation_Data::title):
        (Ewk_Navigation_Data::url):
        (ewk_navigation_data_title_get):
        (ewk_navigation_data_original_request_get):
        (ewk_navigation_data_url_get):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (Ewk_Navigation_Policy_Decision::Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::~Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::navigationType):
        (Ewk_Navigation_Policy_Decision::mouseButton):
        (Ewk_Navigation_Policy_Decision::modifiers):
        (Ewk_Navigation_Policy_Decision::frameName):
        (Ewk_Navigation_Policy_Decision::request):
        (Ewk_Navigation_Policy_Decision::accept):
        (Ewk_Navigation_Policy_Decision::reject):
        (Ewk_Navigation_Policy_Decision::download):
        (ewk_navigation_policy_navigation_type_get):
        (ewk_navigation_policy_mouse_button_get):
        (ewk_navigation_policy_modifiers_get):
        (ewk_navigation_policy_frame_name_get):
        (ewk_navigation_policy_request_get):
        (ewk_navigation_policy_decision_accept):
        (ewk_navigation_policy_decision_reject):
        (ewk_navigation_policy_decision_download):
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (Ewk_Navigation_Policy_Decision):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Favicon_Database members private
        https://bugs.webkit.org/show_bug.cgi?id=99932

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Favicon_Database class members private.

        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (Ewk_Favicon_Database::Ewk_Favicon_Database):
        (Ewk_Favicon_Database::iconURLForPageURL):
        (Ewk_Favicon_Database::watchChanges):
        (Ewk_Favicon_Database::unwatchChanges):
        (AsyncIconRequestResponse):
        (AsyncIconRequestResponse::AsyncIconRequestResponse):
        (respond_icon_request_idle):
        (Ewk_Favicon_Database::iconForPageURL):
        (Ewk_Favicon_Database::didChangeIconForPageURL):
        (Ewk_Favicon_Database::getIconSurfaceSynchronously):
        (Ewk_Favicon_Database::iconDataReadyForPageURL):
        (ewk_favicon_database_icon_url_get):
        (ewk_favicon_database_async_icon_get):
        (ewk_favicon_database_icon_change_callback_add):
        (ewk_favicon_database_icon_change_callback_del):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_initialize):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk back / forward list classes members private and remove private C functions
        https://bugs.webkit.org/show_bug.cgi?id=99929

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Back_Forward_List and Ewk_Back_Forward_List_Item members
        private and remove private C functions.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (Ewk_Back_Forward_List::Ewk_Back_Forward_List):
        (Ewk_Back_Forward_List::nextItem):
        (Ewk_Back_Forward_List::previousItem):
        (Ewk_Back_Forward_List::currentItem):
        (Ewk_Back_Forward_List::itemAt):
        (Ewk_Back_Forward_List::size):
        (Ewk_Back_Forward_List::backList):
        (Ewk_Back_Forward_List::forwardList):
        (Ewk_Back_Forward_List::getFromCacheOrCreate):
        (Ewk_Back_Forward_List::createEinaList):
        (Ewk_Back_Forward_List::update):
        (ewk_back_forward_list_current_item_get):
        (ewk_back_forward_list_previous_item_get):
        (ewk_back_forward_list_next_item_get):
        (ewk_back_forward_list_item_at_index_get):
        (ewk_back_forward_list_count):
        (ewk_back_forward_list_n_back_items_copy):
        (ewk_back_forward_list_n_forward_items_copy):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (Ewk_Back_Forward_List_Item::Ewk_Back_Forward_List_Item):
        (Ewk_Back_Forward_List_Item::url):
        (Ewk_Back_Forward_List_Item::title):
        (Ewk_Back_Forward_List_Item::originalURL):
        (ewk_back_forward_list_item_url_get):
        (ewk_back_forward_list_item_title_get):
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didChangeBackForwardList):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Cookie_Manager members private
        https://bugs.webkit.org/show_bug.cgi?id=99930

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Cookie_Manager class members private.

        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (Ewk_Cookie_Manager::Ewk_Cookie_Manager):
        (Ewk_Cookie_Manager::~Ewk_Cookie_Manager):
        (Ewk_Cookie_Manager::setPersistentStorage):
        (Ewk_Cookie_Manager::setHTTPAcceptPolicy):
        (Ewk_Cookie_Manager::clearHostnameCookies):
        (Ewk_Cookie_Manager::clearAllCookies):
        (Ewk_Cookie_Manager::watchChanges):
        (Ewk_Cookie_Manager::isWatchingForChanges):
        (Ewk_Cookie_Manager::getHostNamesWithCookies):
        (Ewk_Cookie_Manager::getHTTPAcceptPolicy):
        (Ewk_Cookie_Manager::cookiesDidChange):
        (ewk_cookie_manager_persistent_storage_set):
        (ewk_cookie_manager_accept_policy_set):
        (Get_Policy_Async_Data):
        (Get_Policy_Async_Data::Get_Policy_Async_Data):
        (ewk_cookie_manager_async_accept_policy_get):
        (Get_Hostnames_Async_Data):
        (Get_Hostnames_Async_Data::Get_Hostnames_Async_Data):
        (ewk_cookie_manager_async_hostnames_with_cookies_get):
        (ewk_cookie_manager_hostname_cookies_clear):
        (ewk_cookie_manager_cookies_clear):
        (ewk_cookie_manager_changes_watch):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (Ewk_Cookie_Manager):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk intent classes members private
        https://bugs.webkit.org/show_bug.cgi?id=99832

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Intent and Ewk_Intent_Service members
        private and add class methods to get them.

        * UIProcess/API/efl/ewk_intent.cpp:
        (Ewk_Intent::Ewk_Intent):
        (Ewk_Intent::webIntentData):
        (Ewk_Intent::action):
        (Ewk_Intent::type):
        (Ewk_Intent::service):
        (Ewk_Intent::suggestions):
        (Ewk_Intent::extra):
        (Ewk_Intent::extraKeys):
        (ewk_intent_action_get):
        (ewk_intent_type_get):
        (ewk_intent_service_get):
        (ewk_intent_suggestions_get):
        (ewk_intent_extra_get):
        (ewk_intent_extra_names_get):
        * UIProcess/API/efl/ewk_intent_private.h:
        (WebKit):
        (Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (Ewk_Intent_Service::Ewk_Intent_Service):
        (Ewk_Intent_Service::action):
        (Ewk_Intent_Service::type):
        (Ewk_Intent_Service::href):
        (Ewk_Intent_Service::title):
        (Ewk_Intent_Service::disposition):
        (ewk_intent_service_action_get):
        (ewk_intent_service_type_get):
        (ewk_intent_service_href_get):
        (ewk_intent_service_title_get):
        (ewk_intent_service_disposition_get):
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):

2012-10-21  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make Ewk_Download_Job members private and remove private C functions
        https://bugs.webkit.org/show_bug.cgi?id=99697

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Download_Job private and replace private C functions
        by class methods. New methods were also added to match the
        public C API.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_download_job_add):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        (didReceiveResponse):
        (didCreateDestination):
        (didReceiveData):
        (didFail):
        (didCancel):
        (didFinish):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (Ewk_Download_Job::Ewk_Download_Job):
        (Ewk_Download_Job::id):
        (Ewk_Download_Job::view):
        (ewk_download_job_state_get):
        (Ewk_Download_Job::state):
        (ewk_download_job_request_get):
        (Ewk_Download_Job::request):
        (ewk_download_job_response_get):
        (Ewk_Download_Job::response):
        (ewk_download_job_destination_get):
        (Ewk_Download_Job::destination):
        (ewk_download_job_destination_set):
        (Ewk_Download_Job::setDestination):
        (ewk_download_job_suggested_filename_get):
        (Ewk_Download_Job::suggestedFileName):
        (ewk_download_job_cancel):
        (Ewk_Download_Job::cancel):
        (ewk_download_job_estimated_progress_get):
        (Ewk_Download_Job::estimatedProgress):
        (ewk_download_job_elapsed_time_get):
        (Ewk_Download_Job::elapsedTime):
        (Ewk_Download_Job::setResponse):
        (Ewk_Download_Job::setSuggestedFileName):
        (Ewk_Download_Job::incrementReceivedData):
        (Ewk_Download_Job::setState):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job):

2012-10-19  Anders Carlsson  <andersca@apple.com>

        Remove ::encode template specializations and just use overloads
        https://bugs.webkit.org/show_bug.cgi?id=99865

        Reviewed by Andreas Kling.

        Get rid of the various encode functions and just use overloading instead.

        * Platform/CoreIPC/ArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::encodeVariableLengthByteArray):
        (CoreIPC::ArgumentEncoder::encode):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        (CoreIPC::ArgumentEncoder::encodeEnum):
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * Platform/win/SharedMemoryWin.cpp:
        (WebKit::SharedMemory::Handle::encode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Shared/DictionaryPopupInfo.cpp:
        (WebKit::DictionaryPopupInfo::encode):
        * Shared/Plugins/NPIdentifierData.cpp:
        (WebKit::NPIdentifierData::encode):
        (WebKit::NPIdentifierData::decode):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (CoreIPC::encode):
        * Shared/mac/ArgumentCodersMac.mm:
        (CoreIPC::encode):
        * Shared/mac/KeychainAttribute.cpp:
        (CoreIPC::encode):
        * Shared/mac/PlatformCertificateInfo.mm:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::HandleArray::encode):
        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode):
        * Shared/mac/SecItemResponseData.cpp:
        (WebKit::SecItemResponseData::encode):
        * Shared/mac/SecKeychainItemRequestData.cpp:
        (WebKit::SecKeychainItemRequestData::encode):
        * Shared/mac/SecKeychainItemResponseData.cpp:
        (WebKit::SecKeychainItemResponseData::encode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::encode):
        * Shared/qt/QtNetworkReplyData.cpp:
        (WebKit::QtNetworkReplyData::encode):
        * Shared/soup/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/win/LayerTreeContextWin.cpp:
        (WebKit::LayerTreeContext::encode):
        * Shared/win/PlatformCertificateInfo.cpp:
        (WebKit::PlatformCertificateInfo::encode):
        * Shared/win/WindowGeometry.cpp:
        (WebKit::WindowGeometry::encode):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (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):

2012-10-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix compile warning.

        * UIProcess/API/gtk/tests/GNUmakefile.am: Pass sourcedir to
        glib-compile-resource when generating dependencies too.

2012-10-19  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Change the title of inspector window when inspected page is changed
        https://bugs.webkit.org/show_bug.cgi?id=99684

        Reviewed by Gyuyoung Kim.

        Implement platformInspectedURLChanged() to change the title of inspector window
        when inspected page is changed.

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

2012-10-19  Dan Bernstein  <mitz@apple.com>

        Add bundle API for hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=99907

        Reviewed by Sam Weinig.

        Test: TestWebKitAPI/Tests/WebKit2/InjectedBundleFrameHitTest.cpp

        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        (WKBundleFrameCreateHitTestResult): Added this wrapper.
        * WebProcess/InjectedBundle/API/c/WKBundleFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest): Added. Hit tests at the given point, ignoring clipping.
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame): Declared hitTest.

2012-10-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add API unit tests for scaling
        https://bugs.webkit.org/show_bug.cgi?id=99451

        Reviewed by Gyuyoung Kim.

        Add API unit test for ewk_view_scale_set()/get() APIs.

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

2012-10-19  KyungTae Kim  <ktf.kim@samsung.com>

        [WK2][EFL] Modify ewk_view_scale_set to public API
        https://bugs.webkit.org/show_bug.cgi?id=99902

        Reviewed by Gyuyoung Kim.

        Modify ewk_view_scale_set to public API.

        * UIProcess/API/efl/ewk_view.h:

2012-10-19  Andreas Kling  <kling@webkit.org>

        Race condition in WebProcessProxy::handleGetPlugins().
        <http://webkit.org/b/99903>
        <rdar://problem/12541471>

        Reviewed by Anders Carlsson.

        Scope the Vector<PluginModuleInfo> so that all the destructors are guaranteed
        to have run when sendDidGetPlugins() executes on the main thread.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::handleGetPlugins):

2012-10-19  Brady Eidson  <beidson@apple.com>

        WebProcess should only connect to the NetworkProcess if NetworkProcess is enabled
        https://bugs.webkit.org/show_bug.cgi?id=99885

        Reviewed by Alexey Proskuryakov.

        WebContext should tell each WebProcess it creates whether NetworkProcess use is enabled.

        Add a WebProcess initialization flag for whether or not NetworkProcess use is enabled:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):

        Include that info in the initialization parameters:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):

        Store whether or not NetworkProcess use is enabled, and only connect to the NetworkProcess if appropriate:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        * WebProcess/WebProcess.h:

2012-10-19  Brady Eidson  <beidson@apple.com>

        Add infrastructure for NetworkProcess management
        https://bugs.webkit.org/show_bug.cgi?id=99817

        Reviewed by Alexey Proskuryakov.

        Add support for the WebProcess itself requesting a connection to the default NetworkProcess.

        Add proper handling of crashes so any of the Web/Network/UI processes crash the others take appropriate action.

        Project file stuff and general messaging changes:
        * DerivedSources.make:
        * Platform/CoreIPC/MessageID.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC):
        (CoreIPC::callMemberFunction): Add some new required templates.

        WebContext now does much less of this stuff:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        (WebContext):

        UIProcess now has a process manager to handle most of this:
        * UIProcess/Network/NetworkProcessManager.cpp:
        (WebKit):
        (WebKit::NetworkProcessManager::shared):
        (WebKit::NetworkProcessManager::NetworkProcessManager):
        (WebKit::NetworkProcessManager::getNetworkProcessConnection):
        (WebKit::NetworkProcessManager::ensureNetworkProcess):
        (WebKit::NetworkProcessManager::removeNetworkProcessProxy):
        * UIProcess/Network/NetworkProcessManager.h:
        (WebKit):
        (NetworkProcessManager):

        Flesh out the NetworkProcessProxy to handle creating these connections between Network and Web Processes:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::create):
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        (WebKit):
        (WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didCreateNetworkConnectionToWebProcess):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit):
        (NetworkProcessProxy):
        * UIProcess/Network/NetworkProcessProxy.messages.in:

        Add a class representing a connection from a NetworkProcess to a particular WebProcess:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp: Added.
        (WebKit):
        (WebKit::NetworkConnectionToWebProcess::create):
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage):
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::didReceiveInvalidMessage):
        (WebKit::NetworkConnectionToWebProcess::didReceiveNetworkConnectionToWebProcessMessage):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        (WebKit):
        (NetworkConnectionToWebProcess):
        (WebKit::NetworkConnectionToWebProcess::connection):
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:

        Add the ability for a NetworkProcess to create a connection for a different process, which is used on behalf of WebProcesses for now:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::removeNetworkConnectionToWebProcess):
        (WebKit):
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        (NetworkProcess):
        * NetworkProcess/NetworkProcess.messages.in:

        Forward on the message that a WebProcess wants a connection to a NetworkProcess:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit):
        (WebKit::WebProcessProxy::getNetworkProcessConnection):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:

        Add a class representing the WebProcesses connection to the NetworkProcess:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit):
        (WebKit::NetworkProcessConnection::NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::~NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage):
        (WebKit::NetworkProcessConnection::didClose):
        (WebKit::NetworkProcessConnection::didReceiveInvalidMessage):
        * WebProcess/Network/NetworkProcessConnection.h:
        (WebKit):
        (NetworkProcessConnection):
        (WebKit::NetworkProcessConnection::create):
        (WebKit::NetworkProcessConnection::connection):

        Have the WebProcess make sure it has a connection to the NetworkProcess, even though it currently does nothing with it:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit):
        (WebKit::WebProcess::ensureNetworkProcessConnection):
        (WebKit::WebProcess::networkProcessConnectionClosed):
        (WebKit::WebProcess::networkProcessCrashed):
        * WebProcess/WebProcess.h:
        (WebKit):
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2012-10-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131931.
        http://trac.webkit.org/changeset/131931
        https://bugs.webkit.org/show_bug.cgi?id=99871

        Broke Safari exensions (Requested by smfr on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (MessageEncoder):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * Platform/CoreIPC/StringReference.cpp: Removed.
        * Platform/CoreIPC/StringReference.h: Removed.
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-10-19  Anders Carlsson  <andersca@apple.com>

        Don't use CStrings for message receiver names and message names
        https://bugs.webkit.org/show_bug.cgi?id=99853

        Reviewed by Andreas Kling.

        Introduce StringReference which is similar to DataReference except it holds a pointer to + length of a char *
        and can be created from a string literal. Use this in place of CString in MessageEncoder/MessageDecoder and
        make MessageReceiverMap use a HashMap from StringReferences to MessageReceivers for global message receivers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::dispatchSyncMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC::MessageDecoder::messageReceiverName):
        (CoreIPC::MessageDecoder::messageName):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (CoreIPC):
        (MessageEncoder):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * Platform/CoreIPC/StringReference.cpp: Added.
        (CoreIPC):
        (CoreIPC::StringReference::encode):
        (CoreIPC::StringReference::decode):
        (CoreIPC::StringReference::Hash::hash):
        * Platform/CoreIPC/StringReference.h: Added.
        (CoreIPC):
        (StringReference):
        (CoreIPC::StringReference::StringReference):
        (CoreIPC::StringReference::isEmpty):
        (CoreIPC::StringReference::size):
        (CoreIPC::StringReference::data):
        (CoreIPC::StringReference::operator==):
        (Hash):
        (CoreIPC::StringReference::Hash::equal):
        (WTF):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (forward_declarations_and_headers):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:
        * Shared/CoreIPCSupport/WebContextMessageKinds.h:
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:

2012-10-19  Dongwoo Joshua Im  <dw.im@samsung.com>

        Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=99804

        Reviewed by Julien Chaffraix.

        CSS3 text related properties will be implemented under this flag,
        including text decoration, text-align-last, and text-justify.

        * Configurations/FeatureDefines.xcconfig:

2012-10-19  Brady Eidson  <beidson@apple.com>

        REGRESSION (r131686): Crash in NSToolTipManager mouseEnteredToolTip
        <rdar://problem/12527528> and https://bugs.webkit.org/show_bug.cgi?id=99792

        Patch by Darin Adler, reviewed by Brady Eidson.

        We should explicitly remove tooltips when the view moves to a new window.

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

2012-10-19  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] renderToOffscreenBuffer should not be set if the real render loop is active
        https://bugs.webkit.org/show_bug.cgi?id=99831

        Reviewed by Jocelyn Turcotte.

        Update the comment about renderToOffscreenBuffer to better describe its role.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::setNeedsDisplay):

2012-10-19  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2] Rename EflViewportHandler to PageViewportControllerClientEfl
        https://bugs.webkit.org/show_bug.cgi?id=99101

        Reviewed by Gyuyoung Kim.

        Rename EFlViewportHandler to PageViewportControllerClientEfl.
        Also, make it inherit from PageViewportControllerClient. The actual implementation
        of PageViewportControllerClient for Efl port will come in a separate patch.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * UIProcess/API/efl/EflViewportHandler.cpp: Removed.
        * UIProcess/API/efl/EflViewportHandler.h: Removed.
        * UIProcess/API/efl/PageViewportControllerClientEfl.cpp: Copied from Source/WebKit2/UIProcess/API/efl/EflViewportHandler.cpp.
        (WebKit::PageViewportControllerClientEfl::PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::~PageViewportControllerClientEfl):
        (WebKit::PageViewportControllerClientEfl::drawingArea):
        (WebKit::PageViewportControllerClientEfl::setRendererActive):
        (WebKit::PageViewportControllerClientEfl::display):
        (WebKit::PageViewportControllerClientEfl::updateViewportSize):
        (WebKit::PageViewportControllerClientEfl::setVisibleContentsRect):
        (WebKit::PageViewportControllerClientEfl::didChangeContentsSize):
        (WebKit):
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setContentsScale):
        (WebKit::PageViewportControllerClientEfl::didResumeContent):
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        (WebKit::PageViewportControllerClientEfl::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientEfl::setController):
        * UIProcess/API/efl/PageViewportControllerClientEfl.h: Copied from Source/WebKit2/UIProcess/API/efl/EflViewportHandler.h.
        (WebKit::PageViewportControllerClientEfl::create):
        (PageViewportControllerClientEfl):
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_scale_set):
        * UIProcess/PageViewportController.cpp:
        * UIProcess/PageViewportController.h:

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

        REGRESSION(r131844): It broke the build on !ENABLE(NETSCAPE_PLUGIN_API) platforms
        https://bugs.webkit.org/show_bug.cgi?id=99820

        Reviewed by Jocelyn Turcotte.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess): Add missing ENABLE(PLUGIN_PROCESS) guard.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp: The whole file should be ENABLE(NETSCAPE_PLUGIN_API) guarded as the PluginInfoStore class.
        (WebKit::PluginInfoStore::getPluginInfo):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin): Eliminate the unused webPage variable (build fail with -Werror) if !(PLATFORM(MAC)||ENABLE(NETSCAPE_PLUGIN_API)).

2012-10-19  Huang Dongsung  <luxtella@company100.net>

        Build fix after r131741 for !ENABLE(CSS_SHADERS) platforms.
        https://bugs.webkit.org/show_bug.cgi?id=99775

        Reviewed by Csaba Osztrogonác.

        A class in WebKit namespace is only used when ENABLE(CSS_SHADERS), so we
        must guard "using namespace WebKit" by ENABLE(CSS_SHADERS). Otherwise,
        it brokes the Qt --minimal build.

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

2012-10-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION (r130640 - r130644): TestCookieManager API test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98738

        Reviewed by Philippe Normand.

        For some reason the order of the domains in the array has changed,
        but it doesn't really matter, what we want to check is that both
        cookies have been accepted and the array contains both domains.

        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
        (testCookieManagerAcceptPolicy): Check that first and third party
        domains are present in the domains array.

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        WebPageProxy::canShowMIMEType() should return false for plugins when they are disabled
        https://bugs.webkit.org/show_bug.cgi?id=99449

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/tests/GNUmakefile.am:
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewCanShowMIMEType): Test that
        webkit_web_view_can_show_mime_type() returns FALSE if plugins are
        disabled.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType): Return false for
        MIME-Type of plugins if they are disabled.

2012-10-18  Brady Eidson  <beidson@apple.com>

        Move ConnectionStack out of WebProcessConnection into its own files.
        https://bugs.webkit.org/show_bug.cgi?id=99813

        Reviewed by Andreas Kling.

        ConnectionStack will need to be used in a few upcoming areas, so it needs to be in its own header and implementation files.

        Project file stuff:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:

        Move it from here:
        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::setGlobalException):
        (WebKit::WebProcessConnection::didReceiveMessage):
        (WebKit::WebProcessConnection::didReceiveSyncMessage):

        Into here:
        * Shared/ConnectionStack.cpp: Added.
        (WebKit):
        (WebKit::ConnectionStack::shared):
        * Shared/ConnectionStack.h: Added.
        (CoreIPC):
        (WebKit):
        (ConnectionStack):
        (WebKit::ConnectionStack::current):
        (CurrentConnectionPusher):
        (WebKit::ConnectionStack::CurrentConnectionPusher::CurrentConnectionPusher):
        (WebKit::ConnectionStack::CurrentConnectionPusher::~CurrentConnectionPusher):

2012-10-18  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Move ewk_{init,shutdown}() to the main() function of EFL API test.
        https://bugs.webkit.org/show_bug.cgi?id=99681

        Reviewed by Gyuyoung Kim.

        The ewk_{init,shutdown}() is called whenever processing the each test,
        so tests can be failed if EFL libraries APIs are called between
        ewk_shutdown() and next ewk_init().
        The ewk_{init,shutdown}() should be called once per application.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        (EWK2UnitTest::EWK2UnitTestBase::TearDown):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp:
        (main):

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

        Fix build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99788

        Reviewed by Kentaro Hara.

        Remove parameter name or use ASSERT_UNUSED macro for removing
        -Wunused-parameter.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):

2012-10-18  Ryuan Choi  <ryuan.choi@gmail.com>

        Attempt to fix the WebKit2/Efl build after r131841.

        Unreviewed build fix.

        Rename addMessageReceiver to deprecatedAddMessageReceiver.

        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        (WebKit::WebNetworkInfoManagerProxy::WebNetworkInfoManagerProxy):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::WebSoupRequestManagerProxy):

2012-10-18  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] WebKit2 does not build without PLUGIN_PROCESS on Mac
        https://bugs.webkit.org/show_bug.cgi?id=99771

        Reviewed by Anders Carlsson.

        Add ENABLE(PLUGIN_PROCESS), ENABLE(SHARED_WORKER_PROCESS) and ENABLE(NETSCAPE_PLUGIN_API)
        as needed to exclude the code with dependencies on PLUGIN_PROCESS.

        * Platform/CoreIPC/MessageID.h:
        * Shared/SharedWorkerProcessCreationParameters.cpp:
        * Shared/SharedWorkerProcessCreationParameters.h:
        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        * SharedWorkerProcess/SharedWorkerProcess.h:
        * SharedWorkerProcess/SharedWorkerProcess.messages.in:
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetAdditionalPluginsDirectory):
        (WKContextGetPluginSiteDataManager):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetTypeID):
        (WKPluginSiteDataManagerGetSitesWithData):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):
        * UIProcess/Plugins/PluginInfoStore.cpp:
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::getPluginInfo):
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.cpp:
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h:
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.messages.in:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::shouldTerminate):
        (WebKit::WebContext::disconnectProcess):
        (WebKit):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::canShowMIMEType):
        (WebKit):
        (WebKit::WebPageProxy::didBlockInsecurePluginVersion):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebKit2Prefix.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin):
        (WebKit::WebFrameLoaderClient::recreatePlugin):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::WebPlatformStrategies):
        (WebKit::WebPlatformStrategies::refreshPlugins):
        (WebKit::WebPlatformStrategies::getPluginInfo):
        (WebKit):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        (WebKit):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::createPlugin):
        (WebKit::canPluginHandleResponse):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit):
        * WebProcess/WebProcess.h:
        (WebProcess):
        * WebProcess/WebProcess.messages.in:

2012-10-18  Laszlo Gombos  <l.gombos@samsung.com>

        [EFL] Buildfix if Netscape plugin support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=99757

        Reviewed by Gyuyoung Kim.

        Guard PluginProcessMainUnix.cpp with ENABLE(PLUGIN_PROCESS).

        * PluginProcess/unix/PluginProcessMainUnix.cpp:

2012-10-18  Anders Carlsson  <andersca@apple.com>

        Deprecate the current version of MessageReceiverMap::addMessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=99797

        Reviewed by Andreas Kling.

        Rename addMessageReceiver to deprecatedAddMessageReceiver in preparation for adding a new
        version that takes a string instead.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::deprecatedAddMessageReceiver):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::deprecatedAddMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::deprecatedAddMessageReceiver):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        * WebProcess/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::AuthenticationManager):
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::registerWebPage):

2012-10-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Crashes in WebProcess at com.apple.WebCore: -[AccessibilityObjectWrapper remoteAccessibilityParentObject] + 78
        https://bugs.webkit.org/show_bug.cgi?id=96443

        Reviewed by Beth Dakin.

        It appears that the crash is due to not checking whether the page object is null. 

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

2012-10-18  Jaehun Lim  <ljaehun.lim@samsung.com>

        Add support for float-valued prefernces
        https://bugs.webkit.org/show_bug.cgi?id=99419

        Reviewed by Anders Carlsson.

        Support float values for preferences in WK2.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::WebPreferencesStore::encode):
        (WebKit::WebPreferencesStore::decode):
        (WebKit):
        (WebKit::defaultValueForKey):
        * Shared/WebPreferencesStore.h:
        (WebKit):
        (WebPreferencesStore):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::updateFloatValueForKey):
        (WebKit):
        * UIProcess/WebPreferences.h:
        (WebPreferences):
        * UIProcess/cf/WebPreferencesCF.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/efl/WebPreferencesEfl.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):
        * UIProcess/qt/WebPreferencesQt.cpp:
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):
        (WebKit):

2012-10-18  Anders Carlsson  <andersca@apple.com>

        Replace uses of ArgumentEncoder/ArgumentDecoder with MessageEncoder/MessageDecoder
        https://bugs.webkit.org/show_bug.cgi?id=99746

        Reviewed by Andreas Kling.

        Change all occurrences of ArgumentDecoder* to MessageDecoder& and all occurrences of ArgumentEncoder*
        to ArgumentEncoder& in all the message receivers. This is the second step towards getting rid of MessageID.

2012-10-18  Yael Aharon  <yael.aharon@intel.com>

        PageViewportController::m_rawAttributes.devicePixelRatio is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=99751

        Reviewed by Antonio Gomes.

        PageViewportController::m_rawAttributes.devicePixelRatio needs to be initialized.
        Due to race condition, we could set the viewport attributes before the first layout.
        If that happens, PageViewportController::m_rawAttributes.devicePixelRatio
        is used without being initialized.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):

2012-10-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix after r131701 and r131777.

        * win/WebKit2.def:

2012-10-18  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:

2012-10-18  Anders Carlsson  <andersca@apple.com>

        Generated messages should have a receiver name and a name
        https://bugs.webkit.org/show_bug.cgi?id=99740

        Reviewed by Andreas Kling.

        As a first step towards getting rid of MessageID, give each generated message a name and receiver name
        and pass them along when sending the messages.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):
        (generate_messages_header):
        * Scripts/webkit2/messages_unittest.py:

2012-10-18  Pablo Flouret  <pablof@motorola.com>

        Implement css3-conditional's @supports rule
        https://bugs.webkit.org/show_bug.cgi?id=86146

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:
            Add an ENABLE_CSS3_CONDITIONAL_RULES flag.

2012-10-18  Michael Saboff  <msaboff@apple.com>

        Make conversion between JSStringRef and WKStringRef work without character size conversions
        https://bugs.webkit.org/show_bug.cgi?id=99727

        Reviewed by Anders Carlsson.

        Use the wrapped WTFString object to convert between JSStringRef and WKStringRef.

        * Shared/WebString.h:
        (WebKit::JSStringCreateWithString):
        (WebKit::WebString::create):
        (WebKit::WebString::createJSString):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use using namespace WebKit in private headers in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=99724

        Reviewed by Xan Lopez.

        Move using namespace WebKit from private headers to the cpp file.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        * UIProcess/API/gtk/WebKitCookieManagerPrivate.h:
        * UIProcess/API/gtk/WebKitDownload.cpp:
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitFaviconDatabasePrivate.h:
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        * UIProcess/API/gtk/WebKitFileChooserRequestPrivate.h:
        * UIProcess/API/gtk/WebKitFindController.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp:
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp:
        * UIProcess/API/gtk/WebKitGeolocationProvider.h:
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        * UIProcess/API/gtk/WebKitHitTestResultPrivate.h:
        * UIProcess/API/gtk/WebKitJavascriptResult.cpp:
        * UIProcess/API/gtk/WebKitJavascriptResultPrivate.h:
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        * UIProcess/API/gtk/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        * UIProcess/API/gtk/WebKitURIResponsePrivate.h:
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        * UIProcess/API/gtk/WebKitWebInspectorPrivate.h:
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        * UIProcess/API/gtk/WebKitWebResourcePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        * UIProcess/API/gtk/WebKitWindowPropertiesPrivate.h:

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitFileChooserRequest
        https://bugs.webkit.org/show_bug.cgi?id=96774

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (_WebKitFileChooserRequestPrivate):
        (webkitFileChooserRequestCreate):
        (webkit_file_chooser_request_get_mime_types):
        (webkit_file_chooser_request_get_mime_types_filter):
        (webkit_file_chooser_request_get_select_multiple):
        (webkit_file_chooser_request_select_files):
        (webkit_file_chooser_request_get_selected_files):
        (webkit_file_chooser_request_cancel):
        * UIProcess/API/gtk/WebKitFileChooserRequestPrivate.h:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (runOpenPanel):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitFormSubmissionRequest
        https://bugs.webkit.org/show_bug.cgi?id=96777

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitFormClient.cpp:
        (willSubmitForm):
        * UIProcess/API/gtk/WebKitFormSubmissionRequest.cpp:
        (_WebKitFormSubmissionRequestPrivate):
        (webkitFormSubmissionRequestCreate):
        (webkit_form_submission_request_get_text_fields):
        (webkit_form_submission_request_submit):
        * UIProcess/API/gtk/WebKitFormSubmissionRequestPrivate.h:

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitSettings
        https://bugs.webkit.org/show_bug.cgi?id=96784

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate):
        (webkit_settings_class_init):
        (webkit_settings_init):
        (webkitSettingsAttachSettingsToPage):
        (webkit_settings_get_enable_javascript):
        (webkit_settings_set_enable_javascript):
        (webkit_settings_get_auto_load_images):
        (webkit_settings_set_auto_load_images):
        (webkit_settings_get_load_icons_ignoring_image_load_setting):
        (webkit_settings_set_load_icons_ignoring_image_load_setting):
        (webkit_settings_get_enable_offline_web_application_cache):
        (webkit_settings_set_enable_offline_web_application_cache):
        (webkit_settings_get_enable_html5_local_storage):
        (webkit_settings_set_enable_html5_local_storage):
        (webkit_settings_get_enable_html5_database):
        (webkit_settings_set_enable_html5_database):
        (webkit_settings_get_enable_xss_auditor):
        (webkit_settings_set_enable_xss_auditor):
        (webkit_settings_get_enable_frame_flattening):
        (webkit_settings_set_enable_frame_flattening):
        (webkit_settings_get_enable_plugins):
        (webkit_settings_set_enable_plugins):
        (webkit_settings_get_enable_java):
        (webkit_settings_set_enable_java):
        (webkit_settings_get_javascript_can_open_windows_automatically):
        (webkit_settings_set_javascript_can_open_windows_automatically):
        (webkit_settings_get_enable_hyperlink_auditing):
        (webkit_settings_set_enable_hyperlink_auditing):
        (webkit_settings_set_default_font_family):
        (webkit_settings_set_monospace_font_family):
        (webkit_settings_set_serif_font_family):
        (webkit_settings_set_sans_serif_font_family):
        (webkit_settings_set_cursive_font_family):
        (webkit_settings_set_fantasy_font_family):
        (webkit_settings_set_pictograph_font_family):
        (webkit_settings_get_default_font_size):
        (webkit_settings_set_default_font_size):
        (webkit_settings_get_default_monospace_font_size):
        (webkit_settings_set_default_monospace_font_size):
        (webkit_settings_get_minimum_font_size):
        (webkit_settings_set_minimum_font_size):
        (webkit_settings_set_default_charset):
        (webkit_settings_get_enable_private_browsing):
        (webkit_settings_set_enable_private_browsing):
        (webkit_settings_get_enable_developer_extras):
        (webkit_settings_set_enable_developer_extras):
        (webkit_settings_get_enable_resizable_text_areas):
        (webkit_settings_set_enable_resizable_text_areas):
        (webkit_settings_get_enable_tabs_to_links):
        (webkit_settings_set_enable_tabs_to_links):
        (webkit_settings_get_enable_dns_prefetching):
        (webkit_settings_set_enable_dns_prefetching):
        (webkit_settings_get_enable_caret_browsing):
        (webkit_settings_set_enable_caret_browsing):
        (webkit_settings_get_enable_fullscreen):
        (webkit_settings_set_enable_fullscreen):
        (webkit_settings_get_print_backgrounds):
        (webkit_settings_set_print_backgrounds):
        (webkit_settings_get_enable_webaudio):
        (webkit_settings_set_enable_webaudio):
        (webkit_settings_get_enable_webgl):
        (webkit_settings_set_enable_webgl):
        (webkit_settings_get_allow_modal_dialogs):
        (webkit_settings_get_zoom_text_only):
        (webkit_settings_get_javascript_can_access_clipboard):
        (webkit_settings_set_javascript_can_access_clipboard):
        (webkit_settings_get_media_playback_requires_user_gesture):
        (webkit_settings_set_media_playback_requires_user_gesture):
        (webkit_settings_get_media_playback_allows_inline):
        (webkit_settings_set_media_playback_allows_inline):
        (webkit_settings_get_draw_compositing_indicators):
        (webkit_settings_set_draw_compositing_indicators):
        (webkit_settings_get_enable_site_specific_quirks):
        (webkit_settings_set_enable_site_specific_quirks):
        (webkit_settings_get_enable_page_cache):
        (webkit_settings_set_enable_page_cache):
        (webkit_settings_get_enable_smooth_scrolling):
        (webkit_settings_set_enable_smooth_scrolling):
        * UIProcess/API/gtk/WebKitSettingsPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetSettings):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ debug build.

        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkitWebResourceCreate):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWindowProperties
        https://bugs.webkit.org/show_bug.cgi?id=96785

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewCreateNewPage):
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        (webkitWindowPropertiesUpdateFromWebWindowFeatures):
        * UIProcess/API/gtk/WebKitWindowPropertiesPrivate.h:

2012-10-18  Huang Dongsung  <luxtella@company100.net>

        [WK2] Add CustomFilterOperation serialization in ArgumentCoder.
        https://bugs.webkit.org/show_bug.cgi?id=98733

        Reviewed by Noam Rosenthal.

        Add ArgumentCoders for CustomFilterOperation and all dependent classes.
        Coordinated Graphics will use this css shaders serialization when it enables CSS
        Shaders.

        No new tests, code path is not activated yet.

        * CMakeLists.txt:
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp: Added.
        (CoreIPC):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h: Added.
        (WebCore):
        (CoreIPC):
        * Shared/CoordinatedGraphics/WebCustomFilterProgram.h: Added.
        (WebKit):
        (WebCustomFilterProgram):
            WebCustomFilterProgram is made to serialize the data of a
            StyleCustomFilterProgram to the UI process.
        (WebKit::WebCustomFilterProgram::create):
        (WebKit::WebCustomFilterProgram::WebCustomFilterProgram):
        * Shared/ShareableSurface.cpp:
        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        * Target.pri:
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        * WebKit2.pri:
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWebResource
        https://bugs.webkit.org/show_bug.cgi?id=96783

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (_WebKitWebResourcePrivate):
        (webkitWebResourceCreate):
        (webkitWebResourceGetFrame):
        (ResourceGetDataAsyncData):
        (resourceDataCallback):
        (webkit_web_resource_get_data):
        (webkit_web_resource_get_data_finish):
        * UIProcess/API/gtk/WebKitWebResourcePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (setCertificateToMainResource):
        (webkitWebViewResourceLoadStarted):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitURIResponse
        https://bugs.webkit.org/show_bug.cgi?id=96782

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitURIResponse.cpp:
        (webkitURIResponseSetCertificateInfo):
        * UIProcess/API/gtk/WebKitURIResponsePrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (setCertificateToMainResource):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in PolicyClient classes
        https://bugs.webkit.org/show_bug.cgi?id=96781

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        (webkitNavigationPolicyDecisionCreate):
        * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPolicyClient.cpp:
        (decidePolicyForNavigationActionCallback):
        (decidePolicyForNewWindowActionCallback):
        (decidePolicyForResponseCallback):
        (attachPolicyClientToView):
        * UIProcess/API/gtk/WebKitPolicyClient.h:
        * UIProcess/API/gtk/WebKitPolicyDecision.cpp:
        (_WebKitPolicyDecisionPrivate):
        (webkitPolicyDecisionFinalize):
        (webkitPolicyDecisionSetListener):
        (webkit_policy_decision_use):
        (webkit_policy_decision_ignore):
        (webkit_policy_decision_download):
        * UIProcess/API/gtk/WebKitPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPrivate.cpp:
        (wkEventMouseButtonToWebKitMouseButton):
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        (webkitResponsePolicyDecisionCreate):
        * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):

2012-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=96779

        Reviewed by Xan Lopez.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkitHitTestResultCreate):
        (webkitHitTestResultCompare):
        * UIProcess/API/gtk/WebKitHitTestResultPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewMouseTargetChanged):
        (webkitWebViewPopulateContextMenu):

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Added API to convert a QImage to a WKImage so we can
        pass it to cross-platform code.

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-18  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [CMake] Depend on the Python scripts in WebKit2/Scripts/webkit2 when regenerating messages.
        https://bugs.webkit.org/show_bug.cgi?id=99702

        Reviewed by Gyuyoung Kim.

        Be in line with most (or all) the other build systems and
        explicitly depend on all the scripts in
        ${WEBKIT2_DIR}/Scripts/webkit2 for the custom command that
        generates messages.

        This helps fix the build after the recent change to messages.py,
        which did not trigger a regeneration of the required files --
        people were just removing their DerivedSources directory
        altogether.

        * CMakeLists.txt:

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

        [WK2] Fix incorrect test expectations of messages_unittest.py.
        https://bugs.webkit.org/show_bug.cgi?id=99699

        Reviewed by Gyuyoung Kim.

        Fix the expected results of messages_unittest.py.

        The expected result of messages_unittest.py has bugs, and it makes failure on python test.

        * Scripts/webkit2/messages_unittest.py:

2012-10-18  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        Add PluginProcessProxy::platformInitializeLaunchOptions
        https://bugs.webkit.org/show_bug.cgi?id=99583

        Reviewed by Sam Weinig.

        Add a platform specific launch options initializer. This enables
        fixing bug 99297 "[EFL] Make plugin process debugging easier
        (PLUGIN_PROCESS_COMMAND_PREFIX)".

        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::PluginProcessProxy):
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformInitializeLaunchOptions):
        (WebKit):

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

        [WK2] Update test expectation for the python message test after r131700
        https://bugs.webkit.org/show_bug.cgi?id=99689

        Reviewed by Gyuyoung Kim.

        Need to update test expectations about including headers and forwarding
        declarations on derived sources for ipc message. (after r131700 : build fix)

        * Scripts/webkit2/messages_unittest.py:

2012-10-18  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Remove '_' prefix from private API structure names
        https://bugs.webkit.org/show_bug.cgi?id=99575

        Reviewed by Gyuyoung Kim.

        Removed underscore prefix from WK2 EFL internal structure names.

        * UIProcess/API/efl/VibrationProvider.cpp:
        (Ewk_Vibration_Client::Ewk_Vibration_Client):
        * UIProcess/API/efl/VibrationProvider.h:
        * UIProcess/API/efl/ewk_back_forward_list.h:
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (Ewk_Back_Forward_List_Item::create):
        (Ewk_Back_Forward_List_Item::Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (Ewk_Back_Forward_List::create):
        (Ewk_Back_Forward_List::Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (Ewk_Url_Scheme_Handler::Ewk_Url_Scheme_Handler):
        (Ewk_Context::Ewk_Context):
        (ewk_context_url_scheme_request_received):
        (ewk_context_url_scheme_register):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_download_client_private.h:
        * UIProcess/API/efl/ewk_context_history_client_private.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client_private.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (Ewk_Cookie_Manager::Ewk_Cookie_Manager):
        (Ewk_Cookie_Manager::~Ewk_Cookie_Manager):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (Ewk_Cookie_Manager::create):
        (Ewk_Cookie_Manager):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        (Ewk_Download_Job::create):
        (Ewk_Download_Job::Ewk_Download_Job):
        * UIProcess/API/efl/ewk_error.cpp:
        (Ewk_Error::Ewk_Error):
        * UIProcess/API/efl/ewk_error.h:
        * UIProcess/API/efl/ewk_error_private.h:
        (Ewk_Error::create):
        (Ewk_Error):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (Ewk_Favicon_Database::Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_favicon_database.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (Ewk_Favicon_Database::create):
        (Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_form_submission_request.h:
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (Ewk_Form_Submission_Request::~Ewk_Form_Submission_Request):
        (Ewk_Form_Submission_Request::create):
        (Ewk_Form_Submission_Request::Ewk_Form_Submission_Request):
        * UIProcess/API/efl/ewk_intent.h:
        * UIProcess/API/efl/ewk_intent_private.h:
        (Ewk_Intent::create):
        (Ewk_Intent::Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.h:
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (Ewk_Intent_Service::create):
        (Ewk_Intent_Service::Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_navigation_data.h:
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (Ewk_Navigation_Data::create):
        (Ewk_Navigation_Data::Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (Ewk_Navigation_Policy_Decision::~Ewk_Navigation_Policy_Decision):
        (Ewk_Navigation_Policy_Decision::create):
        (Ewk_Navigation_Policy_Decision::Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (Ewk_Popup_Menu_Item::Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_popup_menu_item.h:
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (Ewk_Popup_Menu_Item::create):
        (Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_resource.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        (Ewk_Resource::create):
        (Ewk_Resource::Ewk_Resource):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/ewk_settings_private.h:
        (Ewk_Settings::Ewk_Settings):
        * UIProcess/API/efl/ewk_text_checker_private.h:
        * UIProcess/API/efl/ewk_touch.h:
        * UIProcess/API/efl/ewk_url_request.h:
        * UIProcess/API/efl/ewk_url_request_private.h:
        (Ewk_Url_Request::create):
        (Ewk_Url_Request::Ewk_Url_Request):
        * UIProcess/API/efl/ewk_url_response.h:
        * UIProcess/API/efl/ewk_url_response_private.h:
        (Ewk_Url_Response::create):
        (Ewk_Url_Response::Ewk_Url_Response):
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_View_Private_Data::Ewk_View_Private_Data):
        (Ewk_View_Private_Data::~Ewk_View_Private_Data):
        (_ewk_view_smart_add):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:

2012-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Lion build fix after r131686. Add back if-def around #imports.

        * UIProcess/API/mac/WKView.mm:

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

        [WK2] Fix build break
        https://bugs.webkit.org/show_bug.cgi?id=99670

        Reviewed by Anders Carlsson.

        Unreviewed build fix.

        Include MessageEncoder.h instead of forwarding declaration for
        MessageEncoder class.

        * Scripts/webkit2/messages.py:
        (forward_declarations_and_headers):

2012-10-17  Darin Adler  <darin@apple.com>

        Make subclassing of WKView safer by namespacing methods and eliminating its use as an observer and delegate
        https://bugs.webkit.org/show_bug.cgi?id=99251

        Reviewed by Anders Carlsson.

        Apps that subclass WKView should be able to freely choose method names without conflicting with a name
        we chose to use internally in WKView's own implementation. Thus, it's a good idea to add a "_wk_" prefix
        to any method names that are solely for internal WebKit2 use. Exceptions to this are method names that
        are predetermined by AppKit, or names that are part of API or SPI.

        Apps that subclass WKView should be able to add observers or use the WKView as a delegate without
        conflicting with similar use in the WKView implementations. Thus, changed to use separate block-style
        observers for the window notifications and a separate delegate for the tool tip implementation.

        The challenging aspect of this patch was to research which method names were determined by AppKit.
        There's nothing in the WebKit2 source code that necessarily states this explicitly.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::createDrawingAreaProxy): Updated for new method name.
        (WebKit::PageClientImpl::scrollView): Ditto.
        (WebKit::PageClientImpl::isViewFocused): Ditto.
        (WebKit::PageClientImpl::colorSpace): Ditto.
        (WebKit::PageClientImpl::processDidCrash): Ditto.
        (WebKit::PageClientImpl::pageClosed): Ditto.
        (WebKit::PageClientImpl::didRelaunchProcess): Ditto.
        (WebKit::PageClientImpl::toolTipChanged): Ditto.
        (WebKit::PageClientImpl::setCursor): Ditto.
        (WebKit::PageClientImpl::interpretKeyEvent): Ditto.
        (WebKit::PageClientImpl::setDragImage): Ditto.
        (WebKit::PageClientImpl::setPromisedData): Ditto.
        (WebKit::PageClientImpl::updateTextInputState): Ditto.
        (WebKit::PageClientImpl::resetTextInputState): Ditto.
        (WebKit::PageClientImpl::convertToDeviceSpace): Ditto.
        (WebKit::PageClientImpl::convertToUserSpace): Ditto.
        (WebKit::PageClientImpl::doneWithKeyEvent): Ditto.
        (WebKit::PageClientImpl::setFindIndicator): Ditto.
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived): Ditto.
        (WebKit::PageClientImpl::enterAcceleratedCompositingMode): Ditto.
        (WebKit::PageClientImpl::exitAcceleratedCompositingMode): Ditto.
        (WebKit::PageClientImpl::updateAcceleratedCompositingMode): Ditto.
        (WebKit::PageClientImpl::pluginFocusOrWindowFocusChanged): Ditto.
        (WebKit::PageClientImpl::setPluginComplexTextInputState): Ditto.
        (WebKit::PageClientImpl::didChangeScrollbarsForMainFrame): Ditto.
        (WebKit::PageClientImpl::didCommitLoadForMainFrame): Ditto.
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomRepresentation): Ditto.
        (WebKit::PageClientImpl::customRepresentationZoomFactor): Ditto.
        (WebKit::PageClientImpl::setCustomRepresentationZoomFactor): Ditto.
        (WebKit::PageClientImpl::findStringInCustomRepresentation): Ditto.
        (WebKit::PageClientImpl::countStringMatchesInCustomRepresentation): Ditto.
        (WebKit::PageClientImpl::executeSavedCommandBySelector): Ditto.
        (WebKit::PageClientImpl::showDictationAlternativeUI): Ditto.

        * UIProcess/API/mac/WKView.mm: Simplified imports a bit. No need for conditional imports of basic classes
        like NSTextAlternatives.h and NSAttributedString.h. No need to put internal headers in a separate paragraph.
        Added WKToolTipDelegate class and added _toolTipDelegate and _observers fields to WKViewData.
        (-[WKView becomeFirstResponder]): Updated for new method name.
        (-[WKView resignFirstResponder]): Ditto.
        (-[WKView setFrameSize:]): Ditto.
        (-[WKView _wk_updateWindowAndViewFrames]): Ditto.
        (-[WKView renewGState]): Ditto.
        (-[WKView _wk_setPluginComplexTextInputState:]): Ditto.
        (validateCommandCallback): Ditto.
        (-[WKView displayIfNeeded]): Fixed a comment typo.
        (-[WKView _wk_setMouseDownEvent:]): Updated for new method name.
        (-[WKView mouseDown:]): Ditto.
        (-[WKView mouseUp:]): Ditto.
        (-[WKView acceptsFirstMouse:]): Ditto.
        (-[WKView shouldDelayWindowOrderingForEvent:]): Ditto.
        (-[WKView _wk_handleStyleKeyEquivalent:]): Ditto.
        (-[WKView performKeyEquivalent:]): Ditto.
        (-[WKView _wk_disableComplexTextInputIfNecessary]): Ditto.
        (-[WKView _wk_handlePluginComplexTextInputKeyDown:]): Ditto.
        (-[WKView _wk_tryHandlePluginComplexTextInputKeyDown:]): Ditto.
        (-[WKView keyDown:]): Ditto.
        (-[WKView _wk_executeSavedKeypressCommands]): Ditto.
        (-[WKView _wk_notifyInputContextAboutDiscardedComposition]): Ditto.
        (-[WKView selectedRange]): Ditto.
        (-[WKView hasMarkedText]): Ditto.
        (-[WKView unmarkText]): Ditto.
        (-[WKView setMarkedText:selectedRange:replacementRange:]): Ditto.
        (-[WKView markedRange]): Ditto.
        (-[WKView attributedSubstringForProposedRange:actualRange:]): Ditto.
        (-[WKView characterIndexForPoint:]): Ditto.
        (-[WKView firstRectForCharacterRange:actualRange:]): Ditto.
        (-[WKView _wk_updateWindowVisibility]): Ditto.
        (-[WKView _wk_updateWindowObserversForWindow:]): Replaced the two separate methods
        addWindowObserversForWindow and removeWindowObservers with this single method, since
        the two are only used in tandem. Changed code to use blocks for the observers and to
        keep the observers in an array.
        (-[WKView viewWillMoveToWindow:]): Updated to use _wk_updateWindowObserversForWindow.
        (-[WKView viewDidMoveToWindow]): Updated for new method names.
        (-[WKView _wk_windowScreenDidChange]): Ditto.
        (-[WKView _wk_windowDidBecomeKey:]): Ditto.
        (-[WKView _wk_windowDidChangeScreen:]): Ditto.
        (-[WKView _wk_windowDidResignKey:]): Ditto.
        (-[WKView _wk_windowDidMiniaturize:]): Ditto.
        (-[WKView _wk_windowDidDeminiaturize:]): Ditto.
        (-[WKView _wk_windowDidMove:]): Ditto.
        (-[WKView _wk_windowDidResize:]): Ditto.
        (-[WKView _wk_windowDidOrderOffScreen:]): Ditto.
        (-[WKView _wk_windowDidOrderOnScreen:]): Ditto.
        (-[WKView _wk_windowDidChangeBackingProperties:]): Ditto.
        (-[WKView drawRect:]): Ditto.
        (-[WKView _wk_accessibilityRegisterUIProcessTokens]): Ditto.
        (-[WKView _wk_updateRemoteAccessibilityRegistration:]): Ditto.
        (-[WKView _wk_postFakeMouseMovedEventForFlagsChangedEvent:]): Ditto.
        (-[WKView _wk_intrinsicDeviceScaleFactor]): Ditto.
        (-[WKView _wk_setDrawingAreaSize:]): Ditto.
        (-[WKView _wk_shouldUseTiledDrawingArea]): Ditto.
        (-[WKView _wk_createDrawingAreaProxy]): Ditto.
        (-[WKView _wk_isFocused]): Ditto.
        (-[WKView _wk_processDidCrash]): Ditto.
        (-[WKView _wk_pageClosed]): Ditto.
        (-[WKView _wk_didRelaunchProcess]): Ditto.
        (-[WKView _wk_setCursor:]): Ditto.
        (-[WKView _wk_setUserInterfaceItemState:enabled:state:]): Ditto.
        (-[WKView _wk_tryPostProcessPluginComplexTextInputKeyDown:]): Ditto.
        (-[WKView _wk_doneWithKeyEvent:eventWasHandled:]): Ditto.
        (-[WKView _wk_interpretKeyEvent:savingCommandsTo:]): Ditto.
        (-[WKView _wk_convertToDeviceSpace:]): Ditto.
        (-[WKView _wk_convertToUserSpace:]): Ditto.
        (-[WKView _wk_addTrackingRect:owner:userData:assumeInside:useTrackingNum:]): Ditto.
        (-[WKView _wk_addTrackingRects:owner:userDataList:assumeInsideList:trackingNums:count:]): Ditto.
        (-[WKView _wk_removeTrackingRects:count:]): Ditto.
        (-[WKView _wk_sendToolTipMouseExited]): Ditto.
        (-[WKView _wk_sendToolTipMouseEntered]): Ditto.
        (-[WKView _wk_toolTipChangedFrom:to:]): Changed to use the data object as the tool tip owner so
        the delegate method can be there rather than on WKView.
        (-[WKView _wk_setFindIndicator:fadeOut:animate:]): Updated for new method names.
        (-[WKView _wk_enterAcceleratedCompositingMode:]): Ditto.
        (-[WKView _wk_exitAcceleratedCompositingMode]): Ditto.
        (-[WKView _wk_updateAcceleratedCompositingMode:]): Ditto.
        (-[WKView _wk_setAccessibilityWebProcessToken:]): Ditto.
        (-[WKView _wk_pluginFocusOrWindowFocusChanged:pluginComplexTextInputIdentifier:]): Ditto.
        (-[WKView _wk_setPluginComplexTextInputState:pluginComplexTextInputIdentifier:]): Ditto.
        (-[WKView _wk_setPageHasCustomRepresentation:]): Ditto.
        (-[WKView _wk_didFinishLoadingDataForCustomRepresentationWithSuggestedFilename:dataReference:]): Ditto.
        (-[WKView _wk_customRepresentationZoomFactor]): Ditto.
        (-[WKView _wk_setCustomRepresentationZoomFactor:]): Ditto.
        (-[WKView _wk_findStringInCustomRepresentation:withFindOptions:maxMatchCount:]): Ditto.
        (-[WKView _wk_countStringMatchesInCustomRepresentation:withFindOptions:maxMatchCount:]): Ditto.
        (-[WKView _wk_setDragImage:at:linkDrag:]): Ditto.
        (-[WKView _wk_setPromisedData:withFileName:withExtension:withTitle:withURL:withVisibleURL:withArchive:forPasteboard:]): Ditto.
        (-[WKView _wk_updateSecureInputState]): Ditto.
        (-[WKView _wk_updateTextInputStateIncludingSecureInputState:]): Ditto.
        (-[WKView _wk_resetTextInputState]): Ditto.
        (-[WKView _wk_didChangeScrollbarsForMainFrame]): Ditto.
        (-[WKView _wk_hasFullScreenWindowController]): Ditto.
        (-[WKView _wk_fullScreenWindowController]): Ditto.
        (-[WKView _wk_closeFullScreenWindowController]): Ditto.
        (-[WKView _wk_executeSavedCommandBySelector:]): Ditto.
        (-[WKView _wk_cacheWindowBottomCornerRect]): Ditto.
        (-[WKView _wk_spellCheckerDocumentTag]): Ditto.
        (-[WKView _wk_handleAcceptedAlternativeText:]): Ditto.
        (-[WKView _wk_setSuppressVisibilityUpdates:]): Ditto.
        (-[WKView _wk_suppressVisibilityUpdates]): Ditto.
        (-[WKView _wk_registerDraggedTypes]): Ditto.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Ditto.
        (-[WKView wantsUpdateLayer]): Ditto.
        (-[WKView enableFrameSizeUpdates]): Ditto.
        (-[WKToolTipDelegate initWithPage:]): Added.
        (-[WKToolTipDelegate view:stringForToolTip:point:userData:]): Added.


        * UIProcess/API/mac/WKViewInternal.h: Changed all internal method names to have a _wk_ prefix.
        * UIProcess/API/mac/WKViewPrivate.h: Expose the _shouldUseTiledDrawingArea method formally as SPI
        since Safari is currently overriding this method.

        * UIProcess/mac/CorrectionPanel.mm:
        (WebKit::CorrectionPanel::recordAutocorrectionResponse): Updated for new method names.
        (WebKit::CorrectionPanel::handleAcceptedReplacement): Ditto.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController enterFullScreen:]): Updated for new method names.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto.
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]): Ditto.
        (-[WKFullScreenWindowController _startExitFullScreenAnimationWithDuration:]): Ditto.

        * UIProcess/mac/WebFullScreenManagerProxyMac.mm:
        (WebKit::WebFullScreenManagerProxy::invalidate): Updated for new method names.
        (WebKit::WebFullScreenManagerProxy::close): Ditto.
        (WebKit::WebFullScreenManagerProxy::isFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::enterFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::exitFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganEnterFullScreen): Ditto.
        (WebKit::WebFullScreenManagerProxy::beganExitFullScreen): Ditto.

2012-10-15  Anders Carlsson  <andersca@apple.com>

        Add MessageEncoder and MessageDecoder subclasses
        https://bugs.webkit.org/show_bug.cgi?id=99365

        Reviewed by Andreas Kling.

        This is the first step towards cleaning up IPC handling in WebKit2. The idea is that MessageEncoder and MessageDecoder
        will handle all the IPC specific parts of encoding and decoding (such as attachments), whereas the ArgumentEncoder and ArgumentDecoder
        classes are only used for serializing simpler data types.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Platform/CoreIPC/ArgumentDecoder.cpp:
        (CoreIPC::ArgumentDecoder::create):
        (CoreIPC::ArgumentDecoder::initialize):
        * Platform/CoreIPC/ArgumentDecoder.h:
        (ArgumentDecoder):
        * Platform/CoreIPC/ArgumentEncoder.cpp:
        (CoreIPC::ArgumentEncoder::create):
        (CoreIPC::ArgumentEncoder::ArgumentEncoder):
        * Platform/CoreIPC/ArgumentEncoder.h:
        (ArgumentEncoder):
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::createSyncMessageEncoder):
        (CoreIPC::Connection::sendMessage):
        (CoreIPC::Connection::sendSyncReply):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::sendSyncMessage):
        (CoreIPC::Connection::waitForSyncReply):
        (CoreIPC::Connection::processIncomingSyncReply):
        (CoreIPC::Connection::processIncomingMessage):
        (CoreIPC::Connection::dispatchSyncMessage):
        (CoreIPC::Connection::dispatchMessage):
        * Platform/CoreIPC/Connection.h:
        (Connection):
        (PendingSyncReply):
        (CoreIPC::Connection::PendingSyncReply::releaseReplyDecoder):
        (CoreIPC::Connection::send):
        (CoreIPC::Connection::sendSync):
        (CoreIPC::Connection::waitForAndDispatchImmediately):
        (CoreIPC::Connection::deprecatedSendSync):
        (CoreIPC::Connection::deprecatedSend):
        * Platform/CoreIPC/MessageDecoder.cpp:
        (CoreIPC::MessageDecoder::create):
        (CoreIPC::MessageDecoder::~MessageDecoder):
        (CoreIPC::MessageDecoder::MessageDecoder):
        * Platform/CoreIPC/MessageDecoder.h:
        (CoreIPC):
        (MessageDecoder):
        * Platform/CoreIPC/MessageEncoder.cpp:
        (CoreIPC):
        (CoreIPC::MessageEncoder::create):
        (CoreIPC::MessageEncoder::MessageEncoder):
        (CoreIPC::MessageEncoder::~MessageEncoder):
        * Platform/CoreIPC/MessageEncoder.h:
        (CoreIPC):
        (MessageEncoder):
        * Platform/CoreIPC/MessageSender.h:
        (CoreIPC::MessageSender::send):
        (CoreIPC::MessageSender::sendMessage):
        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):
        (CoreIPC::Connection::sendOutgoingMessage):
        (CoreIPC::createMessageDecoder):
        (CoreIPC::Connection::receiveSourceEventHandler):
        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::processMessage):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Platform/CoreIPC/win/ConnectionWin.cpp:
        (CoreIPC::Connection::readEventHandler):
        (CoreIPC::Connection::writeEventHandler):
        (CoreIPC::Connection::platformCanSendOutgoingMessages):
        (CoreIPC::Connection::sendOutgoingMessage):
        * Scripts/webkit2/messages.py:
        (generate_message_handler):
        * Scripts/webkit2/messages_unittest.py:
        (MessageEncoder):
        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::postMessage):
        (WebKit::WebConnection::handleMessage):
        * Shared/WebConnection.h:
        (CoreIPC):
        * Target.pri:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::postMessageToInjectedBundle):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        (WebKit::WebProcessProxy::deprecatedSend):
        (WebKit::WebProcessProxy::send):
        * WebKit2.xcodeproj/project.pbxproj:
        * 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:
        (DecoderAdapter):
        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::EncoderAdapter):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::postInjectedBundleMessage):
        * win/WebKit2.vcproj:

2012-10-17  Andy Estes  <aestes@apple.com>

        [WebKit2] Add removeChild: to WKDOMNode and make WKDOMText.data read/write
        https://bugs.webkit.org/show_bug.cgi?id=99662

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode removeChild:]):
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMText.mm:
        (-[WKDOMText setData:]):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Memory leak in ewk_download_job_response_set()
        https://bugs.webkit.org/show_bug.cgi?id=99621

        Reviewed by Kenneth Rohde Christiansen.

        No longer call ewk_url_response_ref() on the response
        object in ewk_download_job_response_set() since it will
        be ref'd when assigning to the RefPtr member already.

        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didReceiveResponse):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_response_set):
        * UIProcess/API/efl/ewk_download_job_private.h: Remove several unimplemented functions.

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Compilation warning in Ewk_View when accelerated compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=99613

        Reviewed by Kenneth Rohde Christiansen.

        Fix compilation warning in _ewk_view_smart_calculate() when
        the ACCELERATED_COMPOSITING flag is not set.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use smart pointers inside Ewk_View
        https://bugs.webkit.org/show_bug.cgi?id=99611

        Reviewed by Kenneth Rohde Christiansen.

        Use smart pointers instead of raw ones for several
        Ewk_View members to avoid handling memory manually.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_cursor_set):
        (ewk_view_color_picker_dismiss):
        (ewk_view_color_picker_color_set):

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

        Fix build warnings : -Wunused-parameter, -Wunused-variable
        https://bugs.webkit.org/show_bug.cgi?id=99539

        Reviewed by Kentaro Hara.

        Fix build warnings about unused parameter or unused variable when
        WTF_USE_TILED_BACKING_STORE option is enabled.

        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::createLayer):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::didReceiveLayerTreeCoordinatorProxyMessage):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setVisibleContentsRect):
        (WebKit::DrawingAreaProxy::createTileForLayer):
        (WebKit::DrawingAreaProxy::updateTileForLayer):
        (WebKit::DrawingAreaProxy::removeTileForLayer):
        (WebKit::DrawingAreaProxy::update):
        (WebKit::DrawingAreaProxy::didUpdateBackingStoreState):
        (WebKit::DrawingAreaProxy::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxy::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaProxy::updateAcceleratedCompositingMode):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStorePaintEnd):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp:
        (WebKit::CoordinatedTile::paint):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::scrollNonCompositedContents):
        (WebKit::LayerTreeCoordinator::notifyAnimationStarted):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setVisibleContentsRect):
        (WebKit::LayerTreeHost::setVisibleContentsRectForLayer):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitDownload
        https://bugs.webkit.org/show_bug.cgi?id=96773

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (_WebKitDownloadPrivate):
        (webkitDownloadCreate):
        (webkit_download_get_request):
        (webkit_download_cancel):
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_download_uri):
        (webkitWebContextGetOrCreateDownload):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitCookieManager
        https://bugs.webkit.org/show_bug.cgi?id=96772

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (_WebKitCookieManagerPrivate):
        (webkitCookieManagerFinalize):
        (webkitCookieManagerCreate):
        (webkit_cookie_manager_set_persistent_storage):
        (webkit_cookie_manager_set_accept_policy):
        (webkit_cookie_manager_get_accept_policy):
        (webkitCookieManagerGetDomainsWithCookiesCallback):
        (webkit_cookie_manager_get_domains_with_cookies):
        (webkit_cookie_manager_delete_cookies_for_domain):
        (webkit_cookie_manager_delete_all_cookies):
        * UIProcess/API/gtk/WebKitCookieManagerPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_get_cookie_manager):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=96770

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitContextMenu.cpp:
        (webkitContextMenuCreate):
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemCreate):
        * UIProcess/API/gtk/WebKitContextMenuItemPrivate.h:
        * UIProcess/API/gtk/WebKitContextMenuPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewPopulateContextMenu):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=96769

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitBackForwardList.cpp:
        (_WebKitBackForwardListPrivate):
        (webkitBackForwardListGetOrCreateItem):
        (webkitBackForwardListCreateList):
        (webkitBackForwardListCreate):
        (webkitBackForwardListChanged):
        (webkit_back_forward_list_get_current_item):
        (webkit_back_forward_list_get_back_item):
        (webkit_back_forward_list_get_forward_item):
        (webkit_back_forward_list_get_nth_item):
        (webkit_back_forward_list_get_length):
        (webkit_back_forward_list_get_back_list):
        (webkit_back_forward_list_get_back_list_with_limit):
        (webkit_back_forward_list_get_forward_list):
        (webkit_back_forward_list_get_forward_list_with_limit):
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        (_WebKitBackForwardListItemPrivate):
        (webkitBackForwardListItemFinalized):
        (webkitBackForwardListItemGetOrCreate):
        (webkitBackForwardListItemGetItem):
        (webkit_back_forward_list_item_get_uri):
        (webkit_back_forward_list_item_get_title):
        (webkit_back_forward_list_item_get_original_uri):
        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h:
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (didChangeBackForwardList):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):
        (webkit_web_view_go_to_back_forward_list_item):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitURISchemeRequest
        https://bugs.webkit.org/show_bug.cgi?id=96787

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp:
        (didReceiveURIRequest):
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (_WebKitURISchemeRequestPrivate):
        (webkitURISchemeRequestCreate):
        (webkit_uri_scheme_request_get_web_view):
        (webkitURISchemeRequestReadCallback):
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Make sure the favicon database path is set only once
        https://bugs.webkit.org/show_bug.cgi?id=99597

        Reviewed by Kenneth Rohde Christiansen.

        Make sure the icon database path is set only once by checking
        that the database is not already open before settign the path.
        This avoids printing error message on stderr.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_favicon_database_get):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=96786

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitWebInspector.cpp:
        (_WebKitWebInspectorPrivate):
        (webkitWebInspectorFinalize):
        (webkitWebInspectorCreate):
        (webkit_web_inspector_get_web_view):
        (webkit_web_inspector_is_attached):
        (webkit_web_inspector_attach):
        (webkit_web_inspector_detach):
        (webkit_web_inspector_show):
        (webkit_web_inspector_close):
        (webkit_web_inspector_get_attached_height):
        * UIProcess/API/gtk/WebKitWebInspectorPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_inspector):

2012-10-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitGeolocation classes
        https://bugs.webkit.org/show_bug.cgi?id=96778

        Reviewed by Gustavo Noronha Silva.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp:
        (_WebKitGeolocationPermissionRequestPrivate):
        (webkitGeolocationPermissionRequestAllow):
        (webkitGeolocationPermissionRequestDeny):
        (webkitGeolocationPermissionRequestFinalize):
        (webkitGeolocationPermissionRequestCreate):
        * UIProcess/API/gtk/WebKitGeolocationPermissionRequestPrivate.h:
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp:
        (WebKitGeolocationProvider::create):
        (WebKitGeolocationProvider::WebKitGeolocationProvider):
        (WebKitGeolocationProvider::notifyPositionChanged):
        (WebKitGeolocationProvider::notifyErrorOccurred):
        * UIProcess/API/gtk/WebKitGeolocationProvider.h:
        (WebKitGeolocationProvider):
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (decidePolicyForGeolocationPermissionRequest):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):

2012-10-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Add unit tests for Spelling
        https://bugs.webkit.org/show_bug.cgi?id=95956

        Reviewed by Gyuyoung Kim.

        Add the unit tests which covers API from ewk_text_checker.h
        and text checker settings from ewk_settings.h

        * PlatformEfl.cmake:
        * UIProcess/API/efl/tests/resources/spelling_test.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp: Added.
        (resetCallbacksExecutionStats):
        (onTimeout):
        (onSettingChange):
        (onSpellDocumentTag):
        (onSpellDocumentTagClose):
        (onSpellingCheck):
        (onWordGuesses):
        (onWordLearn):
        (onWordIgnore):
        (TEST_F):

2012-10-17  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Favicons are incorrectly released before receiving the actual data
        https://bugs.webkit.org/show_bug.cgi?id=99492

        Reviewed by Carlos Garcia Campos.

        Don't release the icon for a page URL in the first stage of the
        asynchronous call webkit_favicon_database_get_favicon() but do it
        later instead, to avoid a race condition with the initial
        synchronization process the first time we request an icon which is
        actually in the icon database, but has not made available yet.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (GetFaviconSurfaceAsyncData::~GetFaviconSurfaceAsyncData): Release
        here the icon for the page URL if not a valid icon has been found.
        (GetFaviconSurfaceAsyncData): Add a new boolean parameter to flag
        when a given icon for a page URL should be released.
        (getIconSurfaceSynchronously): Don't release the icon, just return 0.
        (processPendingIconsForPageURL): If a valid icon is got at this
        point, disable the flag shouldReleaseIconForPageURL not to release
        the icon later on.
        (webkit_favicon_database_get_favicon): Make sure we retain the
        icon for a given page URL before trying to retrieve it from the
        IconDatabase, and that we flag it to be released in case not a
        valid icon has been found yet.

2012-10-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>, Michal Roj <m.roj@samsung.com>

        Implementation of spellchecking feature.
        https://bugs.webkit.org/show_bug.cgi?id=91854

        Reviewed by Gyuyoung Kim.

        Add spelling implementation for WebKit2-EFL that is based on Enchant library.

        Additionally the patch provides API to overwrite the default WebKit
        spellchecker implementation as Enchant library doesn't ensure grammar checking.
        Application is able to overwrite it by defining its own implementation and
        setting appropriate callback functions.

        * PlatformEfl.cmake:
        Add enchant-related compiler flags: header paths and the library flag.

        * UIProcess/API/efl/EWebKit2.h:
        Add ewk_text_checker.h to the main WebKit2-EFL's header to be available for applications.

        * UIProcess/API/efl/WebKitTextChecker.cpp: Added.
        Implement the callbacks functions of WKTextChecker.

        (WebKit):
        (WebKit::isContinuousSpellCheckingEnabled):
        (WebKit::setContinuousSpellCheckingEnabled):
        (WebKit::uniqueSpellDocumentTag):
        (WebKit::closeSpellDocumentWithTag):
        (WebKit::checkSpellingOfString):
        (WebKit::guessesForWord):
        (WebKit::learnWord):
        (WebKit::ignoreWord):
        Those functions are directly given as callback functions for WKTextChecker's client.
        They choose between WebKit's spelling implementation and client's ones.

        (WebKit::availableSpellCheckingLanguages):
        (WebKit::updateSpellCheckingLanguages):
        (WebKit::loadedSpellCheckingLanguages):
        They are used by ewk_settings.cpp file and allow to do not
        expose 'textCheckerEnchant'.

        * UIProcess/API/efl/WebKitTextChecker.h: Added.
        Define the functions which choose between WebKit's spelling implementation and
        the client's ones.

        (WebKit):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::_Ewk_Context):
        Attach the spellchecker feature for the context.

        * UIProcess/API/efl/ewk_text_checker.cpp: Added.
        (ewk_text_checker_callbacks_get):
        An internal function to get the client's callback functions.

        * UIProcess/API/efl/ewk_text_checker.h: Added.
        Define API to set the client's own spelling implementation.

        * UIProcess/API/efl/ewk_text_checker_private.h: Added.
        (_Ewk_Text_Checker):
        Define the struct with the client's callbacks responisble for spelling.

        * UIProcess/API/efl/ewk_settings.cpp:
        (onContinuousSpellCheckingIdler):
        The application is notified about the spelling setting change on idler
        to do not block WebKit.
        The the continuous spell checking may be changed through the context menu option.

        (spellCheckingLanguagesSetUpdate):
        The dictionaries are requested on 'idler' to do not block WebKit.

        (spellCheckingLanguagesSet):
        Set the languages.

        (ewk_settings_continuous_spell_checking_change_cb_set):
        Set the callback function used to notify the client when the spelling
        setting was changed by WebKit.

        (ewk_settings_continuous_spell_checking_enabled_get):
        (ewk_settings_continuous_spell_checking_enabled_set):
        API to set/get the continuous spell checking.

        (ewk_settings_spell_checking_available_languages_get):
        (ewk_settings_spell_checking_languages_set):
        (ewk_settings_spell_checking_languages_get):
        API to get/set languages to use by WebKit implementation based on Enchant library.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::state):
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::TextChecker::uniqueSpellDocumentTag):
        (WebKit::TextChecker::closeSpellDocumentWithTag):
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString): Remove WebCore namaspace as it's already defined for the whole file.
        (WebKit::TextChecker::spellingUIIsShowing):
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
        (WebKit::TextChecker::getGuessesForWord):
        (WebKit::TextChecker::learnWord):
        (WebKit::TextChecker::ignoreWord):
        Those call WKTextChecker client's methods.

2012-10-17  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Ewk_Url_Scheme_Request has to be refactored
        https://bugs.webkit.org/show_bug.cgi?id=99549

        Reviewed by Kenneth Rohde Christiansen.

        Ewk_Url_Scheme_Requestis inherited from RefCounted, WKEinaSharedString is used,
        removed weird _Ewk_Url_Scheme_Request.

        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (ewk_url_scheme_request_ref):
        (ewk_url_scheme_request_unref):
        * UIProcess/API/efl/ewk_url_scheme_request.h:
        * UIProcess/API/efl/ewk_url_scheme_request_private.h:
        (Ewk_Url_Scheme_Request):
        (Ewk_Url_Scheme_Request::create):
        (Ewk_Url_Scheme_Request::Ewk_Url_Scheme_Request):

2012-10-17  Mario Sanchez Prada  <msanchez@igalia.com>

        [WK2][GTK] Unneeded GError field in internal structure in WebKitFaviconDatabase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99564

        Reviewed by Carlos Garcia Campos.

        Removed field 'error' from GetFaviconSurfaceAsyncData and updated
        the code accordingly, by using g_simple_async_result_take_error().

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (GetFaviconSurfaceAsyncData): Removed unneeded field.
        (processPendingIconsForPageURL): Avoid using g_propagate_error and
        use g_simple_async_result_take_error directly instead.
        (webkit_favicon_database_get_favicon_finish): Remove unneeded code.

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Start using OwnPtr for non-ref counted ewk types
        https://bugs.webkit.org/show_bug.cgi?id=99472

        Reviewed by Kenneth Rohde Christiansen.

        Use OwnPtr internally for non-ref counted Ewk types to avoid
        manual memory handling.

        Private _new() and _free() functions are removed since they
        are not needed now that the classes are defined in the
        private headers instead of the cpp files. The constructor
        for those classes was made private and factory methods were
        added to encourage developers to use smart pointers instead
        of raw ones.

        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (ewk_back_forward_list_changed):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        (_Ewk_Back_Forward_List):
        (_Ewk_Back_Forward_List::create):
        (_Ewk_Back_Forward_List::_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_cookie_manager_get):
        (ewk_context_favicon_database_get):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didFail):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (_Ewk_Cookie_Manager::_Ewk_Cookie_Manager):
        (_Ewk_Cookie_Manager::~_Ewk_Cookie_Manager):
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        (ewk_cookie_manager_changes_watch):
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        (Cookie_Change_Handler):
        (Cookie_Change_Handler::Cookie_Change_Handler):
        (_Ewk_Cookie_Manager):
        (_Ewk_Cookie_Manager::create):
        * UIProcess/API/efl/ewk_error.cpp:
        (_Ewk_Error::_Ewk_Error):
        (ewk_error_cancellation_get):
        * UIProcess/API/efl/ewk_error_private.h:
        (_Ewk_Error):
        (_Ewk_Error::create):
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (_Ewk_Favicon_Database::_Ewk_Favicon_Database):
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        (IconChangeCallbackData):
        (IconChangeCallbackData::IconChangeCallbackData):
        (IconRequestCallbackData):
        (IconRequestCallbackData::IconRequestCallbackData):
        (_Ewk_Favicon_Database):
        (_Ewk_Favicon_Database::create):
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        (_Ewk_Popup_Menu_Item::_Ewk_Popup_Menu_Item):
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        (_Ewk_Popup_Menu_Item):
        (_Ewk_Popup_Menu_Item::create):
        * UIProcess/API/efl/ewk_url_scheme_request.cpp:
        (_Ewk_Url_Scheme_Request::_Ewk_Url_Scheme_Request):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_initialize):
        (ewk_view_back_forward_list_get):
        (ewk_view_popup_menu_request):
        (ewk_view_popup_menu_close):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didFailLoadWithErrorForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didFailLoadForResource):

2012-10-17  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use WTF RefCounted and RefPtr for Ewk_Resource and Ewk_Form_Submission_Request
        https://bugs.webkit.org/show_bug.cgi?id=99542

        Reviewed by Kenneth Rohde Christiansen.

        Use WTF RefCounted and RefPtr for Ewk_Resource and Ewk_Form_Submission_Request
        to avoid handling raw pointers internally.

        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        (ewk_form_submission_request_ref):
        (ewk_form_submission_request_unref):
        (ewk_form_submission_request_submit):
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        (_Ewk_Form_Submission_Request):
        (_Ewk_Form_Submission_Request::~_Ewk_Form_Submission_Request):
        (_Ewk_Form_Submission_Request::create):
        (_Ewk_Form_Submission_Request::_Ewk_Form_Submission_Request):
        * UIProcess/API/efl/ewk_resource.cpp:
        (ewk_resource_ref):
        (ewk_resource_unref):
        * UIProcess/API/efl/ewk_resource_private.h:
        (_Ewk_Resource):
        (_Ewk_Resource::create):
        (_Ewk_Resource::_Ewk_Resource):
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        (ewk_view_load_provisional_started):
        * UIProcess/API/efl/ewk_view_form_client.cpp:
        (willSubmitForm):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):

2012-10-16  Dongwoo Joshua Im  <dw.im@samsung.com>

        [mac] Fix build break - processPath should be initialized.
        https://bugs.webkit.org/show_bug.cgi?id=99541

        Unreviewed build fix.

        Initialize processPath as nil.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):

2012-10-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add factory methods for refcounted Ewk types
        https://bugs.webkit.org/show_bug.cgi?id=99479

        Reviewed by Gyuyoung Kim.

        Add factory methods to refcounted Ewk types that return
        a PassRefPtr for refcounted Ewk types. Their constructors
        were made privates as well, in order to promote the use
        of smart pointers internally.

        Remove _new() functions for refcounted Ewk types as they
        are no longer needed now that the classes are defined
        in the private headers instead of the cpp files.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (addItemToWrapperCache):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (_Ewk_Back_Forward_List_Item):
        (_Ewk_Back_Forward_List_Item::create):
        (_Ewk_Back_Forward_List_Item::_Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didReceiveResponse):
        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (didNavigateWithNavigationData):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_request_get):
        (ewk_download_job_state_set):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::create):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_extra_names_get):
        * UIProcess/API/efl/ewk_intent_private.h:
        (_Ewk_Intent):
        (_Ewk_Intent::create):
        (_Ewk_Intent::_Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (ewk_intent_service_disposition_get):
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::create):
        (_Ewk_Intent_Service::_Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (ewk_navigation_data_url_get):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::create):
        (_Ewk_Navigation_Data::_Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::create):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (ewk_url_request_http_method_get):
        * UIProcess/API/efl/ewk_url_request_private.h:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::create):
        (_Ewk_Url_Request::_Ewk_Url_Request):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (ewk_url_response_content_length_get):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::create):
        (_Ewk_Url_Response::_Ewk_Url_Response):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_intent_deliver):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (registerIntentServiceForFrame):
        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):
        (didSendRequestForResource):
        (didReceiveResponseForResource):

2012-10-16  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12462993> Use a sensible fallback for cache directory

        Reviewed by Sam Weinig.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::createNewWebProcess): Cache directory
        should be created if it doesn't exist yet, so use createHandleForReadWriteDirectory.

        * UIProcess/mac/WebContextMac.mm: (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        We don't want caches in home directory, they should go to ~/Library/Caches.

2012-10-16  Andy Estes  <aestes@apple.com>

        [WebKit2] Create Objective-C API for adding and removing user scripts
        https://bugs.webkit.org/show_bug.cgi?id=99528

        Reviewed by Anders Carlsson.

        This patch adds the following API to WKBrowsingContextGroup:

        - (void)addUserScript:(NSString *)source baseURL:(NSURL *)baseURL whitelistedURLPatterns:(NSArray *)whitelist blacklistedURLPatterns:(NSArray *)blacklist injectionTime:(WKUserScriptInjectionTime)injectionTime mainFrameOnly:(BOOL)mainFrameOnly;
        - (void)removeAllUserScripts;

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserScript): Define a C SPI equivalent of addUserScript: that calls existing methods in WebPageGroup.
        (WKPageGroupRemoveAllUserScripts): Ditto for removeAllUserScripts.
        * UIProcess/API/C/WKPageGroup.h: Declare the above-mentioned functions.
        * UIProcess/API/mac/WKBrowsingContextGroup.h: Declare the Objective-C API
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup addUserScript:baseURL:whitelist:blacklist:injectionTime:mainFrameOnly:]): Call WKPageGroupAddUserScript.
        (-[WKBrowsingContextGroup removeAllUserScripts]): Call WKPageGroupRemoveAllUserScripts.
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::removeAllUserScripts): This was calling PageGroup::removeUserStyleSheetsFromWorld() by mistake.

2012-10-16  Yael Aharon  <yael.aharon@intel.com>

        [EFL][WK2][AC] Url bar should not be covered by the web view
        https://bugs.webkit.org/show_bug.cgi?id=99485

        Reviewed by Laszlo Gombos.

        When accelerated compositing is enabled, the url bar is covered by the web view.
        This was caused by 2 issues:
        - _ewk_view_smart_calculate was called before the first gl surface was created,
          so an early return caused it to not save the new view position.
        - When painting the view, we need to take into account the position of
          the view within the window, i.e. the url bar.

        * UIProcess/API/efl/EflViewportHandler.cpp:
        (WebKit::EflViewportHandler::display):
        * UIProcess/API/efl/EflViewportHandler.h:
        (EflViewportHandler):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_smart_calculate):
        (ewk_view_display):

2012-10-16  Jian Li  <jianli@chromium.org>

        Rename feature define ENABLE_WIDGET_REGION to ENABLE_DRAGGBALE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=98975

        Reviewed by Adam Barth.

        Renaming is needed to better match with the draggable region code.

        * Configurations/FeatureDefines.xcconfig:

2012-10-16  Tony Chang  <tony@chromium.org>

        Unreviewed, revert previous WebKit2.def change. Exports shouldn't matter.

        * win/WebKit2.def:

2012-10-16  Tony Chang  <tony@chromium.org>

        Unreviewed, try to fix the Apple Win build.

        * win/WebKit2.def:

2012-10-16  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Implement testRunner.dumpSelectionRect() in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=69545

        Reviewed by Simon Fraser.

        * Shared/API/c/WKImage.h: Add another option that controls whether
        the selection rectangle should be painted onto the snapshot.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toSnapshotOptions): Add a case for the new option
        mentioned above.
        * Shared/ImageOptions.h: More plumbing for the option above.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions): Draw a red rectangle
        around the selection area when
        SnapshotOptionsPaintSelectionRectangle is set.

2012-10-16  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Have intent classes subclass RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=99467

        Reviewed by Kenneth Rohde Christiansen.

        Make Ewk_Intent and Ewk_Intent_Service subclass
        RefCounted so that we can use smart pointers
        internally.

        * UIProcess/API/efl/ewk_intent.cpp:
        (ewk_intent_ref):
        (ewk_intent_unref):
        * UIProcess/API/efl/ewk_intent_private.h:
        (_Ewk_Intent):
        (_Ewk_Intent::_Ewk_Intent):
        * UIProcess/API/efl/ewk_intent_service.cpp:
        (ewk_intent_service_ref):
        (ewk_intent_service_unref):
        * UIProcess/API/efl/ewk_intent_service_private.h:
        (_Ewk_Intent_Service):
        (_Ewk_Intent_Service::_Ewk_Intent_Service):
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didReceiveIntentForFrame):
        (registerIntentServiceForFrame):

2012-10-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Inherit Ewk_Download_Job, Ewk_Back_Forward_List_Item, Ewk_Url_Response, Ewk_Navigation_Policy_Decision from RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=99455

        Reviewed by Kenneth Rohde Christiansen.

        The API objects mentioned in bug title are inherited from WTF::RefCounted which made it possible
        to use smart pointers with them.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::handleDownloadRequest):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::_Ewk_Back_Forward_List):
        (addItemToWrapperCache):
        (ewk_back_forward_list_changed):
        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (ewk_back_forward_list_item_ref):
        (ewk_back_forward_list_item_unref):
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        (_Ewk_Back_Forward_List_Item):
        (_Ewk_Back_Forward_List_Item::_Ewk_Back_Forward_List_Item):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        (ewk_context_download_job_add):
        (ewk_context_download_job_get):
        (ewk_context_download_job_remove):
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didReceiveResponse):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_ref):
        (ewk_download_job_unref):
        (ewk_download_job_response_get):
        (ewk_download_job_estimated_progress_get):
        * UIProcess/API/efl/ewk_download_job_private.h:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (ewk_navigation_policy_decision_ref):
        (ewk_navigation_policy_decision_unref):
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        * UIProcess/API/efl/ewk_url_response.cpp:
        (ewk_url_response_ref):
        (ewk_url_response_unref):
        * UIProcess/API/efl/ewk_url_response_private.h:
        (_Ewk_Url_Response):
        (_Ewk_Url_Response::_Ewk_Url_Response):
        * UIProcess/API/efl/ewk_view_policy_client.cpp:
        (decidePolicyForNavigationAction):
        (decidePolicyForNewWindowAction):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didSendRequestForResource):
        (didReceiveResponseForResource):

2012-10-16  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][EFL] Crash in _ewk_view_on_favicon_changed()
        https://bugs.webkit.org/show_bug.cgi?id=99454

        Reviewed by Kenneth Rohde Christiansen.

        Added missing null check to avoid a crash if the current URL of
        view is NULL.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_on_favicon_changed):

2012-10-16  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Provide WKURL API for resolving the relative URL with the given base URL
        https://bugs.webkit.org/show_bug.cgi?id=99317

        Reviewed by Kenneth Rohde Christiansen.

        Added new constructor function WKURLCreateWithBaseURL for WKURL which
        resolves the relative URL with the given base URL.

        * Shared/API/c/WKURL.cpp:
        (WKURLCreateWithBaseURL):
        * Shared/API/c/WKURL.h:
        * Shared/WebURL.h:
        (WebKit::WebURL::create):
        (WebURL):
        (WebKit::WebURL::WebURL):

2012-10-16  Szilard Ledan  <szledan@inf.u-szeged.hu>

        Separate WebKit2 instances use the same local storage
        https://bugs.webkit.org/show_bug.cgi?id=89666

        Reviewed by Simon Hausmann.

        For multi-threaded (parallel) testing, WTRs must not write into the same directory.
        To avoid that, results need to be stored in the location defined by DUMPRENDERTREE_TEMP
        environment variable that is created by NRWT. To do that, WebContext needed to be
        extended with diskCacheDirectory and cookieStorageDirectory APIs.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDiskCacheDirectory):
        (WKContextSetCookieStorageDirectory):
        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::diskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::cookieStorageDirectory):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::setDiskCacheDirectory):
        (WebKit::WebContext::setCookieStorageDirectory):
        (WebContext):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * UIProcess/win/WebContextWin.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/win/WebProcessWin.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2012-10-16  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Fix Cache Model API tests
        https://bugs.webkit.org/show_bug.cgi?id=99427

        Reviewed by Gyuyoung Kim.

        Cache Model API tests caused "Segmentation fault" because the default value 
        for cache model was incorrect.

        Fix the default value for cache model.
        Fix Cache Model API tests.

        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Regression(r131337): Made 3 Cookie Manager API tests fail
        https://bugs.webkit.org/show_bug.cgi?id=99416

        Reviewed by Gyuyoung Kim.

        After r131337, the favicon database is enabled and it causes new
        requests to "/favicon.ico" on the http server. The http server used
        in the cookie manager test was too strict and was calling FAIL() for
        any unrecognized HTTP request (such as the one to /favicon.ico).
        This patch makes the http server in cookie manager API tests less
        strict.

        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (serverCallback):

2012-10-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r131349.
        http://trac.webkit.org/changeset/131349
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Revert r131349 because API test is broken by this commit.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-10-15  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Add APIs for cache model
        https://bugs.webkit.org/show_bug.cgi?id=98889

        Reviewed by Gyuyoung Kim.

        Add ewk_context_cache_model_set(), ewk_context_cache_model_get().

        The cache model means the level for the cache capacity.
        If EWK_CACHE_MODEL_DOCUMENT_BROWSER, the biggest cache capacity will be set.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_cache_model_set):
        (ewk_context_cache_model_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

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

        Fix unused parameter build warning.
        https://bugs.webkit.org/show_bug.cgi?id=99400

        Reviewed by Gyuyoung Kim.

        Remove the name of unused parameters to fix the build warning (-Wunused-parameter).

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::getSharedWorkerProcessConnection):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleEditingCommand):
        (WebKit::NetscapePlugin::isEditingCommandEnabled):

2012-10-15  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/12470680> Font’s fast code path doesn’t support kerning and ligatures
        https://bugs.webkit.org/show_bug.cgi?id=99113

        Reviewed by Tim Horton.

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

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][CAIRO] Use cairo_format_stride_for_width() in ShareableBitmap
        https://bugs.webkit.org/show_bug.cgi?id=99332

        Reviewed by Martin Robinson.

        Cairo implementation of ShareableBitmap is calling
        cairo_image_surface_create_for_data() to create an image surface for
        the provided pixel data. However, it was passing "m_size.width() * 4"
        for the stride argument instead of calling
        cairo_format_stride_for_width().

        The Cairo documentation states:
        "Note that the stride may be larger than width*bytes_per_pixel to
        provide proper alignment for each pixel and row. This alignment is
        required to allow high-performance rendering within cairo. The correct
        way to obtain a legal stride value is to call
        cairo_format_stride_for_width() with the desired format and maximum
        image width value, and then use the resulting stride value to allocate
        the data and to create the image surface."

        This patch calls cairo_format_stride_for_width() is ShareableBitmap
        in order to obtain a legal stride value to make sure we provide proper
        alignment for each pixel and row, and allow high-performance rendering
        within cairo.

        * Shared/ShareableBitmap.h:
        (ShareableBitmap):
        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit):
        (WebKit::ShareableBitmap::numBytesForSize):
        (WebKit::createSurfaceFromData):
        (WebKit::ShareableBitmap::paint):
        (WebKit::ShareableBitmap::createCairoSurface):

2012-10-15  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Refactoring initialization and shutdown codes of EFL libraries.
        https://bugs.webkit.org/show_bug.cgi?id=97173

        Reviewed by Gyuyoung Kim.

        Initialize and shutdown the EFL libraries in the ewk_main.cpp for ui
        process and WebProcessMainEfl.cpp for web process.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):

2012-10-15  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Provide implementation for PageClientImpl::toolTipChanged()
        https://bugs.webkit.org/show_bug.cgi?id=98589

        Reviewed by Kenneth Rohde Christiansen.

        Implement PageClientImpl::toolTipChanged() to emit signal 'tooltip,text,set' with a tooltip text,
        or 'tooltip,text,unset' if tooltip was unset.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::toolTipChanged):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_tooltip_text_set):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:

2012-10-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Partial build fix for Windows after r131308.

        * WebKit2Prefix.h:
        * WebProcess/WebKitMain.cpp:
        (WebKitMain):

2012-10-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131306 and r131307.
        http://trac.webkit.org/changeset/131306
        http://trac.webkit.org/changeset/131307
        https://bugs.webkit.org/show_bug.cgi?id=99354

        It made layout testing extremely slow again (Requested by
        Ossy_night on #webkit).

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-15  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement Favicons API
        https://bugs.webkit.org/show_bug.cgi?id=99087

        Reviewed by Kenneth Rohde Christiansen.

        Add support for favicon API to EFL WK2 port via
        Ewk_Favicon_Database. The API can be used to
        retrieve the favicon URL and data for a given
        page URL.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (_Ewk_Context::~_Ewk_Context):
        (ewk_context_favicon_database_get): Add getter to retrieve the favicon
        database instance from the context.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_favicon_database.cpp: Added.
        (IconChangeCallbackData):
        (IconChangeCallbackData::IconChangeCallbackData):
        (IconRequestCallbackData):
        (IconRequestCallbackData::IconRequestCallbackData):
        (_Ewk_Favicon_Database):
        (_Ewk_Favicon_Database::_Ewk_Favicon_Database):
        (didChangeIconForPageURL):
        (getIconSurfaceSynchronously):
        (iconDataReadyForPageURL):
        (ewk_favicon_database_new):
        (ewk_favicon_database_free):
        (ewk_favicon_database_icon_url_get):
        (AsyncIconRequestResponse):
        (AsyncIconRequestResponse::AsyncIconRequestResponse):
        (respond_icon_request_idle):
        (ewk_favicon_database_async_icon_get):
        (ewk_favicon_database_icon_change_callback_add):
        (ewk_favicon_database_icon_change_callback_del):
        * UIProcess/API/efl/ewk_favicon_database.h: Added.
        * UIProcess/API/efl/ewk_favicon_database_private.h: Copied from Source/WebKit2/UIProcess/efl/WebContextEfl.cpp.
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (_Ewk_View_Private_Data::~_Ewk_View_Private_Data):
        (_ewk_view_on_favicon_changed):
        (_ewk_view_initialize):
        (ewk_view_url_update):
        (ewk_view_icon_url_get): Add a getter to the view to retrieve the icon URL for
        the page that is currently shown.
        (ewk_view_update_icon):
        * UIProcess/API/efl/ewk_view.h: Emit a new "icon,changed" signal on the view whenever
        the view's icon has changed.
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/resources/blank.ico: Added.
        * UIProcess/API/efl/tests/test_ewk2_context.cpp: Add unit test for new favicon database getter.
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp: Added unit tests for the new Ewk_Favicon_Database API.
        (serverCallback):
        (onIconChanged):
        (TEST_F):
        (onIconDataReady):
        (IconRequestData):
        (requestFaviconData):
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultIconDatabasePath): Return a valid default path for the icon database.

2012-10-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Share resources installed for inspector
        https://bugs.webkit.org/show_bug.cgi?id=98991

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed build script which install resources to share.
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL): Modified not to use makeString.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Changed resource path.

2012-10-13  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Add SharedWorkerProcess
        https://bugs.webkit.org/show_bug.cgi?id=99218

        Reviewed by Sam Weinig.

        Not yet functional, just some boilerplate code.

        * Configurations/SharedWorkerProcess.xcconfig: Added.

        * DerivedSources.make: Generate message dispatch for SharedWorkerProcess and
        SharedWorkerProcessProxy.

        * Platform/CoreIPC/MessageID.h: Added shared worker messages classes.

        * Scripts/webkit2/messages.py: (struct_or_class):
        SharedWorkerProcessCreationParameters is a struct.

        * Shared/SharedWorkerProcessCreationParameters.cpp: Added.
        * SharedWorkerProcess/Info.plist: Added.
        * SharedWorkerProcess/SharedWorkerProcess.cpp: Added.
        * SharedWorkerProcess/SharedWorkerProcess.h: Added.
        * SharedWorkerProcess/SharedWorkerProcess.messages.in: Added.
        * SharedWorkerProcess/SharedWorkerProcessMain.h: Added.
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm: Added.
        * SharedWorkerProcess/mac/SharedWorkerProcessMainMac.mm: Added.
        * SharedWorkerProcess/mac/com.apple.WebKit.SharedWorkerProcess.sb: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.cpp: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessManager.h: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.cpp: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.h: Added.
        * UIProcess/SharedWorkers/SharedWorkerProcessProxy.messages.in: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        Added SharedWorkerProcess boilerplate, modeled after PluginProcess.

        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        Added getSharedWorkerProcessConnection() message.

        * WebProcess/WebKitMain.cpp: (WebKitMain):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::createProcess):
        Added branches for SharedWorkerProcess.

        * Platform/CoreIPC/HandleMessage.h: (CoreIPC::callMemberFunction): Added a version
        for delayed reply messages with two arguments.

2012-10-15  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Added API to convert a QImage to a WKImage so we can
        pass it to cross-platform code.

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-15  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Separate Qt WebKit into Qt WebKit and Qt WebKit Widgets
        https://bugs.webkit.org/show_bug.cgi?id=88162

        Reviewed by Kenneth Rohde Christiansen.

        Rename the QtWebKit module to QtWebKitWidgets.

        * PluginProcess.pro:
        * UIProcess/API/qt/tests/inspectorserver/inspectorserver.pro:
        * UIProcess/API/qt/tests/publicapi/publicapi.pro:
        * UIProcess/API/qt/tests/qmltests/DesktopBehavior.pro:
        * UIProcess/API/qt/tests/qmltests/WebView.pro:
        * UIProcess/API/qt/tests/qquickwebview/qquickwebview.pro:
        * UIProcess/API/qt/tests/qrawwebview/qrawwebview.pro:
        * UIProcess/API/qt/tests/tests.pri:
        * WebProcess.pro:

2012-10-15  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Encapsulate ref counting for Ewk objects in a parent class
        https://bugs.webkit.org/show_bug.cgi?id=99174

        Reviewed by Kenneth Rohde Christiansen.

        Ewk objects can be inherited from RefCounted class, so that ref counting is encapsulated and RefPtr can be used.
        Applied the new approach for Ewk_Navigation_Data and Ewk_Url_Request objects as an example.
        The requirement of adoption can be satisfied as long as we keep dealing with smart pointers only. 
        In case external client provides an already referenced object as a raw pointer, relaxAdoptionRequirement() can be set
        explicitly in this specific place.

        * UIProcess/API/efl/ewk_context_history_client.cpp:
        (didNavigateWithNavigationData):
        * UIProcess/API/efl/ewk_download_job.cpp:
        (_Ewk_Download_Job):
        (_Ewk_Download_Job::_Ewk_Download_Job):
        (_Ewk_Download_Job::~_Ewk_Download_Job):
        (ewk_download_job_request_get):
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        (ewk_navigation_data_ref):
        (ewk_navigation_data_unref):
        (ewk_navigation_data_original_request_get):
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        (_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::_Ewk_Navigation_Data):
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::_Ewk_Navigation_Policy_Decision):
        (_Ewk_Navigation_Policy_Decision::~_Ewk_Navigation_Policy_Decision):
        (ewk_navigation_policy_request_get):
        (ewk_navigation_policy_decision_new):
        * UIProcess/API/efl/ewk_url_request.cpp:
        (ewk_url_request_ref):
        (ewk_url_request_unref):
        * UIProcess/API/efl/ewk_url_request_private.h:
        (_Ewk_Url_Request):
        (_Ewk_Url_Request::_Ewk_Url_Request):
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):
        (didSendRequestForResource):

2012-10-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Regression(r130031) coverRect is used in wrong coordinates.
        https://bugs.webkit.org/show_bug.cgi?id=97777

        Reviewed by Jocelyn Turcotte.

        Convert coverRect from screen coordinates to content coordinates before using it
        outside tiled-backing store.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (WebCore::CoordinatedGraphicsLayer::coverRect):

2012-10-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add .in files in WebKit2/Shared to EXTRA_DIST.
        * GNUmakefile.list.am: Remove deleted file.

2012-10-14  Anders Carlsson  <andersca@apple.com>

        Fix the world.

        Add back a forgotten !.

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

2012-10-14  Sam Weinig  <sam@webkit.org>

        Stop all the crashing!

        The WebProcessProxy is not the Connection::Client, the WebConnectionToWebProcess is.

        * UIProcess/WebConnectionToWebProcess.h:
        (WebKit::WebConnectionToWebProcess::webProcessProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):

2012-10-14  Anders Carlsson  <andersca@apple.com>

        Re-land of "WebContext should be a MessageReceiver"
        https://bugs.webkit.org/show_bug.cgi?id=98958

        Reviewed by Sam Weinig.

        Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
        knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::client):
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::dispatchMessage):
        (WebKit::WebContext::dispatchSyncMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):
        (WebKit):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-14  Anders Carlsson  <andersca@apple.com>

        WebPage::PostInjectedBundleMessage should be a variadic message
        https://bugs.webkit.org/show_bug.cgi?id=99277

        Reviewed by Sam Weinig.

        Don't use a data reference for messages posted to the injected bundle; they could contain data that requires attachments
        (such as shared memory).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-10-14  Sam Weinig  <sam@webkit.org>

        Simplify user content in WebKit2 by using WebCore::UserStyleSheet and WebCore::UserScript directly
        https://bugs.webkit.org/show_bug.cgi?id=99276

        Reviewed by Anders Carlsson.

        - Removes UserContentContainer in favor of Vector<UserStyleSheet> and Vector<UserScript> right on WebPageGroupData.
        - Adds support for UserScripts, but does not expose API for it just yet.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebKit2.xcodeproj/project.pbxproj:
        * win/WebKit2.vcproj:
        * Shared/UserContentContainer.cpp: Removed.
        * Shared/UserContentContainer.h: Removed.
        Remove UserContentContainer.h/cpp.

        * Shared/API/c/WKBase.h:
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toUserScriptInjectionTime):
        (WebKit::toUserContentInjectedFrames):
        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        Move UserContent enums to WKBase.h so they can be used from both processes, and move the
        casts to WKSharedAPICast.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        Add coders for UserStyleSheet and UserScript.

        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode):
        (WebKit::WebPageGroupData::decode):
        * Shared/WebPageGroupData.h:
        (WebPageGroupData):
        Replace UserContentContainer with Vector<UserStyleSheet> and Vector<UserScript>. Stop using
        CoreIPC::In() and CoreIPC::Out(), and instead just call encode/decode multiple times.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserStyleSheet):
        Pass the parameters with as little conversion as possible to the C++ to avoid doing too much
        work in the API layer.

        * UIProcess/WebPageGroup.cpp:
        (WebKit::toStringVector):
        (WebKit::WebPageGroup::addUserStyleSheet):
        (WebKit::WebPageGroup::addUserScript):
        (WebKit::WebPageGroup::removeAllUserStyleSheets):
        (WebKit::WebPageGroup::removeAllUserScripts):
        (WebKit::WebPageGroup::removeAllUserContent):
        * UIProcess/WebPageGroup.h:
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy):
        (WebKit::WebPageGroupProxy::addUserStyleSheet):
        (WebKit::WebPageGroupProxy::addUserScript):
        (WebKit::WebPageGroupProxy::removeAllUserScripts):
        (WebKit::WebPageGroupProxy::removeAllUserContent):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebPageGroupProxy):
        * WebProcess/WebPage/WebPageGroupProxy.messages.in:
        Add support for user scripts and update to use UserScript and UserStyleSheet directly.

2012-10-14  Jon Lee  <jonlee@apple.com>

        Allow notification origin permission request when no js callback is provided
        https://bugs.webkit.org/show_bug.cgi?id=63615
        <rdar://problem/11059590>

        Reviewed by Sam Weinig.

        Null checks already exist for both standard and legacy API callbacks, so no changes are needed here
        like there are in WebKit 1. The checks existed because the callbacks are held in a hash map used to keep
        track of pending requests.

        Also, add a check for a null callback when short circuiting.

        * WebProcess/Notifications/NotificationPermissionRequestManager.cpp:
        (WebKit::NotificationPermissionRequestManager::startRequest):

2012-10-14  Anders Carlsson  <andersca@apple.com>

        Move QDataStream functions into HistoryItemQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99203

        Reviewed by Andreas Kling.

        Forward declare QTransform.

        * Shared/qt/WebEventFactoryQt.h:

2012-10-12  Anders Carlsson  <andersca@apple.com>

        Explicitly mark messages variadic
        https://bugs.webkit.org/show_bug.cgi?id=99229

        Reviewed by Dan Bernstein.

        Instead of deciding whether messages are variadic based on their type, decide it based on the existence of a 'Variadic' message attribute.

        * Scripts/webkit2/messages.py:
        (messages_to_kind_enum):
        (decode_type):
        (async_case_statement):
        (sync_case_statement):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebProcess.messages.in:

2012-10-14  Sam Weinig  <sam@webkit.org>

        Make UserScript and UserStyleSheet value objects that are copyable
        https://bugs.webkit.org/show_bug.cgi?id=99275

        Reviewed by Tim Horton.

        * Shared/UserContentContainer.cpp:
        (WebKit::toStringVector):
        (WebKit::UserContentContainer::Item::Item):
        (WebKit::UserContentContainer::Item::encode):
        (WebKit::UserContentContainer::Item::decode):
        * Shared/UserContentContainer.h:
        (WebKit::UserContentContainer::Item::whitelist):
        (WebKit::UserContentContainer::Item::blacklist):
        Switch UserContentContainer::Item to store Vector<String> instead of ImmutableArray, easing
        transition to new PageGroup function signatures.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::toStringVector):
        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::setUserScripts):
        Update for new PageGroup function signatures.

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Unreviewed build fix, hand ivar name to @synthesize since it doesn't match the property name.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Unreviewed, attempt to manipuate SVN to retain the history of SimplePDFPlugin.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Replaced with Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.h.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Replaced with Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.mm.

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Reviewed by Dan Bernstein.

        Add PDFPlugin, which uses PDFKit to display PDFs, instead of using PDFKit in the
        UIProcess for full-page PDFs. This new plugin will also be used for inline PDFs
        in place of SimplePDFPlugin (née BuiltInPDFView).

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_PDF_PLUGIN.

        Support three new Plugin methods:
            - handleEditingCommand, which hands editing commands to the Plugin
            - isEditingCommandEnabled, which validates editing commands via the Plugin
            - handlesPageScaleFactor, which asks the plugin whether it wants to
            opt into a mode where the WebPage doesn't scale in the ordinary fashion,
            but instead proxies the Plugin's scale factor, so full-page plugins
            can handle scale factor changes however they need to.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::handleEditingCommand): Proxy handleEditingCommand to the Plugin.
        (WebKit::PluginControllerProxy::isEditingCommandEnabled): Proxy isEditingCommandEnabled to the Plugin.
        (WebKit::PluginControllerProxy::handlesPageScaleFactor): Proxy handlesPageScaleFactor to the Plugin.
        * PluginProcess/PluginControllerProxy.h:
        (PluginControllerProxy): Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.
        * PluginProcess/PluginControllerProxy.messages.in: Add HandleEditingCommand, IsEditingCommandEnabled, and HandlesPageScaleFactor.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::handleEditingCommand): NPAPI plugins support no editing commands by default.
        (WebKit::NetscapePlugin::isEditingCommandEnabled): NPAPI plugins enable no editing commands by default.
        (WebKit::NetscapePlugin::handlesPageScaleFactor): NPAPI plugins do not handle page scale factor changes themselves by default.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h: Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.

        Add PDFPluginEnabled preference. If it is not enabled, or the plugin is
        not built, behavior will be the same as before (the UIProcess PDFView will
        handle full-page PDFs, and SimplePDFPlugin will handle inline ones).

        * Shared/WebPreferencesStore.h: Add PDFPluginEnabled preference.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPDFPluginEnabled): Setter for PDFPluginEnabled preference.
        (WKPreferencesGetPDFPluginEnabled): Getter for PDFPluginEnabled preference.
        * UIProcess/API/C/WKPreferencesPrivate.h: Expose WKPreferences(Set|Get)PDFPluginEnabled as a private preference.

        Move support for MIME types with custom representations onto WebPage instead of WebProcess.
        This allows us to use preferences to control the use of custom representations (for example,
        it allows us to have a preference to toggle between UIProcess's PDFView and PDFPlugin).

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Don't pass mimeTypesWithCustomRepresentation
        into the WebProcess, as we can compute it later.
        (WebKit::WebProcessCreationParameters::decode): Same, on the decode side.
        * Shared/WebProcessCreationParameters.h: Remove mimeTypesWithCustomRepresentation.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Don't add pdfAndPostScriptMIMETypes to mimeTypesWithCustomRepresentation here, as we're now computing it on WebPage instead.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::canPluginHandleResponse): Move to WebPage from WebProcess so we can use WebPage's new notion of mimeTypesWithCustomRepresentation.
        (WebKit::WebPage::shouldUseCustomRepresentationForResponse): Move to WebPage from WebProcess so we can use WebPage's new notion of mimeTypesWithCustomRepresentation.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::pdfAndPostScriptMIMETypes): Return the set of MIME types used for PDF and PostScript, which are handled with PDFView if PDFPlugin is not available or enabled.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Don't keep m_mimeTypesWithCustomRepresentations on WebProcess, it's owned by WebPage now.
        * WebProcess/WebProcess.h: Move canPluginHandleResponse and shouldUseCustomRepresentationForResponse to WebPage.

        Add PDFLayerController to the set of classes returned by PDFKitImports.

        * Shared/mac/PDFKitImports.h: Add pdfLayerControllerClass.
        * Shared/mac/PDFKitImports.mm:
        (WebKit::pdfLayerControllerClass): Find and return the PDFLayerController class.

        Add PDFPlugin, which inherits from SimplePDFPlugin, but uses PDFKit instead
        of CoreGraphics, to provide additional interactive functionality.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendDidGetPlugins): Add PDFPlugin to the set of supported plugins.
        * WebKit2.xcodeproj/project.pbxproj: Add PDFPlugin, rename BuiltInPDFView to SimplePDFPlugin.
        * WebProcess/Plugins/PDF/PDFPlugin.h: Added.
        * WebProcess/Plugins/PDF/PDFPlugin.mm: Added.

        PDFPlugin uses layers for scrollbars.

        (-[WKPDFPluginScrollbarLayer initWithPDFPlugin:WebKit::]): Initialize our CALayer subclass,
        storing its parent PDFPlugin so it can delegate drawing there.
        (-[WKPDFPluginScrollbarLayer actionForKey:]): Disable CoreAnimation implicit actions.
        (-[WKPDFPluginScrollbarLayer drawInContext:]): Delegate scrollbar drawing to PDFPlugin.

        Implement the PDFLayerController delegate, eventually forwarding calls back to PDFPlugin.

        (-[WKPDFLayerControllerDelegate initWithPDFPlugin:WebKit::]): Initialize our delegate,
        storing its parent PDFPlugin so it can forward delegate calls there.
        (-[WKPDFLayerControllerDelegate updateScrollPosition:]): Update PDFPlugin's notion of the
        current scroll position, when PDFKit changes the scroll position itself.
        (-[WKPDFLayerControllerDelegate writeItemsToPasteboard:withTypes:]): Write the given
        array of NSData objects to the pasteboard with the given types.

        The following PDFLayerController delegate methods will be implemented in the future.

        (-[WKPDFLayerControllerDelegate showDefinitionForAttributedString:atPoint:]):
        (-[WKPDFLayerControllerDelegate performWebSearch:]):
        (-[WKPDFLayerControllerDelegate openWithPreview]):
        (-[WKPDFLayerControllerDelegate saveToPDF]):

        (WebKit::PDFPlugin::PDFPlugin): Set up the requisite layer hierarchy, and create a PDFLayerController (and its delegate proxy).
        (WebKit::PDFPlugin::updateScrollbars): Update the frame of the layers hosting our scrollbars.
        (WebKit::PDFPlugin::createScrollbar): Create a scrollbar and hosting layer, attaching its layer
        to PDFPlugin's container layer.
        (WebKit::PDFPlugin::destroyScrollbar): Destroy a scrollbar, detaching and destroying its hosting layer in the process.
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Called when the document finishes loading; hand
        the loaded document to PDFKit, update all of our state (cached document size, scrollbars, etc.), and then execute any scripts in the document (to allow for automatic printing).
        (WebKit::PDFPlugin::calculateSizes): Determine the size of the PDF and its pages.
        (WebKit::PDFPlugin::destroy): Tear down the layer hierarchy.
        (WebKit::PDFPlugin::paint): PDFPlugin is layer-based, so we paint nothing into the tiles.
        (WebKit::PDFPlugin::paintControlForLayerInContext): Scrollbar controls are drawn into layers, but their painting is delegated here from WKPDFPluginScrollbarLayer.
        (WebKit::PDFPlugin::snapshot): Perform a paint into a bitmap context.
        (WebKit::PDFPlugin::pluginLayer): Return PDFPlugin's root layer.
        (WebKit::PDFPlugin::geometryDidChange): The size or scale of the plugin changed; update
        PDFLayerController's notion of the size and page scale, and invalidate the scrollbars.

        Mouse and keyboard events are converted back into NSEvents, but with
        locationInWindow actually in terms of the PDFPlugin's layer, not
        the window (since there is no window).

        (WebKit::modifierFlagsFromWebEvent): Construct an AppKit-style modifier bitmask from WebEvent's modifier key getters.
        (WebKit::eventTypeFromWebEvent): Return the NSEventType equivalent to the given WebEvent. Only supports keyboard and mouse events, and only the left and right mouse button.
        (WebKit::PDFPlugin::handleMouseEvent): Construct an NSEvent from the given WebMouseEvent and hand it to PDFLayerController. Mouse coordinates are in terms of m_contentLayer's origin.
        (WebKit::PDFPlugin::handleKeyboardEvent): Construct an NSEvent from the given WebKeyboardEvent and hand it to PDFLayerController. PDFLayerController currently only handles keyDown events.

        (WebKit::PDFPlugin::handleEditingCommand): Handle copy and select-all commands, and forward them to PDFLayerController.
        (WebKit::PDFPlugin::isEditingCommandEnabled): The 'copy' command should be enabled if
        the user has selected a part of the PDF. The 'select all' command should always be enabled.

        (WebKit::PDFPlugin::setScrollOffset): Update both PDFPlugin and PDFLayerController's notion
        of the current scroll position.
        (WebKit::PDFPlugin::invalidateScrollbarRect): Invalidate the whole scrollbar layer.
        (WebKit::PDFPlugin::invalidateScrollCornerRect): Invalidate the whole scroll corner layer.

        Rename BuiltInPDFView to SimplePDFPlugin, to differentiate it from PDFPlugin
        and to better denote its inheritance from Plugin.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h: Renamed from WebProcess/Plugins/PDF/BuiltInPDFView.h.
        (WebKit::SimplePDFPlugin): Make methods protected so PDFPlugin can override them. Rename m_pluginSize -> m_size, and m_dataBuffer->m_data.
        (WebKit::SimplePDFPlugin::size): Retrieve the size of the plugin.
        (WebKit::SimplePDFPlugin::setSize): Set the size of the plugin.
        (WebKit::SimplePDFPlugin::pdfDocument): Retrieve the currently represented PDF document.
        (WebKit::SimplePDFPlugin::setPDFDocument): Set the currently represented PDF document.
        (WebKit::SimplePDFPlugin::pdfDocumentSize): Retrieve the current size of the PDF.
        (WebKit::SimplePDFPlugin::setPDFDocumentSize): Set the current size of the PDF.
        (WebKit::SimplePDFPlugin::data): Retrieve the accumulated document data.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm: Renamed from WebProcess/Plugins/PDF/BuiltInPDFView.mm.
        (WebKit::SimplePDFPlugin::computePageBoxes): Copied out of calculateSizes() so PDFPlugin can use it too.
        (WebKit::SimplePDFPlugin::runScriptsInPDFDocument): Factored out of pdfDocumentDidLoad() so PDFPlugin can use it too.
        (WebKit::SimplePDFPlugin::convertFromScrollbarToContainingView): Implement the remaining scrollbar point conversion functions.
        (WebKit::SimplePDFPlugin::convertFromContainingViewToScrollbar): Implement the remaining scrollbar point conversion functions.

        * WebProcess/Plugins/Plugin.h:
        (Plugin): Add handleEditingCommand, isEditingCommandEnabled, and handlesPageScaleFactor.
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleEditingCommand): Proxy handleEditingCommand to the PluginProcess.
        (WebKit::PluginProxy::isEditingCommandEnabled): Proxy isEditingCommandEnabled
        to the PluginProcess.
        (WebKit::PluginProxy::handlesPageScaleFactor): Proxy handlesPageScaleFactor
        to the PluginProcess.
        * WebProcess/Plugins/PluginProxy.h: Add handleEditingCommand, isEditingCommandEnabled,
        and handlesPageScaleFactor.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::setPageScaleFactor): Set the plugin's current page scale factor. Also,
        update WebPageProxy's notion of the current pageScaleFactor when this is called.
        (WebKit::PluginView::pageScaleFactor): Return the plugin's current page scale factor.
        (WebKit::PluginView::handleEditingCommand): Proxy handleEditingCommand to the plugin.
        (WebKit::PluginView::isEditingCommandEnabled): Proxy isEditingCommandEnabled to the plugin.
        * WebProcess/Plugins/PluginView.h:
        (PluginView): Add handleEditingCommand, isEditingCommandEnabled,
        setPageScaleFactor/pageScaleFactor, and handlesPageScaleFactor. Add m_pageScaleFactor.
        (WebKit::PluginView::handlesPageScaleFactor): Proxy handlesPageScaleFactor to the plugin.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::restoreViewState): Don't update WebPageProxy's notion of the scale factor if it should be the default.
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame): Make use of shouldUseCustomRepresentationForResponse on WebPage instead of WebProcess.
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Make use of shouldUseCustomRepresentationForResponse on WebPage instead of WebProcess.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Create a PDFPlugin if appropriate (if it is built and the setting is enabled).
        (WebKit::pluginViewForFrame): Return the PluginView for the given frame if its document is a PluginDocument.
        (WebKit::WebPage::executeEditingCommand): Attempt to execute editing commands on the
        currently focused (or main-frame) plugin.
        (WebKit::WebPage::isEditingCommandEnabled): Validate editing commands against the
        currently focused (or main-frame) plugin.
        (WebKit::WebPage::scalePage): If the plugin reports that it handles page scale factor
        itself, hand it the new scale instead of WebCore.
        (WebKit::WebPage::pageScaleFactor): If the plugin reports that it handles page scale
        factor itself, return its notion of the current scale instead of WebCore's.
        (WebKit::WebPage::validateCommand): Validate editing commands against the
        currently focused (or main-frame) plugin.
        (WebKit::WebPage::updatePreferences): Update m_pdfPluginEnabled given the relevant WebPreference.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::pdfPluginEnabled): Return whether or not PDFPlugin should be used.
        (WebKit::WebPage::setPDFPluginEnabled): Set whether or not PDFPlugin should be used.

2012-10-13  Sam Weinig  <sam@webkit.org>

        Use class extension rather than a void* member for new Objective-C WebProcessPlugIn SPI
        https://bugs.webkit.org/show_bug.cgi?id=99256

        Reviewed by Dan Bernstein.

        A bit of good old fashion cleanup.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        Remove the void* member.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        Move members from the WKWebProcessPlugInControllerData struct to a class extension.

        (didCreatePage):
        (willDestroyPage):
        (-[WKWebProcessPlugInController _initWithPrincipalClassInstance:bundleRef:]):
        Directly access the members instead of using properties, now that it is not inconvenient.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        Remove the void* member.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        Move members from the WKWebProcessPlugInBrowserContextControllerData struct to a class extension.
        
        (-[WKWebProcessPlugInBrowserContextController _initWithBundlePageRef:]):
        (-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
        Remove unnecessary casts..

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:
        Add space before the parenthesis of a category to be consistent.
 
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
        Remove unnecessary forward declare.

2012-10-13  Andy Estes  <aestes@apple.com>

        Add a private header for WKWebProcessPlugInBrowserContextController that defines a property for getting the WKBundlePageRef
        https://bugs.webkit.org/show_bug.cgi?id=99252

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _bundlePageRef]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h: Added.

2012-10-12  Brady Eidson  <beidson@apple.com>

        Setup basic NetworkProcess messaging and initialization.
        https://bugs.webkit.org/show_bug.cgi?id=99198

        Reviewed by Sam Weinig.

        Project file/build system stuff:
        * DerivedSources.make:
        * WebKit2.xcodeproj/project.pbxproj:
        * Scripts/webkit2/messages.py:
        (struct_or_class):

        Add basic initialization parameters for the NetworkProcess:
        * Shared/Network/NetworkProcessCreationParameters.cpp: 
        (WebKit):
        (WebKit::NetworkProcessCreationParameters::NetworkProcessCreationParameters):
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        (CoreIPC):
        (WebKit):
        (NetworkProcessCreationParameters):

        Use them to message the NetworkProcess what it's application name should be:
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h:
        (WebKit):
        (NetworkProcessProxy):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit):
        (WebKit::NetworkProcessProxy::platformInitializeNetworkProcess):        

        Add basic message handling and initialization to the NetworkProcess itself:
        * NetworkProcess/NetworkProcess.messages.in: Added.
        * Platform/CoreIPC/MessageID.h:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit):
        * NetworkProcess/NetworkProcess.h:
        (WebKit):
        (NetworkProcess):

        Set a reasonable application name to be revealed in UI:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit):
        (WebKit::NetworkProcess::platformInitialize):


2012-10-12  Ada Chan  <adachan@apple.com>

        Add WKPage API to get whether the main frame is pinned to the top or bottom edge
        https://bugs.webkit.org/show_bug.cgi?id=99110

        Reviewed by Beth Dakin.

        This is very similar to r79025 where we add support to do this for the left and right sides.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageIsPinnedToTopSide):
        (WKPageIsPinnedToBottomSide):
        * UIProcess/API/C/WKPage.h:
        Add new API calls.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isPinnedToTopSide):
        (WebKit::WebPageProxy::isPinnedToBottomSide):
        Declare new data members for keeping track of the pinned states for
        top and bottom sides. Initialize, reset, and update these states
        at appropriate times. Implement getters for these states.

        * UIProcess/WebPageProxy.messages.in:
        Change the DidChangeScrollOffsetPinningForMainFrame message to take
        the pinned states for top and bottom sides.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didChangeScrollOffsetForMainFrame):
        * WebProcess/WebPage/WebPage.h:
        Cache the pinned states for top and bottom sides. Only notify the
        UI process if the states have changed.

2012-10-12  Anders Carlsson  <andersca@apple.com>

        Stop using deprecatedSend inside ConnectionMac.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99192

        Reviewed by Andreas Kling.

        The messages that we send are so simple that we can just use sendMessage.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::open):

2012-10-12  Brady Eidson  <beidson@apple.com>

        Add a basic NetworkProcess.app to the WebKit2 build
        https://bugs.webkit.org/show_bug.cgi?id=98543

        Reviewed by Sam Weinig.

        This change sets up the Mac build to include a NetworkProcess.app.
        It also launches this app when the first WebProcess is created.
        It then quits this app when the UIProcess terminates.

        The app, it does nothing.
                             -McBain

        Pure project file/build system stuff:
        * Configurations/NetworkProcess.xcconfig: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebKit2Prefix.h:

        Basic UIProcess side of things:
        * UIProcess/Network/NetworkProcessProxy.cpp: Added.
        (WebKit):
        (WebKit::NetworkProcessProxy::create):
        (WebKit::NetworkProcessProxy::NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
        (WebKit::NetworkProcessProxy::didReceiveMessage):
        (WebKit::NetworkProcessProxy::didClose):
        (WebKit::NetworkProcessProxy::didReceiveInvalidMessage):
        (WebKit::NetworkProcessProxy::syncMessageSendTimedOut):
        (WebKit::NetworkProcessProxy::didFinishLaunching):
        * UIProcess/Network/NetworkProcessProxy.h: Added.
        (WebKit):
        (NetworkProcessProxy):

        Basic NetworkProcess side of things:
        * NetworkProcess/Info.plist: Added.
        * NetworkProcess/NetworkProcess.cpp: Added.
        (WebKit):
        (WebKit::NetworkProcess::shared):
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::~NetworkProcess):
        (WebKit::NetworkProcess::initialize):
        (WebKit::NetworkProcess::shouldTerminate):
        (WebKit::NetworkProcess::didReceiveMessage):
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::didReceiveInvalidMessage):
        (WebKit::NetworkProcess::syncMessageSendTimedOut):
        * NetworkProcess/NetworkProcess.h: Added.
        (WebCore):
        (WebKit):
        (NetworkProcess):

        Add the main method for the NetworkProcess itself:
        * WebProcess/WebKitMain.cpp:
        (WebKitMain):
        * NetworkProcess/NetworkProcessMain.h: Added.
        (WebKit):
        * NetworkProcess/mac/NetworkProcessMainMac.mm: Added.
        (WebKit):
        (WebKit::NetworkProcessMain):

        Teach ProcessLauncher about the new app type:
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::processTypeAsString):
        (WebKit::ProcessLauncher::getProcessTypeFromString):
        * UIProcess/Launcher/ProcessLauncher.h:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::createProcess):

        Launch the NetworkProcess when we launch the first WebProcess:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        * UIProcess/WebContext.h:
        (WebContext):

2012-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131189.
        http://trac.webkit.org/changeset/131189
        https://bugs.webkit.org/show_bug.cgi?id=99187

        Made inspector http tests crash on WK2. (Requested by rakuco
        on #webkit).

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

2012-10-12  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Share resources installed for inspector
        https://bugs.webkit.org/show_bug.cgi?id=98991

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed build script which install resources to share.
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorPageURL): Modified not to use makeString.
        (WebKit::WebInspectorProxy::inspectorBaseURL): Changed resource path.

2012-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131160.
        http://trac.webkit.org/changeset/131160
        https://bugs.webkit.org/show_bug.cgi?id=99163

        "It should not be landed without it's follow-up because it
        break pixal and ref tests without it." (Requested by kbalazs
        on #webkit).

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Unreviewed buildfix 2.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Unreviewed buildfix.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::decode):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Reviewed by Simon Hausmann.

        Share common serialization code across Qt and soup ports.
        All of these ports serialize the WebCore representation
        of these types.

        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * Shared/qt/WebCoreArgumentCodersQt.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):
        * Shared/win/WebCoreArgumentCodersWin.cpp:
        (CoreIPC::::encodePlatformData):
        (CoreIPC::::decodePlatformData):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed, rolling out r130389.
        http://trac.webkit.org/changeset/130389
        https://bugs.webkit.org/show_bug.cgi?id=98048

        It broke chromium

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WTR] Do a forced repaint before generating pixel results
        https://bugs.webkit.org/show_bug.cgi?id=98654

        Reviewed by Jocelyn Turcotte.

        Added API to convert a QImage to a WKImage so we can
        pass it to cross-platform code.

        * Shared/API/c/qt/WKImageQt.cpp:
        (WKImageCreateFromQImage):
        * Shared/API/c/qt/WKImageQt.h:

2012-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131121.
        http://trac.webkit.org/changeset/131121
        https://bugs.webkit.org/show_bug.cgi?id=99144

        It made all tests timeout on all WK2 platform (Requested by
        ossy on #webkit).

        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):

2012-10-11  Andy Estes  <aestes@apple.com>

        Add some basic methods and properties to the injected bundle Objective-C DOM API
        https://bugs.webkit.org/show_bug.cgi?id=99137

        Reviewed by Sam Weinig.

        Add methods and properties that allow for tree traversal, node creation/insertion,
        attribute modification, text node retrieval, and range creation.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        (toDocument):
        (-[WKDOMDocument createElement:]):
        (-[WKDOMDocument createTextNode:]):
        (-[WKDOMDocument body]):
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        (-[WKDOMElement hasAttribute:]):
        (-[WKDOMElement getAttribute:]):
        (-[WKDOMElement setAttribute:value:]):
        (-[WKDOMElement tagName]):
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):
        (WebKit::toWebCoreText):
        (WebKit::toWKDOMText):
        (WebKit::toWebCoreRange):
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        (-[WKDOMNode insertNode:before:]):
        (-[WKDOMNode appendChild:]):
        (-[WKDOMNode parentNode]):
        (-[WKDOMNode firstChild]):
        (-[WKDOMNode nextSibling]):
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange setStart:offset:]):
        (-[WKDOMRange setEnd:offset:]):
        (-[WKDOMRange collapse:]):
        (-[WKDOMRange selectNode:]):
        (-[WKDOMRange selectNodeContents:]):
        (-[WKDOMRange isCollapsed]):
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMText.mm: Added.
        (-[WKDOMText data]):

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

        Add a WKContext call to enable the NetworkProcess.
        https://bugs.webkit.org/show_bug.cgi?id=99140

        Reviewed by Sam Weinig.

        Add the SPI:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetUsesNetworkProcess):
        * UIProcess/API/C/WKContextPrivate.h:

        Add a member for the flag and the first call site that will be interested in the flag's value:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::setUsesNetworkProcess):
        (WebKit):
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::ensureNetworkProcess):
        * UIProcess/WebContext.h:
        (WebContext):

2012-10-11  Andy Estes  <aestes@apple.com>

        Fix the 32-bit Mac build after r131138.

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

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

        Stop using Connection::deprecatedSend in WebConnection
        https://bugs.webkit.org/show_bug.cgi?id=99130

        Reviewed by Sam Weinig.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        Add new files.

        * Platform/CoreIPC/MessageID.h:
        Add WebConnectionMessageClass.

        * Shared/WebConnection.cpp:
        (WebKit::WebConnection::WebConnection):
        Make WebConnection hold on to the CoreIPC::Connection.

        (WebKit::WebConnection::postMessage):
        Ask the subclasses to encode the body data, then send it.

        (WebKit::WebConnection::handleMessage):
        Ask the subclasses to decode the body data, then call didReceiveClient.

        (WebKit::WebConnection::invalidate):
        Null out m_connection.

        * Shared/WebConnection.h:
        (WebKit::WebConnection::connection):

        * Shared/WebConnection.messages.in: Added.

        * UIProcess/WebConnectionToWebProcess.cpp:
        (WebKit::WebConnectionToWebProcess::WebConnectionToWebProcess):
        Pass the connection to the WebConnection initializer.

        (WebKit::WebConnectionToWebProcess::encodeMessageBody):
        (WebKit::WebConnectionToWebProcess::decodeMessageBody):
        Encode and decode the message body.

        (WebKit::WebConnectionToWebProcess::didReceiveMessage):
        Handle WebConnection messages.

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

        * WebProcess/WebConnectionToUIProcess.cpp:
        (WebKit::WebConnectionToUIProcess::WebConnectionToUIProcess):
        Pass the connection to the WebConnection initializer.

        (WebKit::WebConnectionToUIProcess::encodeMessageBody):
        (WebKit::WebConnectionToUIProcess::decodeMessageBody):
        Encode and decode the message body.

        (WebKit::WebConnectionToUIProcess::didReceiveMessage):
        Handle WebConnection messages.

        * win/WebKit2.vcproj:
        Add new files.

2012-10-11  Andy Estes  <aestes@apple.com>

        Expose the main frame's document to injected bundles via the Objective-C API
        https://bugs.webkit.org/show_bug.cgi?id=99133

        Patch by Sam Weinig.

        Reviewed by Anders Carlsson.

        Allow a bundle to declare a principle class which will be instantiated
        by WebKit2 and passed an object to which WKBundleClient calls are
        forwarded and which can access the main frame's WKDOMDocument.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm: Instantiate
        the bundle's principle class forward WKBundleClient calls to it.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        Add a property called mainFrameDocument which returns a WKDOMDocument.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerInternal.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load): Initialize the shared
        WKWebProcessPlugInController with the bundle's principle class.

2012-10-11  Sam Weinig  <sam@webkit.org>

        Add a helper function for initializing WebKit2 DOM objects
        https://bugs.webkit.org/show_bug.cgi?id=99128

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        (WebKit::WKDOMNodeClass):
        (WebKit::initWithImpl):
        (WebKit::toWKDOMNode):
        (WebKit::toWKDOMRange):
        (WebKit::toWKDOMType):
        Add toWKDOMType which implements the core object initialization and caching.

2012-10-11  Seokju Kwon  <seokju.kwon@samsung.com>

        [EFL][WK2] Add support for Inspector
        https://bugs.webkit.org/show_bug.cgi?id=98639

        Reviewed by Kenneth Rohde Christiansen.

        Support inspector on WebKit2/Efl and add APIs to show and close the inspector.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_inspector_show):
        (ewk_view_inspector_close):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::resizeInspectorWindow):
        (WebKit):
        (WebKit::destroyInspectorWindow):
        (WebKit::closeInspectorWindow):
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformOpen):

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

        Stop using deprecatedSend and deprecatedSendSync for sending messages to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=99125

        Reviewed by Andreas Kling.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * UIProcess/WebContext.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::postMessage):
        (WebKit):
        (WebKit::WebProcessProxy::postSynchronousMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::postMessage):
        (WebKit::InjectedBundle::postSynchronousMessage):

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

        Stop using deprecatedSend for WebContext::postMessageToInjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=99123

        Reviewed by Andreas Kling.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * Platform/CoreIPC/MessageID.h:
        Remove MessageClassInjectedBundle.

        * Shared/CoreIPCSupport/InjectedBundleMessageKinds.h: Removed.
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        Stop using deprecatedSend.

        (WebKit::WebContext::postMessageToInjectedBundle):
        Stop using deprecatedSend. Remove now invalid FIXMEs.

        * UIProcess/WebPageProxy.cpp:
        Remove include.

        * WebKit2.xcodeproj/project.pbxproj:
        Remove InjectedBundleMessageKinds.h.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        The injected bundle is no longer in charge of receiving IPC messages.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage):
        Stop passing messages to the injected bundle.

        (WebKit::WebProcess::postInjectedBundleMessage):
        Decode the message and pass it to the injected bundle.

        * WebProcess/WebProcess.messages.in:
        Add PostInjectedBundleMessage.

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

        Stop using deprecatedSend for WebPageProxy::postMessageToInjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=99120

        Reviewed by Andreas Kling.

        Instead of using deprecatedSend, just encode the data using a separate ArgumentEncoder and pass it along as a DataReference.

        * Shared/CoreIPCSupport/InjectedBundleMessageKinds.h:
        Remove PostMessageToPage.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::postMessageToInjectedBundle):
        Stop using deprecatedSend.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::didReceiveMessage):
        Remove code to handle PostMessageToPage.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::postInjectedBundleMessage):
        Decode the APIObject and send it along to the injected bundle.

        * WebProcess/WebPage/WebPage.messages.in:
        Add PostInjectedBundleMessage message.

2012-10-11  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL][WK2] WebProcess keeps on waiting for UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=97646

        Reviewed by Kenneth Rohde Christiansen.

        Set LayerTreeRenderer to active so UIProcess can send RenderNextFrame message to WebProcess
        after accelerated compositing(AC) mode is entered, so WebProcess can start flushing changes to UIProcess.

        * UIProcess/API/efl/EflViewportHandler.cpp: Added API for setting LayerTreeRenderer's active state.
        (WebKit::EflViewportHandler::setActive):
        (WebKit):
        * UIProcess/API/efl/EflViewportHandler.h:
        (EflViewportHandler):
        * UIProcess/API/efl/ewk_view.cpp: Sets LayerTreeRenderer's active status to true after entering AC mode.
        (ewk_view_accelerated_compositing_mode_enter):

2012-10-10  Brady Eidson  <beidson@apple.com>

        Switch ResourceLoader::resourceData() from SharedBuffer to ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98976

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::finishedLoading):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::source):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getMainResourceDataOfFrame):

2012-10-11  Sam Weinig  <sam@webkit.org>

        Add missing WK_EXPORT for WKDOMTextIterator.

        Rubber-stamped by Brady Eidson.

        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:

2012-10-11  Zeno Albisser  <zeno@webkit.org>

        [Qt] Implement GraphicsSurfaceToken to replace uint64_t as token type.
        https://bugs.webkit.org/show_bug.cgi?id=98501

        Replace the token type for GraphicsSurface with a new class GraphicsSurfaceToken.
        This is necessary in order to implement GraphicsSurface for Windows.
        Depending on the platform a GraphicsSurfaceToken might contain a
        WindowID (Linux/GLX), two IOSurfaceIDs (Mac) or in the future two HANDLEs (Windows).
        The simple uint64_t is not sufficient anymore, since a single HANDLE in windows
        can be 64bit already.

        Reviewed by Noam Rosenthal.

        * Shared/ShareableSurface.cpp:
        (WebKit::ShareableSurface::Handle::encode):
        (WebKit::ShareableSurface::Handle::decode):
        (WebKit::ShareableSurface::create):
        (WebKit::ShareableSurface::createHandle):
        * Shared/ShareableSurface.h:
        (WebKit::ShareableSurface::Handle::graphicsSurfaceToken):
        (Handle):
        * Shared/WebCoreArgumentCoders.cpp:
        (CoreIPC):
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * Shared/WebCoreArgumentCoders.h:
        (WebCore):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        (WebKit::LayerTreeCoordinatorProxy::syncCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.h:
        (LayerTreeCoordinatorProxy):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.messages.in:
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::syncCanvas):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (LayerTreeRenderer):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayerClient):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::syncCanvas):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):

2012-10-10  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Avoid unnecessary calls in PageViewportController
        https://bugs.webkit.org/show_bug.cgi?id=98886

        Reviewed by Jocelyn Turcotte.

        Remove leftover and unneeded update guards and visibility update
        notifications to avoid unnecessary update cycles between the
        controller an the client.
        Previously didRenderFrame triggered updates for no reason since
        animations on the page cause a lot of DidRenderFrame messages
        for which the viewport state does not change.

        * UIProcess/PageViewportController.cpp:
        (WebKit::ViewportUpdateDeferrer::~ViewportUpdateDeferrer):
        (WebKit::PageViewportController::didRenderFrame):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::setContentsScale):
        (WebKit::PageViewportControllerClientQt::didChangeViewportAttributes):
        (WebKit::PageViewportControllerClientQt::updateViewportController):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):

2012-10-11  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] It should be possible to disable favicons in WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=98885

        Reviewed by Carlos Garcia Campos.

        Make support for favicons in WebKit2GTK+ disabled by default, and
        allow enabling it even after calling webkit_web_context_get_favicon_database(),
        by decoupling opening the IconDatabase, which will happen when
        setting the path for the database directory, from creating the
        instance of WebKitFaviconDatabase from WebKitWebContext.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate): Renamed faviconDatabasePath to
        faviconDatabaseDirectory;
        (ensureFaviconDatabase): Makes sure there's an instance of
        WebKitFaviconDatabase created and associated to the context.
        (webkit_web_context_set_favicon_database_directory): Use the
        default path if NULL is passed, or the specified one, creating the
        database if needed and opening it by setting it's path. If the
        database is already open this method does nothing.
        (webkit_web_context_get_favicon_database_directory): Return the
        path or NULL if webkit_web_context_set_favicon_database_directory
        has not been called yet.
        (webkit_web_context_get_favicon_database): Return the instance of
        WebKitFaviconDatabase, or create it if it doesn't exist yet, but
        never set the path (would cause the icon database to be opened).

        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (testNotInitialized): New test to check that a NOT_INITIALIZED
        error is got when using the database before setting its path.
        (testSetDirectory): Call set_favicon_database_directory() here
        instead of doing it in the constructor of FaviconDatabaseTest.
        (beforeAll): Add testNotInitialized() to the test suite.

2012-10-11  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Revisit setting API names and documentation
        https://bugs.webkit.org/show_bug.cgi?id=98793

        Reviewed by Kenneth Rohde Christiansen.

        Make setting API names to be consistent and revisit the documentation.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_frame_flattening_enabled_set):
        (ewk_settings_frame_flattening_enabled_get):
        (ewk_settings_dns_prefetching_enabled_set):
        (ewk_settings_dns_prefetching_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

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

        Disallow full screen mode keyboard access by default.
        https://bugs.webkit.org/show_bug.cgi?id=98971
        <rdar://problem/12474226>

        Reviewed by Sam Weinig.

        Only support full screen if keyboard access is not requested.

        * UIProcess/WebFullScreenManagerProxy.cpp:
        (WebKit::WebFullScreenManagerProxy::supportsFullScreen):

2012-10-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130972 and r130984.
        http://trac.webkit.org/changeset/130972
        http://trac.webkit.org/changeset/130984
        https://bugs.webkit.org/show_bug.cgi?id=98986

        Huge numbers of WK2 crashes (Requested by smfr on #webkit).

        * Platform/CoreIPC/Connection.h:
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC::MessageReceiverMap::clearAllMessageReceivers):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/WebConnectionToWebProcess.h:
        (WebConnectionToWebProcess):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::knowsHowToHandleMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-10  Sam Weinig  <sam@webkit.org>

        Add more Objective-C WebKit2 DOM API skeletons.
        https://bugs.webkit.org/show_bug.cgi?id=98981

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        Update guards to actually do something. __CLANG__ is never defined, but __clang__ is.

        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        - Abstracts DOM object caching into the DOMCache class which can only be used as a singleton.
        - Adds WKDOMRange class extension to allow manipulating its internal pointer for caching purposes.
        - Add WKDOMRange conversion functions.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        Rename _node to _impl for consistency.

        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
        (-[WKDOMRange _initWithImpl:WebCore::]):
        (-[WKDOMRange initWithDocument:]):
        (-[WKDOMRange dealloc]):
        (-[WKDOMRange startContainer]):
        (-[WKDOMRange startOffset]):
        (-[WKDOMRange endContainer]):
        (-[WKDOMRange endOffset]):
        (-[WKDOMRange text]):
        Added. Only offers base range functionality.

        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.mm:
        (-[WKDOMTextIterator initWithRange:]):
        (-[WKDOMTextIterator advance]):
        (-[WKDOMTextIterator atEnd]):
        (-[WKDOMTextIterator currentRange]):
        (-[WKDOMTextIterator currentTextPointer]):
        (-[WKDOMTextIterator currentTextLength]):
        Added. Almost identical to WebTextIterator API in WebKit.

2012-10-10  Anders Carlsson  <andersca@apple.com>

        Stop crashing left and right.

        * UIProcess/WebConnectionToWebProcess.h:
        (WebKit::WebConnectionToWebProcess::webProcessProxy):
        Add a getter.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):
        The WebProcessProxy is not the Connection::Client, the WebConnectionToWebProcess is.

2012-10-10  Sam Weinig  <sam@webkit.org>

        Fix the GCC Mac build. Why are we still building with GCC again?

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:

2012-10-10  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add toolbar buttons to MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=98883

        Reviewed by Kenneth Rohde Christiansen.

        Add "back,forward,list,changed" signal on the Ewk_View
        to notify the client when the view's back / forward
        list has changed. This is useful for the UI to update
        its back / forward buttons disabled state.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_back_forward_list_changed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didChangeBackForwardList):
        * UIProcess/API/efl/ewk_view_private.h:

2012-10-10  Jon Lee  <jonlee@apple.com>

        [WK2] Activate plugins when user clicks on snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98328
        <rdar://problem/12426681>

        Reviewed by Brady Eidson.

        Implement the recreation of the plugin.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::recreateAndInitialize): We can run into a situation where the user
        decided to run the plugin before the snapshot was ready to be taken. In this case, the
        plugin member variable is non-null, and the timer is still active. Turn off the timer, and
        destroy that instance of the plugin. We set the plugin to the instance provided in the
        first parameter to this function, and reset the member variables so that the PluginView is
        in a state similar to when it was first created. We also immediately initialize the plugin,
        which may happen synchronously or asynchronously.

        * WebProcess/Plugins/PluginView.h:
        (WebKit::PluginView::initialParameters): Expose the initial parameters. Used to recreate
        the plugin.
        (WebKit::PluginView::pluginElement): Expose the element associated with the widget. Used to
        recreate the plugin.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::recreatePlugin): Create a new Plugin instance using the same
        parameters used to create the plugin for snapshotting. Forward that instance to the widget.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient): Implement recreatePlugin().

2012-10-10  Sam Weinig  <sam@webkit.org>

        Fix 32-bit build.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:

2012-10-10  Anders Carlsson  <andersca@apple.com>

        WebContext should be a MessageReceiver
        https://bugs.webkit.org/show_bug.cgi?id=98958

        Reviewed by Sam Weinig.

        Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
        knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.

        * Platform/CoreIPC/Connection.h:
        (CoreIPC::Connection::client):
        (Connection):
        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::addMessageReceiver):
        (CoreIPC::MessageReceiverMap::invalidate):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        (MessageReceiverMap):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::dispatchMessage):
        (WebKit::WebContext::dispatchSyncMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::fromConnection):
        (WebKit):
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2012-10-10  Sam Weinig  <sam@webkit.org>

        Add skeleton of a WebKit2 ObjC DOM SPI (not intended to be the full DOM)
        https://bugs.webkit.org/show_bug.cgi?id=98955

        Reviewed by Anders Carlsson.

        Add a skeleton DOM implementation only exposing Node, Element and Document
        for now. It is currently only available in 64-bit as it relies on the non-fragile
        ABI for now.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.mm: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMInternals.mm: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm: Added.

2012-10-04  Andy Estes  <aestes@apple.com>

        [WebKit2] Create an API for adding and removing user stylesheets from a page group
        https://bugs.webkit.org/show_bug.cgi?id=98432

        Reviewed by Sam Weinig.

        This patch adds the following API to WKBrowsingContextGroup:

        - (void)addUserStyleSheet:(NSString *)source baseURL:(NSURL *)baseURL whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist mainFrameOnly:(BOOL)mainFrameOnly;
        - (void)removeAllUserStyleSheets;

        Sheets added via this API are sent to all processes that contain a page
        in the given page group. Sheets are also cached in the UI process in a
        new object called UserContentContainer, which is a property of each
        group's WebPageGroupData and is sent to new web processes during page
        initialization.

        This is less than ideal, since new pages added to a pre-existing
        process / page group combination will send redundant user stylesheet
        strings over the wire. To avoid this we'd have to keep track track of
        the groups that currently exist in each process and only send user
        content during page creation if it is the first time a process has seen
        the page's group. I decided to not add this complexity for the time
        being, but we might need to consider it if we find that the current
        approach impacts performance for clients that heavily utilize user
        content.

        * Shared/API/c/WKArray.cpp:
        (WKArrayCreateAdoptingValues): Add a WKArray creation function that
        adopts the incoming WKTypeRefs rather than refing them.
        * Shared/API/c/WKArray.h:
        * Shared/API/c/WKBase.h: Move WKUserContentInjectedFrames out of
        WKBundlePrivate.h so it can be used in WKPageGroup, too.
        * Shared/API/c/cf/WKURLCF.cpp:
        (WKURLCreateWithCFURL): Return 0 for null CFURLRefs instead of crashing
        inside CFURLGetString().
        * Shared/ImmutableArray.cpp:
        (WebKit::ImmutableArray::ImmutableArray): Add a tag to differentiate
        between the adopting and refing ctors.
        * Shared/ImmutableArray.h:
        (WebKit::ImmutableArray::create): Call the refing ctor.
        (WebKit::ImmutableArray::adopt): Call the adopting ctor.
        * Shared/UserContentContainer.cpp: Added.
        (UserContentItemMessageEncoder): Create a UserMessageEncoder for
        serializing UserContentContainer::Item's APIObjects.
        (WebKit::UserContentItemMessageEncoder::UserContentItemMessageEncoder):
        (WebKit::UserContentItemMessageEncoder::encode):
        (UserContentItemMessageDecoder): Create a UserMessageEncoder for
        deserializing UserContentContainer::Item's APIObjects.
        (WebKit::UserContentItemMessageDecoder::UserContentItemMessageDecoder):
        (WebKit::UserContentItemMessageDecoder::decode):
        (WebKit::UserContentContainer::Item::Item):
        (WebKit::encodeStringArray): Add a helper function for encoding
        ImmutableArrays of WebStrings.
        (WebKit::UserContentContainer::Item::encode): Encode the item's
        properties using UserContentItemMessageEncoder.
        (WebKit::decodeStringArray): Add a helper function for decoding
        ImmutableArrays of WebStrings.
        (WebKit::UserContentContainer::Item::decode): Decode the item's
        properties using UserContentItemMessageDecoder.
        (WebKit::toStringVector): Add a helper function for converting an
        ImmutableArray of WebStrings to a Vector of Strings.
        (WebKit::UserContentContainer::Item::whitelist): Use toStringVector().
        (WebKit::UserContentContainer::Item::blacklist): Ditto.
        (WebKit::UserContentContainer::encode): Encode the Vector of UserContentContainer::Items.
        (WebKit::UserContentContainer::decode): Decode the Vector of UserContentContainer::Items.
        * Shared/UserContentContainer.h: Added.
        * Shared/WebPageGroupData.cpp:
        (WebKit::WebPageGroupData::encode): Include userStyleSheets when encoding.
        (WebKit::WebPageGroupData::decode): Include userStyleSheets when decoding.
        * Shared/WebPageGroupData.h:
        (WebPageGroupData): Add a UserContentContainer called userStyleSheets
        to WebPageGroupData.
        * UIProcess/API/C/WKPageGroup.cpp: Add the C SPI version of the Objective-C API.
        (WKPageGroupAddUserStyleSheet):
        (WKPageGroupRemoveAllUserStyleSheets):
        * UIProcess/API/C/WKPageGroup.h:
        * UIProcess/API/mac/WKBrowsingContextGroup.h: Add the Objective-C API.
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (createWKArray): Add a helper function that converts an NSArray of NSStrings to a WKArray of WKStrings.
        (-[WKBrowsingContextGroup addUserStyleSheet:baseURL:whitelist:blacklist:mainFrameOnly:]):
        Implement the Objective-C API in terms of the C SPI.
        (-[WKBrowsingContextGroup removeAllUserStyleSheets]): Ditto.
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::addUserStyleSheet): Add the new sheet to the
        group's WebPageGroupData, which ensures that the group's sheets are
        sent to new web processes.
        (WebKit::WebPageGroup::removeAllUserStyleSheets): Ditto for removal.
        * UIProcess/WebPageGroup.h:
        (WebKit::WebPageGroup::sendToAllProcessesInGroup): Add a helper message
        that sends a message to all processes that have a page in the current
        group. This is used to add new user sheets to already-initialized page
        groups in the UI processes.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h: Moved
        WKUserContentInjectedFrames from here to WKBase.h.
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::WebPageGroupProxy): Add each sheet in the
        WebPageGroupData to WebCore's page group.
        (WebKit::WebPageGroupProxy::addUserStyleSheet): Add the sheet received
        from the UI process to WebCore's page group.
        (WebKit::WebPageGroupProxy::removeAllUserStyleSheets): Remove all
        sheets from WebCore's page group.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in: Define
        AddUserStyleSheet and RemoveAllUserStyleSheets, two messages sent from
        the UI process to a web process's WebPageGroupProxy.

2012-10-10  Sam Weinig  <sam@webkit.org>

        Make all of the WebContext sub objects MessageReceivers
        https://bugs.webkit.org/show_bug.cgi?id=98661

        Reviewed by Anders Carlsson.

        Start work towards simplified message dispatch.

        * Platform/CoreIPC/MessageReceiverMap.cpp:
        (CoreIPC::MessageReceiverMap::clearAllMessageReceivers):
        (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
        * Platform/CoreIPC/MessageReceiverMap.h:
        Add additional helper methods.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        (WebKit::WebContext::addMessageReceiver):
        (WebKit::WebContext::knowsHowToHandleMessage):
        (WebKit::WebContext::didReceiveMessage):
        (WebKit::WebContext::didReceiveSyncMessage):
        * UIProcess/WebContext.h:
        Add a MessageReceiverMap that chains to the main on in WebProcessProxy. Simplifies
        didReceiveMessage and didReceiveSyncMessage.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveMessage):
        (WebKit::WebProcessProxy::didReceiveSyncMessage):
        Use the new WebContext methods to simplify dispatch.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::WebNotificationManagerProxy):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::WebApplicationCacheManagerProxy):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::WebBatteryManagerProxy):
        * UIProcess/WebBatteryManagerProxy.h:
        (WebBatteryManagerProxy):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::WebCookieManagerProxy):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::WebDatabaseManagerProxy):
        (WebKit::WebDatabaseManagerProxy::didReceiveMessage):
        (WebKit):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.cpp:
        (WebKit::WebGeolocationManagerProxy::WebGeolocationManagerProxy):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        (WebKit::WebIconDatabase::type):
        * UIProcess/WebKeyValueStorageManagerProxy.cpp:
        (WebKit::WebKeyValueStorageManagerProxy::WebKeyValueStorageManagerProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::WebMediaCacheManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebNetworkInfoManagerProxy.cpp:
        (WebKit::WebNetworkInfoManagerProxy::WebNetworkInfoManagerProxy):
        (WebKit::WebNetworkInfoManagerProxy::didReceiveSyncMessage):
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::WebResourceCacheManagerProxy):
        (WebKit::WebResourceCacheManagerProxy::didReceiveMessage):
        (WebKit):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/WebVibrationProxy.cpp:
        (WebKit::WebVibrationProxy::WebVibrationProxy):
        * UIProcess/WebVibrationProxy.h:
        (WebVibrationProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::WebSoupRequestManagerProxy):
        (WebKit::WebSoupRequestManagerProxy::didReceiveMessage):
        (WebKit):
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * WebProcess/Authentication/AuthenticationManager.h:
        (AuthenticationManager):
        * WebProcess/Geolocation/WebGeolocationManager.h:
        (WebGeolocationManager):
        Make all the WebContext sub-objects MessageReceivers to simplify dispatch.

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

        Add the mangled symbol name for Frame::layerTreeAsText() to the confusingly named
        Windows export file.

        * win/WebKit2.def:

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

        Store a visible rect in GraphicsLayers, and optionally dump it in layerTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=98839

        Reviewed by Sam Weinig.

        Add a flag to layerTreeAsText() so that tests can optionally include this visible rect in
        layer tree dumps. This output will be platform-specific, so we don't want to do it unconditionally.

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

2012-10-10  Shinya Kawanaka  <shinyak@chromium.org>

        Needs internal API to return distributed nodes for InsertionPoint
        https://bugs.webkit.org/show_bug.cgi?id=98868

        Reviewed by Hajime Morita.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-10  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] REGRESSION(r130879): It made fast/events/touch/* tests crash
        https://bugs.webkit.org/show_bug.cgi?id=98888

        Reviewed by Kenneth Rohde Christiansen.

        Add null-checks in the gesture recognizers to allow them working without a PageViewportController.
        The pinch and pan gesture recognizers aren't used in that case yet, but they could eventually
        be used to send pinch and pan gesture events to the web process. They are currently kept active
        because we need the tap gesture recognizer and its logic is bound to those other recognizers.

        * UIProcess/qt/QtPanGestureRecognizer.cpp:
        (WebKit::QtPanGestureRecognizer::update):
        (WebKit::QtPanGestureRecognizer::finish):
        (WebKit::QtPanGestureRecognizer::cancel):
        * UIProcess/qt/QtPinchGestureRecognizer.cpp:
        (WebKit::QtPinchGestureRecognizer::update):
        (WebKit::QtPinchGestureRecognizer::finish):
        (WebKit::QtPinchGestureRecognizer::cancel):

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

        [GTK] Test /webkit2/WebKitWebView/history-cache asserts in debug bot
        https://bugs.webkit.org/show_bug.cgi?id=98731

        Reviewed by Martin Robinson.

        The problem is in the test itself that is using
        SingleResourceLoadTest class to load a multiresource document.

        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebViewResourcesHistoryCache): Load only single resource
        documents and check also that the main resource given is the
        expected one.
        (serverCallback): Add another single resource document.

2012-10-10  Christophe Dumez  <christophe.dumez@intel.com>

        [WK2][SOUP] ResourceError.isCancellation() is not carried over IPC
        https://bugs.webkit.org/show_bug.cgi?id=98882

        Reviewed by Kenneth Rohde Christiansen.

        Properly serialize / deserialize ResourceError.isCancellation
        boolean so that it can be used in UIProcess.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):

2012-10-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add APIs to get/set the DNS prefetching
        https://bugs.webkit.org/show_bug.cgi?id=98790

        Reviewed by Laszlo Gombos.

        Add setting APIs for DNS prefetching and a unit test.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_DNS_prefetching_enabled_set):
        (ewk_settings_DNS_prefetching_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-10-09  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] REGRESSION(r130629): It made touchadjustment/focusout-on-touch.html fai1
        https://bugs.webkit.org/show_bug.cgi?id=98642

        Reviewed by Kenneth Rohde Christiansen.

        There was an early return that would prevent gesture recognition if no PageViewportController
        has been set on QtWebPageEventHandler. The gesture recognizer are also used to send
        GestureEvents to WebCore which this layout test is using.

        Make sure that the gesture recognition is done even when no PageViewportController is present.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleInputEvent):
        (WebKit::QtWebPageEventHandler::doneWithTouchEvent):

2012-10-10  Zeno Albisser  <zeno@webkit.org>

        [Qt] ProcessLauncherQt should use QStringLiteral for serviceName.
        https://bugs.webkit.org/show_bug.cgi?id=98398

        QString(const char*) is deprecated, we should use QStringLiteral instead.

        Reviewed by Kenneth Rohde Christiansen.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2012-10-10  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Add History callbacks API
        https://bugs.webkit.org/show_bug.cgi?id=98594

        Reviewed by Kenneth Rohde Christiansen.

        Added History callbacks API to Ewk Context. Added unit tests.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context):
        (_Ewk_Context::_Ewk_Context):
        (ewk_context_history_callbacks_set): New public function which lets the client to set History callbacks.
        (ewk_context_history_client_get):
        (ewk_context_add_visited_link): New public function to mark a URL as visited link.
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_history_client.cpp: Added.
        (getEwkHistoryDelegate):
        (didNavigateWithNavigationData):
        (didPerformClientRedirect):
        (didPerformServerRedirect):
        (didUpdateHistoryTitle):
        (populateVisitedLinks):
        (ewk_context_history_client_attach):
        * UIProcess/API/efl/ewk_context_history_client_private.h: Added.
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_navigation_data.cpp: Added.
        (_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::_Ewk_Navigation_Data):
        (_Ewk_Navigation_Data::~_Ewk_Navigation_Data):
        (ewk_navigation_data_ref):
        (ewk_navigation_data_unref):
        (ewk_navigation_data_title_get):
        (ewk_navigation_data_original_request_get):
        (ewk_navigation_data_url_get):
        (ewk_navigation_data_new):
        * UIProcess/API/efl/ewk_navigation_data.h: Added.
        * UIProcess/API/efl/ewk_navigation_data_private.h: Added.
        * UIProcess/API/efl/ewk_view.cpp:
        (addToPageViewMap):
        (removeFromPageViewMap):
        (_ewk_view_smart_del):
        (_ewk_view_initialize):
        (ewk_view_from_page_get):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/test_ewk2_context_history_delegate.cpp: Added.
        (httpServer):
        (navigateWithNavigationData):
        (performClientRedirect):
        (performServerRedirect):
        (updateHistoryTitle):
        (populateVisitedLinks):
        (onLoadFinishedForRedirection):
        (serverCallbackRedirection):
        (TEST_F):

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

        [EFL][WK2] Change parameter and return type of loadUrlSync().
        https://bugs.webkit.org/show_bug.cgi?id=97920

        Reviewed by Gyuyoung Kim.

        loadUrlSync() uses waitUntilLoadFinished() internally, and it has
        a parameter and return value for timeout.
        To set and check timeout, loadUrlSync() should have those.

        A parameter for timeout interval is added to loadUrlSync() and it
        returns the result of waitUntilLoadFinished() for checking timeout.

        And I added codes to check the result of all the LoadUrlSync()
        function calls with ASSERT_TRUE() macro.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_intents.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

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

        [EFL][WK2] Move timeout callback to the CallbackDataTimer class.
        https://bugs.webkit.org/show_bug.cgi?id=97861

        Reviewed by Gyuyoung Kim.

        Timeout callbacks for waitUntil{LoadFinished,TitleChanged,URIChanged}
        can be moved to the CallbackDataTimer class.

        Moved the callback implementation to the CallbackDataTimer class.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::CallbackDataTimer::CallbackDataTimer):
        (CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::timeOutCallback):
        (EWK2UnitTest::CallbackDataExpectedValue::CallbackDataExpectedValue):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilURIChangedTo):

2012-10-09  Jian Li  <jianli@chromium.org>

        Update the CSS property used to support draggable regions.
        https://bugs.webkit.org/show_bug.cgi?id=97156

        Reviewed by Adam Barth.

        The CSS property to support draggable regions, guarded under
        WIDGET_REGION is now disabled from Mac WebKit, in order not to cause
        confusion with DASHBOARD_SUPPORT feature.

        Also update the code to use the new name annotatedRegions to work for
        both features.

        * Configurations/FeatureDefines.xcconfig: Disable WIDGET_REGION feature.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp: Rename dashboardRegions to annotatedRegions.
        (WebKit::WebChromeClient::annotatedRegionsChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.h: Rename dashboardRegions to annotatedRegions.
        (WebChromeClient):

2012-10-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130811 and r130821.
        http://trac.webkit.org/changeset/130811
        http://trac.webkit.org/changeset/130821
        https://bugs.webkit.org/show_bug.cgi?id=98831

        Broke date-suggestion-picker-appearance-with-scroll-bar.html
        (Requested by abarth|gardening on #webkit).

        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject):
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::screenRectOfContents):

2012-10-09  Jon Lee  <jonlee@apple.com>

        [WK2] Have plugins render offscreen to capture snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98326
        <rdar://problem/12426658>

        Reviewed by Simon Fraser.

        Keep the plugin rendering without compositing to easily grab the snapshot.

        PluginView now has two variables referring to snapshots, but are unrelated. The timer
        is used to capture a snapshot that acts as a poster for a plugin. The ShareableBitmap
        variable m_snapshot is used whenever the plugin paints in software, to avoid side effects
        should the plugin run JS during painting.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit): Add a named constant for the time delay before a snapshot is taken.
        (WebKit::PluginView::PluginView): Initialize a 3-second timer to get the snapshot.
        (WebKit::PluginView::~PluginView): Refactor part of the destructor code out into
        destroyPluginAndReset() for reuse.
        (WebKit::PluginView::destroyPluginAndReset): Contains part of the destructor code.
        In addition to destroying the plugin, the destructor cancels pending loads and streams.
        (WebKit::PluginView::didInitializePlugin): If the plugin is in a state where it needs
        to generate or display a poster, don't setup the compositing layer and start the timer.
        (WebKit::PluginView::paint): Avoid painting if the plugin is not running.
        (WebKit::PluginView::invalidateRect): Avoid painting if the plugin is not running.
        (WebKit::PluginView::isAcceleratedCompositingEnabled): Don't enable accelerated compositing
        until the plugin is running.
        (WebKit::PluginView::pluginSnapshotTimerFired): When the timer fires, get a snapshot, generate
        an Image that WebCore can render, and destroy the plugin.

        Rename m_snapshot to m_transientPaintingSnapshot.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::paint):
        (WebKit::PluginView::notifyWidget):
        (WebKit::PluginView::pluginSnapshotTimerFired):

2012-10-09  Rik Cabanier  <cabanier@adobe.com>

        Add missing compile flag for compositing
        https://bugs.webkit.org/show_bug.cgi?id=98681

        Reviewed by Dirk Schulze.

        This flag is needed in case there is a difference in API
        when compositing is enabled

        * Configurations/FeatureDefines.xcconfig:

2012-10-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130680.
        http://trac.webkit.org/changeset/130680
        https://bugs.webkit.org/show_bug.cgi?id=98720

        this patch has a typo so was ineffective (Requested by
        cabanier on #webkit).

        * Configurations/FeatureDefines.xcconfig:

2012-10-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL][WK2] Inform the PageProxy about visibility changes when the view is shown/hidden.
        https://bugs.webkit.org/show_bug.cgi?id=98757

        Reviewed by Kenneth Rohde Christiansen.

        SVN r130720 exposed a bug in our code: the PageProxy is not
        notified when one calls evas_object_show() or evas_object_hide()
        on the view, so the visibility it has when the WebPageProxy is
        constructed remained set forever.

        This made the ewk_context_vibration_client_callbacks_set unit test
        start running forever, because WebPageProxy's constructor now sets
        the page's visibility to hidden by the default for us, since it is
        called from within ewk_view_smart_add() and before
        evas_object_show().

        We now listen to the EVAS_CALLBACK_SHOW and EVAS_CALLBACK_HIDE
        callbacks and update the WebPageProxy accordingly. Note that we
        could not do this from the smart_show and smart_hide functions we
        already had, since they are called before the object's actual
        visibility is updated.

        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_on_show):
        (_ewk_view_on_hide):
        (_ewk_view_smart_add):

2012-10-09  Simon Pena  <spena@igalia.com>

        [GTK] Add support for running JavaScript from GResources
        https://bugs.webkit.org/show_bug.cgi?id=98488

        Reviewed by Carlos Garcia Campos.

        GResources allow embedding certain resources, frequently used, in a "bundle"
        which can be kept separated or stored in the binary. This patch adds
        support for running JavaScript from GResources.

        For this, methods run_javascript_from_gresource and
        run_javascript_from_gresource_finish are added, which load the resource
        asynchronously and, when it is ready, run the JavaScript.

        * UIProcess/API/gtk/WebKitWebView.cpp: Include the new methods.
        (resourcesStreamReadCallback):
        (webkit_web_view_run_javascript_from_gresource):
        (webkit_web_view_run_javascript_from_gresource_finish):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Include the new
        methods in the documentation.
        * UIProcess/API/gtk/tests/GNUmakefile.am: Add the test resources to the
        build infrastructure.
        * UIProcess/API/gtk/tests/TestMain.cpp: Register the resources in the tests,
        so that they can be accessed in all of them.
        (register_gresource):
        (main):
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp: Test the
        run_javascript_from_gresource method.
        (testWebViewRunJavaScript):
        * UIProcess/API/gtk/tests/WebViewTest.cpp: Add a method for testing the
        new run_javascript_from_gresource method.
        (runJavaScriptFromGResourceReadyCallback):
        (WebViewTest::runJavaScriptFromGResourceAndWaitUntilFinished):
        * UIProcess/API/gtk/tests/WebViewTest.h:
        * UIProcess/API/gtk/tests/resources/webkit2gtk-tests.gresource.xml: Added.
        Resource bundle containing the resources.
        * UIProcess/API/gtk/tests/resources/webkit2gtk-tests.test.js: Added.
        Example JavaScript file to test the GResources support.


2012-10-08  Kiran Muppala  <cmuppala@apple.com>

        Throttle DOM timers on hidden pages.
        https://bugs.webkit.org/show_bug.cgi?id=98474

        Reviewed by Maciej Stachowiak.

        Add HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define.  Use existing code of
        PAGE_VISIBILITY_API to detect changes to page visibility state.

        * Configurations/FeatureDefines.xcconfig:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Check visibility state on construction.
        (WebKit::WebPageProxy::initializeWebPage):
        Send initial visibility state message if HIDDEN_PAGE_DOM_TIMER_THROTTLING
        is enabled or if PAGE_VISIBILITY_API is enabled.
        (WebKit::WebPageProxy::viewStateDidChange):
        When PAGE_VISIBILITY_API is not enabled, compare new visibility against
        WebPageProxy::m_isVisible, to minimize number of messages sent.
        Remove unnecessary second call to PageClient::isViewVisible for updating
        visibility state.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPageVisibilityState):
        WebKitTestRunner uses this method to implement testRunner.setPageVisibility(),
        hence enable it for testing hidden page timer throttling as well.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit):
        (WebKit::WebPage::setVisibilityState):
        Ensure Page::setVisibilityState is called either if PAGE_VISIBILITY_API is
        enabled or if HIDDEN_PAGE_DOM_TIMER_THROTTLING is enabled.

        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPage.messages.in:

2012-10-08  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Windows build by exporting Frame::layerTreeAsText().

        * win/WebKit2.def:

2012-10-08  Rik Cabanier  <cabanier@adobe.com>

        Add missing compile flag for compositing
        https://bugs.webkit.org/show_bug.cgi?id=98681

        Reviewed by Dirk Schulze.

        This flag is needed in case there is a difference in API
        when compositing is enabled

        * Configurations/FeatureDefines.xcconfig:

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] EWK2UnitTestBase.ewk_cookie_manager_accept_policy unit test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98663

        Reviewed by Laszlo Gombos.

        EWK2UnitTestBase.ewk_cookie_manager_accept_policy unit test was
        failing because the elements of a list were checked in a given
        order but the list was not sorted beforehand.

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

2012-10-08  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Avoid useless converting to WKPage
        https://bugs.webkit.org/show_bug.cgi?id=98516

        Reviewed by Eric Seidel.

        Use priv->pageProxy->findString() and priv->pageProxy->hideFindUI()
        to avoid useless converting to WK.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_text_find):
        (ewk_view_text_find_highlight_clear):

2012-10-08  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.dispatchPendingLoadRequests
        https://bugs.webkit.org/show_bug.cgi?id=98638

        Reviewed by Eric Seidel.

        Add implementation for testRunner.dispatchPendingLoadRequests in
        WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleDispatchPendingLoadRequests):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::dispatchPendingLoadRequests):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add a setting to enable/disable smooth scrolling to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=98646

        Reviewed by Xan Lopez.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsSetProperty): Implement setter for new property.
        (webKitSettingsGetProperty): Implement getter for new property.
        (webkit_settings_class_init): Add new property
        enable-smooth-scrolling.
        (webkit_settings_get_enable_smooth_scrolling):
        (webkit_settings_set_enable_smooth_scrolling):
        * UIProcess/API/gtk/WebKitSettings.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (testWebKitSettings): Test smooth scrolling setting API.

2012-10-08  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Use URL instead of URI in the API
        https://bugs.webkit.org/show_bug.cgi?id=98643

        Reviewed by Kenneth Rohde Christiansen.

        Use URL instead of URI in WebKit2 EFL API. This change
        was discussed on the mailing list and aims at making
        the API more consistent.

        * UIProcess/API/efl/ewk_back_forward_list_item.cpp:
        (_Ewk_Back_Forward_List_Item):
        (ewk_back_forward_list_item_url_get):
        (ewk_back_forward_list_item_original_url_get):
        * UIProcess/API/efl/ewk_back_forward_list_item.h:
        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_url_scheme_register):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (decideDestinationWithSuggestedFilename):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_resource_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (_Ewk_View_Private_Data):
        (ewk_view_url_update):
        (ewk_view_url_set):
        (ewk_view_url_get):
        (ewk_view_reload):
        (ewk_view_reload_bypass_cache):
        (ewk_view_load_finished):
        (ewk_view_load_provisional_redirect):
        (ewk_view_load_provisional_started):
        (ewk_view_html_string_load):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didSameDocumentNavigationForFrame):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::loadUrlSync):
        (EWK2UnitTest::onURLChanged):
        (EWK2UnitTest::timeOutWhileWaitingUntilURLChangedTo):
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilURLChangedTo):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTestBase):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):
        (EWK2UnitTestServer::~EWK2UnitTestServer):
        (EWK2UnitTestServer::getURLForPath):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:
        (EWK2UnitTestServer):
        * UIProcess/API/efl/tests/resources/redirect_url_to_default.html: Renamed from Source/WebKit2/UIProcess/API/efl/tests/resources/redirect_uri_to_default.html.
        * UIProcess/API/efl/tests/test_ewk2_back_forward_list.cpp:
        (checkItem):
        (urlFromTitle):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2012-10-08  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] r122720 causes performance regression with DirectFB on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=97548

        Reviewed by Jocelyn Turcotte.

        Revert the rest of r122720. This change modifies the NativeImagePtr from QImage* to QPixmap*.

        Covered by existing tests.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::createImage):
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
        * WebProcess/WebCoreSupport/qt/WebDragClientQt.cpp:
        (WebKit::convertQPixmapToShareableBitmap):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):

2012-10-08  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Unreviewed build fix after r130630

        Explicit convertion is required from QSizeF to FloatSize.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the mouse hover events transformation when devicePixelRatio != 1
        https://bugs.webkit.org/show_bug.cgi?id=98429

        Reviewed by Kenneth Rohde Christiansen.

        This prevents the events from being transformed two or three times.
        This is only noticeable in desktop mode.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleHoverLeaveEvent):
        (WebKit::QtWebPageEventHandler::handleHoverMoveEvent):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Apply QQuickWebViewExperimental::devicePixelRatio to the desktop mode as well
        https://bugs.webkit.org/show_bug.cgi?id=98428

        Reviewed by Kenneth Rohde Christiansen.

        This is handled by the PageViewportController when in flickable mode.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Prevent the PageViewportController from affecting the viewport in desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=98427

        Reviewed by Kenneth Rohde Christiansen.

        QQuickFlickable isn't tightly bound to it anymore, we can avoid creating it
        completely in this case.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate::onComponentComplete):
        (QQuickWebViewPrivate::viewportController):
        (QQuickWebViewPrivate):
        (QQuickWebViewFlickablePrivate::viewportController):
        (QQuickWebViewFlickablePrivate):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::didRenderFrame):
        (WebKit::QtPageClient::didChangeContentsSize):
        (WebKit::QtPageClient::pageTransitionViewportReady):
        * UIProcess/qt/QtWebPageLoadClient.cpp:
        (WebKit::QtWebPageLoadClient::didCommitLoad):

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix a QSocketNotifier warning at startup
        https://bugs.webkit.org/show_bug.cgi?id=98411

        Reviewed by Simon Hausmann.

        The actual warning:
        QSocketNotifier: socket notifiers cannot be enabled from another thread

        The problem was that QSocketNotifier::setEnabled was called on the main thread
        after moveToThread was called. This hasn't had any effect since Connection
        would dispatch a readyReadHandler call right after which would then call
        setEnabled again from the correct thread from ~SocketNotifierResourceGuard.

        Replace the call with a queued invoke to shut the warning.

        * Platform/qt/WorkQueueQt.cpp:
        (WorkQueue::registerSocketEventHandler):

2012-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebView/populate-menu asserts in debug bots
        https://bugs.webkit.org/show_bug.cgi?id=98507

        Reviewed by Martin Robinson.

        Make sure we retain the page URL before asking for the icon.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (getIconSurfaceSynchronously): Retain the page URL before asking
        for the icon, and release it if we fail to get an icon.
        (processPendingIconsForPageURL): Renamed to make it clear it
        receives a Sring and not a char* and moved
        getIconSurfaceSynchronously() call out of the loop to call it only
        once even if there are multiple requests pending.
        (iconDataReadyForPageURLCallback): Do not retain the page URL
        here.

2012-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Don't use the C API internally in WebKitWebContext
        https://bugs.webkit.org/show_bug.cgi?id=96768

        Reviewed by Martin Robinson.

        Using the C++ classes directly instead of the C API wrappers we
        avoid a lot of toImpl/toAPI casts, string conversions and
        allocations. The code is also a lot simpler and easier to read.

        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        (didStart):
        (didReceiveResponse):
        (didReceiveData):
        (decideDestinationWithSuggestedFilename):
        (didCreateDestination):
        (didFail):
        (didCancel):
        (didFinish):
        (attachDownloadClientToContext):
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp:
        (attachRequestManagerClientToContext):
        * UIProcess/API/gtk/WebKitSecurityManager.cpp:
        (registerSecurityPolicyForURIScheme):
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (_WebKitWebContextPrivate):
        (createDefaultWebContext):
        (webkit_web_context_set_cache_model):
        (webkit_web_context_get_cache_model):
        (webkit_web_context_clear_cache):
        (webkit_web_context_download_uri):
        (webkit_web_context_get_cookie_manager):
        (webkit_web_context_get_favicon_database_directory):
        (webkit_web_context_get_favicon_database):
        (webkit_web_context_set_additional_plugins_directory):
        (webkitWebContextGetPluginThread):
        (webkit_web_context_register_uri_scheme):
        (webkitWebContextGetOrCreateDownload):
        (webkitWebContextRemoveDownload):
        (webkitWebContextGetContext):
        (webkitWebContextGetRequestManager):
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed):

2012-10-07  Kangil Han  <kangil.han@samsung.com>

        [EFL][WK2] Fix unused parameter compile warning.
        https://bugs.webkit.org/show_bug.cgi?id=98610

        Reviewed by Laszlo Gombos.

        Fixed unused parameter compile warning by removing initiatingPageRef parameter name.

        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest):

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * Platform/CoreIPC/ArgumentCoders.h:
        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::SyncMessageState::getOrCreate):
        (CoreIPC::Connection::waitForMessage):
        (CoreIPC::Connection::processIncomingMessage):
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerEventSourceHandler):
        (WorkQueue::unregisterEventSourceHandler):
        * Platform/mac/WorkQueueMac.cpp:
        (WorkQueue::unregisterMachPortEventHandler):
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed):
        * Shared/UserMessageCoders.h:
        (WebKit::UserMessageEncoder::baseEncode):
        * Shared/WebPreferencesStore.cpp:
        (WebKit::valueForKey):
        (WebKit::WebPreferencesStore::getBoolValueForKey):
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (CoreIPC::::decode):
        * Shared/qt/ArgumentCodersQt.cpp:
        (CoreIPC::::decode):
        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (CoreIPC::::decode):
        * UIProcess/API/efl/ewk_back_forward_list.cpp:
        (_Ewk_Back_Forward_List::~_Ewk_Back_Forward_List):
        * UIProcess/API/efl/ewk_context.cpp:
        (_Ewk_Context::~_Ewk_Context):
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_get_subresources):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall):
        * UIProcess/API/mac/WKPrintingView.mm:
        (-[WKPrintingView _expectedPreviewCallbackForRect:]):
        (pageDidDrawToPDF):
        (-[WKPrintingView _drawPreview:]):
        * UIProcess/API/mac/WKView.mm:
        (commandNameForSelector):
        (-[WKView validateUserInterfaceItem:]):
        * UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp:
        (WebKit::CoordinatedBackingStore::updateTile):
        (WebKit::CoordinatedBackingStore::texture):
        (WebKit::CoordinatedBackingStore::paintToTextureMapper):
        (WebKit::CoordinatedBackingStore::commitTileOperations):
        * UIProcess/CoordinatedGraphics/LayerTreeCoordinatorProxy.cpp:
        (WebKit::LayerTreeCoordinatorProxy::updateTileForLayer):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::adjustPositionForFixedLayers):
        (WebKit::LayerTreeRenderer::syncCanvas):
        (WebKit::LayerTreeRenderer::setLayerChildren):
        (WebKit::LayerTreeRenderer::setLayerFilters):
        (WebKit::LayerTreeRenderer::setLayerState):
        (WebKit::LayerTreeRenderer::assignImageToLayer):
        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
        (WebKit::GeolocationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::~WebInspectorServer):
        (WebKit::WebInspectorServer::registerPage):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::sendHTTPResponseHeader):
        * UIProcess/InspectorServer/qt/WebInspectorServerQt.cpp:
        (WebKit::WebInspectorServer::buildPageList):
        * UIProcess/Notifications/NotificationPermissionRequestManagerProxy.cpp:
        (WebKit::NotificationPermissionRequestManagerProxy::invalidateRequests):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
        * UIProcess/WebContext.cpp:
        (WebKit::createDictionaryFromHashMap):
        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::didFinishURLImport):
        * UIProcess/WebIntentData.cpp:
        (WebKit::WebIntentData::extras):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        (WebKit::WebProcessProxy::addBackForwardItem):
        (WebKit::WebProcessProxy::frameCountInPage):
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::getOrCreate):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp:
        (WebKit::InjectedBundleRangeHandle::getOrCreate):
        * WebProcess/InjectedBundle/InjectedBundleIntent.cpp:
        (WebKit::InjectedBundleIntent::extras):
        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::policyForOrigin):
        (WebKit::WebNotificationManager::show):
        (WebKit::WebNotificationManager::clearNotifications):
        (WebKit::WebNotificationManager::removeNotificationFromContextMap):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::invalidate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::destroyStream):
        (WebKit::NetscapePlugin::frameDidFinishLoading):
        (WebKit::NetscapePlugin::frameDidFail):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::buildHTTPHeaders):
        (WebKit::PluginView::~PluginView):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::layerByID):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::adoptImageBackingStore):
        (WebKit::LayerTreeCoordinator::releaseImageBackingStore):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::commandNameForSelectorName):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):
        (WebKit::WebProcess::focusedWebPage):
        (WebKit::WebProcess::createWebPage):
        (WebKit::WebProcess::webPageGroup):
        (WebKit::fromCountedSetToHashMap):
        (WebKit::WebProcess::setTextCheckerState):

2012-10-07  Dan Bernstein  <mitz@apple.com>

        Web process XPC services don't have correct version information in their Info.plist files
        https://bugs.webkit.org/show_bug.cgi?id=98619

        Reviewed by Anders Carlsson.

        * WebProcessService/Info.plist: Added CFBundleGetInfoString, and changed
        CFBundleShortVersionString and CFBundleVersion to report the source version.
        * WebProcessServiceForWebKitDevelopment/Info.plist: Ditto.

2012-10-06  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/12446507> [mac] WebKit clients cannot change the behavior of text-rendering: auto
        https://bugs.webkit.org/show_bug.cgi?id=98601

        Reviewed by Darin Adler.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters): Added initializer for
        to shouldEnableKerningAndLigaturesByDefault. The initial value is false.
        (WebKit::WebProcessCreationParameters::encode): Added encoding of
        shouldEnableKerningAndLigaturesByDefault.
        (WebKit::WebProcessCreationParameters::decode): Added decoding of
        shouldEnableKerningAndLigaturesByDefault.
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters): Added shouldEnableKerningAndLigaturesByDefault boolean
        member variable.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess): Changed to set
        shouldEnableKerningAndLigaturesByDefault in the process creation parameters according to
        the value of the WebKitKerningAndLigaturesEnabledByDefault user defaults key.
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Added a call to
        Font::setDefaultTypesettingFeatures() to enable kerning and ligatures if requested in the
        process creation parameters.

2012-10-05  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][WTR] WebKitTestRunner needs testRunner.setSerializeHTTPLoads
        https://bugs.webkit.org/show_bug.cgi?id=98524

        Reviewed by Alexey Proskuryakov.

        Add implementation for testRunner.setSerializeHTTPLoads in
        WebKitTestRunner.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetSerialLoadingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setSerialLoadingEnabled):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):

2012-10-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130556 and r130564.
        http://trac.webkit.org/changeset/130556
        http://trac.webkit.org/changeset/130564
        https://bugs.webkit.org/show_bug.cgi?id=98572

        The patch wasn't reviewed by a reviewer and it is breaking
        Chromium Windows (Requested by jchaffraix on #webkit).

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

2012-10-05  Sam Weinig  <sam@webkit.org>

        Set the current working directory to TMPDIR when entering the sandbox in the plug-in process.
        Based on a patch by Ivan Krstić.

        Reviewed by Anders Carlsson.

        * WebProcess/Plugins/Netscape/mac/NetscapeSandboxFunctions.mm:
        (enterSandbox):

2012-10-05  Tim Horton  <timothy_horton@apple.com>

        [cg] GraphicsContextCG should ask CG whether the shadow offset workaround is required
        https://bugs.webkit.org/show_bug.cgi?id=98565
        <rdar://problem/12436468>

        Reviewed by Simon Fraser.

        Add wkCGContextDrawsWithCorrectShadowOffsets.

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

2012-10-04  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Silvia Pfeiffer.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new WKSI function pointers.

2012-10-05  José Dapena Paz  <jdapena@igalia.com>

        [GTK] Add support for creating EGL contexts
        https://bugs.webkit.org/show_bug.cgi?id=77921

        Reviewed by Martin Robinson.

        This patch adds support for EGL, using OpenGL and OpenGL ES 2. Both
        options are set up on compile time, with the configure options
        --enable-egl and --enable-gles2.

        The implementation only adds support for EGL on top of X11, to
        isolate the changes to the minimum. More changes should come
        later to enable EGL for other targets (as Wayland).

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:

2012-10-04  Jon Lee  <jonlee@apple.com>

        Add a setting to enable plugin snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=98319
        <rdar://problem/12426480>

        Reviewed by Brady Eidson.

        Expose plugInSnapshottingEnabled preference to WebKit clients.

        * Shared/WebPreferencesStore.h:
        (WebKit):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetPlugInSnapshottingEnabled):
        (WKPreferencesGetPlugInSnapshottingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Update preference based on store.

2012-10-05  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt][WK2] Plugins are completely broken with a custom device pixel ratio
        https://bugs.webkit.org/show_bug.cgi?id=98518

        Reviewed by Kenneth Rohde Christiansen.

        Implement painting with scale factor in ShareableBitmap.
        The backing store of the plugin are still overscaled in MiniBrowser
        with this patch but this is only the effect of the fake device scale
        factor defined in qml (1.5). We should probably remove it on desktop.

        * Shared/qt/ShareableBitmapQt.cpp:
        (WebKit::ShareableBitmap::paint):

2012-10-05  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Unskip fullscreen unit tests for EwkView
        https://bugs.webkit.org/show_bug.cgi?id=98509

        Reviewed by Kenneth Rohde Christiansen.

        Update 2 fullscreen unit tests for EwkView so that
        they don't require a call to ecore_evas_fullscreen_set()
        to succeed. ecore_evas_fullscreen_set() does not
        seem to work in Xvfb and causes the tests to hang.
        With this update, we can now run those tests again.

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

2012-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitPrintOperation/print-errors gives runtime critical warnings
        https://bugs.webkit.org/show_bug.cgi?id=98497

        Reviewed by Martin Robinson.

        The problem is that GTK+ tries to write in the IO channel that has
        already been closed.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print): Finish the surface when
        printing fails because printing data is invalid.

2012-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test /webkit2/WebKitWebResource/response fails
        https://bugs.webkit.org/show_bug.cgi?id=98511

        Reviewed by Martin Robinson.

        Do not consider the favicon as a resource for the web resources
        unit tests.

        * UIProcess/API/gtk/tests/TestResources.cpp:

2012-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION (r129989 - r130019): [WK2] TestResources test is failing
        https://bugs.webkit.org/show_bug.cgi?id=98342

        Reviewed by Martin Robinson.

        Return 404 error in unit tests using a HTTP server for paths not
        handled by the test. This way all tests should return now a 404
        for /favicon.ico.

        * UIProcess/API/gtk/tests/TestBackForwardList.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestCookieManager.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestSSL.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestWebKitPolicyClient.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (serverCallback):
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        (serverCallback):

2012-10-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WK2][SOUP] Assertion hit in WebKit::DownloadManager::downloadFinished() when download fails
        https://bugs.webkit.org/show_bug.cgi?id=97565

        Reviewed by Gustavo Noronha Silva.

        Make sure to notify the downlaod client that the response has been
        received when the newly created download has already been added to
        the DownloadManager downloads map.

        * WebProcess/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::DownloadClient): Initialize
        m_handleResponseLaterID.
        (WebKit::DownloadClient::~DownloadClient): Remove the source for
        the delayed response notification if it hasn't been triggered.
        (WebKit::DownloadClient::didReceiveData): If response hasn't been
        handled yet, remove the source for the delayed response
        notification and handle the resource before start writing the data
        received to the output stream.
        (WebKit::DownloadClient::handleResponse): Call
        didReceiveResponse() with the delayed response.
        (WebKit::DownloadClient::handleResponseLaterCallback): Call
        handleResponse().
        (WebKit::DownloadClient::handleResponseLater): Schedule an idle
        callback to handle the response later, to make sure the download
        has been added to the downloads map.
        (WebKit::Download::startWithHandle): Call handleResponseLater()
        with the given response to handle the response when the download
        has been added to the downloads map.

2012-10-05  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Remove "web" word from ewk_web_error APIs
        https://bugs.webkit.org/show_bug.cgi?id=97886

        Reviewed by Gyuyoung Kim.

        Remove "web" word from ewk_web_error APIs.
        "web" word was redundant because "ewk" means "EFL WebKit" and WK APIs for error does not have "web" word.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_context_download_client.cpp:
        (didFail):
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/API/efl/ewk_error.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_error.cpp.
        (_Ewk_Error):
        (_Ewk_Error::_Ewk_Error):
        (_Ewk_Error::~_Ewk_Error):
        (ewk_error_free):
        (ewk_error_type_get):
        (ewk_error_url_get):
        (ewk_error_code_get):
        (ewk_error_description_get):
        (ewk_error_cancellation_get):
        (ewk_error_new):
        * UIProcess/API/efl/ewk_error.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_error.h.
        * UIProcess/API/efl/ewk_error_private.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_error_private.h.
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_resource_load_failed):
        (ewk_view_download_job_failed):
        (ewk_view_load_error):
        (ewk_view_load_provisional_failed):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        (didFailLoadWithErrorForFrame):
        (didFailProvisionalLoadWithErrorForFrame):
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didFailLoadForResource):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (on_download_failed):

2012-10-05  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][GTK] WebPageAccessibilityObject leaking
        https://bugs.webkit.org/show_bug.cgi?id=98502

        Reviewed by Carlos Garcia Campos.

        Use GRefPtr on the accessibility object to fix the leak.

        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::updateAccessibilityTree):

2012-10-05  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add API to count the matching text
        https://bugs.webkit.org/show_bug.cgi?id=97873

        Reviewed by Gyuyoung Kim.

        Add an API, ewk_view_text_matches_count(), to count the matched text in the document.
        This API does not highlight the matched text in the document unlike ewk_view_text_find().

        ewk_view_text_find() finds the matching text and but also update the UI view,
        but some applications may not want to affect the view, and just want to know the count.

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

2012-10-05  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        [WK2][GTK][EFL] standard_output returned by g_spawn_sync must be freed
        https://bugs.webkit.org/show_bug.cgi?id=98384

        Reviewed by Gyuyoung Kim.

        Free the standard_output returned by g_spawn_sync() to avoid
        a memory leak.

        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2012-10-05  Jongseok Yang  <js45.yang@samsung.com>

        [EFL][WK2] Remove "web" word from ewk_resource APIs
        https://bugs.webkit.org/show_bug.cgi?id=97887

        Reviewed by Gyuyoung Kim.

        Remove "web" word from ewk_web_resource APIs.
        "web" word was redundant because "ewk" means "EFL WebKit" and enough to understand the meaning with ewk_resource_XXX.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/ewk_resource.cpp: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_resource.cpp.
        (_Ewk_Resource):
        (_Ewk_Resource::_Ewk_Resource):
        (_Ewk_Resource::~_Ewk_Resource):
        (ewk_resource_ref):
        (ewk_resource_unref):
        (ewk_resource_url_get):
        (ewk_resource_new):
        (ewk_resource_main_resource_get):
        * UIProcess/API/efl/ewk_resource.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_resource.h.
        * UIProcess/API/efl/ewk_resource_private.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_web_resource_private.h.
        * UIProcess/API/efl/ewk_view.cpp:
        (_ewk_view_priv_loading_resources_clear):
        (ewk_view_resource_load_initiated):
        (ewk_view_resource_load_response):
        (ewk_view_resource_load_failed):
        (ewk_view_resource_load_finished):
        (ewk_view_resource_request_sent):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        (didInitiateLoadForResource):

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

        [EFL][WK2] ewk_web_error_free is not a public API
        https://bugs.webkit.org/show_bug.cgi?id=98482

        Reviewed by Gyuyoung Kim.

        Because Ewk_Web_Error is just passed as a parameter of callback function
        and maintained internally, ewk_web_error_free should not be a public API.

        This patch moves ewk_web_error_free from public header to private header.

        * UIProcess/API/efl/ewk_context_download_client.cpp:
        * UIProcess/API/efl/ewk_view_loader_client.cpp:
        * UIProcess/API/efl/ewk_view_resource_load_client.cpp:
        * UIProcess/API/efl/ewk_web_error.cpp:
        * UIProcess/API/efl/ewk_web_error.h:
        * UIProcess/API/efl/ewk_web_error_private.h:

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement window frame callbacks in UIClient
        https://bugs.webkit.org/show_bug.cgi?id=98280

        Reviewed by Kenneth Rohde Christiansen.

        Implement callbacks to set and query window geometry
        in EwkView's UIClient.

        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (getWindowFrame):
        (setWindowFrame):
        (ewk_view_ui_client_attach):
        * UIProcess/API/efl/tests/resources/window_move_resize.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (windowMoveResizeTimedOut):
        (TEST_F): Add corresponding unit test.

2012-10-04  Rik Cabanier  <cabanier@adobe.com>

        Turn Compositing on by default in WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=98315

        Reviewed by Simon Fraser.

        enable -webkit-blend-mode on trunk.

        * Configurations/FeatureDefines.xcconfig:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Fix the Qt build by removing an errant paste at the top of the file.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:

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

        [EFL][WK2] Add APIs to get/set the frame flattening.
        https://bugs.webkit.org/show_bug.cgi?id=95982

        Reviewed by Gyuyoung Kim.

        Added new APIs and test case to support frame flattening.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_enable_frame_flattening_set):
        (ewk_settings_enable_frame_flattening_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/resources/frame_flattening_test.html: Added.
        * UIProcess/API/efl/tests/resources/frame_flattening_test_subframe.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        TiledCoreAnimationDrawingArea.mm should not include RenderLayerCompositor.h
        https://bugs.webkit.org/show_bug.cgi?id=98471

        Reviewed by Dean Jackson.

        Remove #import of <WebCore/RenderLayerCompositor.h> from this file.
        It is not required.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Final part of "sync" to "flush" renaming
        https://bugs.webkit.org/show_bug.cgi?id=98430

        Reviewed by Tim Horton.

        Change method names on GraphicsLayer and GraphicsLayerClient that
        refer to "sync" to use the term "flush" instead, to be consistent
        with the rest of the code.

        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp:
        (WebKit::LayerTreeRenderer::paintToCurrentGLContext):
        (WebKit::LayerTreeRenderer::flushLayerChanges):
        * UIProcess/CoordinatedGraphics/LayerTreeRenderer.h:
        (WebKit::LayerTreeRenderer::notifyFlushRequired):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeLayerState):
        (WebCore::CoordinatedGraphicsLayer::didChangeAnimatedProperties):
        (WebCore::CoordinatedGraphicsLayer::didChangeChildren):
        (WebCore::CoordinatedGraphicsLayer::didChangeFilters):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToCanvas):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::flushPendingLayerChanges):
        (WebKit::LayerTreeCoordinator::notifyFlushRequired):
        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.h:
        (LayerTreeCoordinator):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::notifyFlushRequired):
        (WebKit::LayerTreeHostCA::flushPendingLayerChanges):
        * WebProcess/WebPage/ca/LayerTreeHostCA.h:
        (LayerTreeHostCA):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::notifyFlushRequired):
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::notifyFlushRequired):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement PageClientImpl::isViewVisible()
        https://bugs.webkit.org/show_bug.cgi?id=98249

        Reviewed by Kenneth Rohde Christiansen.

        Implement PageClientImpl::isViewVisible() for EFL port
        by calling evas_object_visible_get() on the view.

        * UIProcess/API/efl/PageClientImpl.cpp:
        (WebKit::PageClientImpl::isViewVisible):

2012-10-04  Alexey Proskuryakov  <ap@apple.com>

        Improve initial empty process tracking
        https://bugs.webkit.org/show_bug.cgi?id=98458

        Reviewed by Sam Weinig.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::disconnectProcess):
        Unset m_haveInitialEmptyProcess if we no longer do.

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Support all attributes of GeolocationPosition
        https://bugs.webkit.org/show_bug.cgi?id=98212

        Reviewed by Sam Weinig.

        Add complete support for GeolocationPosition.

        * Shared/WebGeolocationPosition.cpp:
        (WebKit::WebGeolocationPosition::WebGeolocationPosition):
        (WebKit::WebGeolocationPosition::Data::encode):
        (WebKit::WebGeolocationPosition::Data::decode):
        * Shared/WebGeolocationPosition.h:
        (Data):
        (WebKit::WebGeolocationPosition::create):
        (WebKit::WebGeolocationPosition::canProvideAltitude):
        (WebKit::WebGeolocationPosition::altitude):
        (WebGeolocationPosition):
        (WebKit::WebGeolocationPosition::canProvideAltitudeAccuracy):
        (WebKit::WebGeolocationPosition::altitudeAccuracy):
        (WebKit::WebGeolocationPosition::canProvideHeading):
        (WebKit::WebGeolocationPosition::heading):
        (WebKit::WebGeolocationPosition::canProvideSpeed):
        (WebKit::WebGeolocationPosition::speed):
        WebGeolocationPosition mirror the attributes of WebCore::GeolocationPosition.

        * UIProcess/API/C/WKGeolocationPosition.cpp:
        (WKGeolocationPositionCreate):
        (WKGeolocationPositionCreate_b):
        Add a new API exposing all the arguments.

        * UIProcess/API/C/WKGeolocationPosition.h:
        * WebProcess/Geolocation/WebGeolocationManager.cpp:
        (WebKit::WebGeolocationManager::didChangePosition):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Standardize on "flush" terminology for compositing layer flushing/syncing
        https://bugs.webkit.org/show_bug.cgi?id=98321

        Reviewed by Simon Fraser.

        Rename compositing-related methods that refer to "syncing" to instead
        refer to "flushing".

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::scheduleCompositingLayerFlush):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebProcess/WebPage/DrawingArea.h:
        (DrawingArea):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::scheduleCompositingLayerFlush):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::flushPendingLayerChanges):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlush):
        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Add setting to allow file access from file:// URLs
        https://bugs.webkit.org/show_bug.cgi?id=98121

        Reviewed by Laszlo Gombos.

        Add Ewk setting to set / query permission to access
        files from file:// URLs.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/resources/local_file_access.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F): Add unit tests for new ewk setting.

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Run unit tests with Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=98389

        Reviewed by Laszlo Gombos.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init): Call ecore_evas_shutdown() instead of
        edje_shutdown() when ecore_x_init() fails.
        (ewk_shutdown): Remove extra call to edje_shutdown().
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F): Temporarily disable fullscreen unit tests
        until we get them working with Xvfb.

2012-10-04  Balazs Kelemen  <kbalazs@webkit.org>

        Don't allow compositing to be disabled in forced compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=98048

        Reviewed by Jocelyn Turcotte.

        Export Settings::setAcceleratedCompositingEnabled because it has been deinlined.

        * win/WebKit2.def:
        * win/WebKit2CFLite.def:

2012-10-04  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix the tst_QQuickWebView::scrollRequest auto test
        https://bugs.webkit.org/show_bug.cgi?id=98045

        Reviewed by Simon Hausmann.

        Relying on QQuickWebViewPrivate::setNeedsDisplay can cause a false positive
        emission of the loadVisuallyCommitted signal since this method is also
        called when a layer is deleted or when the root layer changes.

        Move the signal emission to QQuickWebViewPrivate::didRenderFrame which
        is called only after a DidRenderFrame message has been received from the
        web process.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::setNeedsDisplay):
        (QQuickWebViewPrivate::didRenderFrame):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/qt/QtPageClient.cpp:
        (WebKit::QtPageClient::didRenderFrame):

2012-10-04  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r130363): Broke unit tests
        https://bugs.webkit.org/show_bug.cgi?id=98341

        Reviewed by Gyuyoung Kim.

        Fix WebKit2 EFL to use X11 as well.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.cpp:
        (EWK2UnitTest::EWK2UnitTestEnvironment::EWK2UnitTestEnvironment):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        (EWK2UnitTestEnvironment):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestMain.cpp:
        (main):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (checkFullScreenProperty):

2012-10-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL] Enable use of X11 in DumpRenderTree / WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=98231

        Reviewed by Gyuyoung Kim.

        Initialize ecore_x library in ewk_main instead of
        WebKitTestRunner since WebKit is using ecore_x
        not WebKitTestRunner itself.

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):
        (ewk_shutdown):

2012-10-03  Kangil Han  <kangil.han@samsung.com>

        Fix unused parameter compile warnings.
        https://bugs.webkit.org/show_bug.cgi?id=98243

        Reviewed by Alexey Proskuryakov.

        Fixed unused parameter compile warnings by removing parameter names, adding UNUSED_PARAM usage and commenting out.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginInternal):
        * PluginProcess/unix/PluginProcessUnix.cpp:
        (WebKit::PluginProcess::platformInitialize):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::getOwnPropertyNames):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_RequestRead):
        (WebKit::NPN_NewStream):
        (WebKit::NPN_Write):
        (WebKit::NPN_MemFlush):
        (WebKit::NPN_ReloadPlugins):
        (WebKit::NPN_GetJavaPeer):
        (WebKit::NPN_InvalidateRegion):
        (WebKit::NPN_ForceRedraw):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::contentsScaleFactorChanged):
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitializeWindowed):
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::contentsScaleFactorChanged):

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

        Plugins are killed after 45 seconds if showing keychain "Allow/Deny" dialog
        https://bugs.webkit.org/show_bug.cgi?id=85138
        <rdar://problem/11406430>

        Reviewed by Andreas Kling.

        Remove the watchdog that would kill a plug-in if we've been waiting for a sync reply from it for more than 45 seconds.
        It's unlikely that someone is going to wait 45 seconds for Safari to recover from a plug-in hang, and the timeout is
        causing problems with plug-ins (see the bugzilla bug for more information).

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::Connection):
        (CoreIPC::Connection::waitForSyncReply):
        * Platform/CoreIPC/Connection.h:
        (Client):
        (Connection):
        * PluginProcess/PluginProcess.cpp:
        * PluginProcess/PluginProcess.h:
        (PluginProcess):
        * PluginProcess/WebProcessConnection.cpp:
        * PluginProcess/WebProcessConnection.h:
        (WebProcessConnection):
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        (WebProcessCreationParameters):
        * UIProcess/Plugins/PluginProcessManager.cpp:
        * UIProcess/Plugins/PluginProcessManager.h:
        (PluginProcessManager):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        * UIProcess/Plugins/PluginProcessProxy.h:
        (PluginProcessProxy):
        * UIProcess/WebConnectionToWebProcess.cpp:
        * UIProcess/WebConnectionToWebProcess.h:
        (WebConnectionToWebProcess):
        * UIProcess/WebProcessProxy.cpp:
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):
        * UIProcess/WebProcessProxy.messages.in:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/Plugins/PluginProcessConnection.cpp:
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (PluginProcessConnection):
        * WebProcess/WebConnectionToUIProcess.cpp:
        * WebProcess/WebConnectionToUIProcess.h:
        (WebConnectionToUIProcess):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        (WebProcess):

2012-10-03  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [WK2] PageViewportController.cpp is supposed to be a generic WebKit2 file but only works with Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=98186

        Reviewed by Noam Rosenthal.

        Remove the dependece of WebCore::FloatSize to QSize implicit conversion.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::updateSize):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewLegacyPrivate::updateViewportSize):
        (QQuickWebViewFlickablePrivate::updateViewportSize):
        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::didRenderFrame):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::syncVisibleContents):
        (WebKit::PageViewportController::viewportSizeInContentsCoordinates):
        (WebKit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):

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

        Try to fix the Qt WebKit2 failures.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        Always force compositing if USE(COORDINATED_GRAPHICS) is true.

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

        Use the XPC service by default on newer systems
        https://bugs.webkit.org/show_bug.cgi?id=98297
        <rdar://problem/12424641>

        Reviewed by Sam Weinig.

        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        Return false for older systems.

        (WebKit::WebProcessProxy::platformConnect):
        Call shouldUseXPC().

2012-10-02  Andy Estes  <aestes@apple.com>

        [WebKit2] Add the ability to send messages to the WebPageGroupProxy
        https://bugs.webkit.org/show_bug.cgi?id=98233

        Reviewed by Anders Carlsson.

        Add a WebPageGroupProxy.messages.in, implement a stub message receiver
        in WebPageGroupProxy, and teach WebProcess how to route messages to the
        appropriate WebPageGroupProxy.

        * CMakeLists.txt: Tell a build system about added files.
        * DerivedSources.make: Ditto.
        * DerivedSources.pri: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebKit2.xcodeproj/project.pbxproj: Ditto.
        * win/WebKit2.vcproj: Ditto.
        * Platform/CoreIPC/MessageID.h: Add MessageClassWebPageGroupProxy.
        * WebProcess/WebPage/WebPageGroupProxy.cpp:
        (WebKit::WebPageGroupProxy::didReceiveMessage): Stub out the method
        that will receive messages.
        (WebKit::WebPageGroupProxy::didReceiveWebPageGroupProxyMessage): Stub
        out a method that will exist in WebPageGroupProxyMessageReceiver.cpp
        once WebPageGroupProxy.messages.in contains messages.
        * WebProcess/WebPage/WebPageGroupProxy.h:
        * WebProcess/WebPage/WebPageGroupProxy.messages.in: Added.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::didReceiveMessage): Route messages to the
        WebPageGroupProxy matching destinationID if the message is of class
        MessageClassWebPageGroupProxy.

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

        Change most GraphicsLayer::create calls to use the version that takes a GraphicsLayerFactory
        https://bugs.webkit.org/show_bug.cgi?id=98217

        Reviewed by Andreas Kling.

        * WebProcess/WebPage/CoordinatedGraphics/LayerTreeCoordinator.cpp:
        (WebKit::LayerTreeCoordinator::LayerTreeCoordinator):
        (WebKit::LayerTreeCoordinator::createPageOverlayLayer):
        * WebProcess/WebPage/ca/LayerTreeHostCA.cpp:
        (WebKit::LayerTreeHostCA::initialize):
        (WebKit::LayerTreeHostCA::createPageOverlayLayer):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::createPageOverlayLayer):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):

2012-10-03  Alberto Garcia  <agarcia@igalia.com>

        [GTK] [WK2] Unused variable in webkitWebViewLoadChanged
        https://bugs.webkit.org/show_bug.cgi?id=98271

        Reviewed by Martin Robinson.

        Use the priv variable to directly access private attributes
        instead of dereferencing webView->priv all the time.
        Fixes -Wunused-variable.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewLoadChanged):

2012-10-03  Christophe Dumez  <christophe.dumez@intel.com>

        [EFL][WK2] Implement focus/unfocus in UIClient
        https://bugs.webkit.org/show_bug.cgi?id=98253

        Reviewed by Gyuyoung Kim.

        Implement focus-related functionality in
        WebKitEFL's UIClient.

        * UIProcess/API/efl/ewk_view_ui_client.cpp:
        (focus):
        (unfocus):
        (takeFocus):
        (ewk_view_ui_client_attach):

2012-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView doesn't emit notify:favicon when it changes in some cases in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=98153

        Reviewed by Martin Robinson.

        The main problem is that it relies on icon-ready signal to be
        emitted by the favicon database, but that signal is only emitted
        when the icon is loaded from the network or imported from the
        database, but not when the icon is already in memory. The way to
        detect if a web page doesn't have a favicon or it's unknown it's
        also incorrectly done and the wrong error is returned for pages
        not having a favicon.

        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (GetFaviconSurfaceAsyncData): Add a GError field.
        (getIconSurfaceSynchronously): Add a GError parameter and fill it
        accordingly. Use imageForPageURL() instead of
        nativeImageForPageURL() because the latter always returns NULL for
        empty images, so it's not possible to know whether it's an empty
        image or not. If the image is empty is because the web page is
        known by the database and it doesn't have a favicon.
        (processPendingIconsForURI): Pass the data error to
        getIconSurfaceSynchronously(). Don't set the icon if the request
        has been cancelled.
        (webkitFaviconDatabaseGetFavicon): Pass NULL as error to
        getIconSurfaceSynchronously().
        (setErrorForAsyncResult): Fill also error for
        WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_UNKNOWN.
        (webkit_favicon_database_get_favicon): If we get NULL as icon in
        the first place, check the error code returned by
        getIconSurfaceSynchronously() and return early if the page doesn't
        have a favicon. Remove the cancelled signal to avoid race
        conditions.
        (webkit_favicon_database_get_favicon_finish): Errors are processed
        before now, so simply propagate the error if any or return the
        favicon.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate): Keep a reference of the favicon.
        (webkitWebViewCancelFaviconRequest): Cancel any async operation to
        get the favicon.
        (webkitWebViewUpdateFavicon): Check if favicon has changed and
        save it emitting also notify::favicon signal.
        (iconReadyCallback): Only update the favicon if we don't have one
        already.
        (webkitWebViewFinalize): Call webkitWebViewCancelFaviconRequest().
        (getFaviconReadyCallback): Update the favicon.
        (webkitWebViewRequestFavicon): Request a new favicon.
        (webkitWebViewLoadChanged): Try to get the favicon when the load
        has been committed and the URI is the final one.
        (webkit_web_view_get_favicon): Return the cached favicon.
        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (serverCallback):
        (testSetDirectory):
        (testGetFavicon):
        (testWebViewFavicon):

2012-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the web view that initiated a custom URI request to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=97895

        Reviewed by Martin Robinson.

        The message DidReceiveURIRequest is now sent to the page that
        initiated the request that forwards the mesassage to the
        WebSoupRequestManagerProxy.

        * UIProcess/API/C/soup/WKSoupRequestManager.h: Update
        didReceiveURIRequest callback to receive the initiating page ID.
        * UIProcess/API/efl/ewk_context_request_manager_client.cpp:
        (didReceiveURIRequest): Update the callback API change.
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp:
        (didReceiveURIRequest): Pass the initiating page to the
        WebKitURISchemeRequest constructor.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp:
        (_WebKitURISchemeRequestPrivate): Keep a reference to the
        WebPageProxy that initiatesd the request.
        (webkitURISchemeRequestCreate): Save the initiating page.
        (webkit_uri_scheme_request_get_web_view): Return the view widget
        of the initiating WebPageProxy.
        * UIProcess/API/gtk/WebKitURISchemeRequest.h:
        * UIProcess/API/gtk/WebKitURISchemeRequestPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didReceiveURIRequest): Forward the request
        to the soup request manager proxy.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add didReceiveURIRequest().
        * UIProcess/WebPageProxy.messages.in: Add DidReceiveURIRequest
        message.
        * UIProcess/soup/WebSoupRequestManagerClient.cpp:
        (WebKit::WebSoupRequestManagerClient::didReceiveURIRequest):
        Pass the inititing page to the client callback.
        * UIProcess/soup/WebSoupRequestManagerClient.h:
        (WebSoupRequestManagerClient):
        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
        (WebKit::WebSoupRequestManagerProxy::didReceiveURIRequest): Pass
        the inititing page to the client.
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * UIProcess/soup/WebSoupRequestManagerProxy.messages.in: Remove
        DidReceiveURIRequest message.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::WebFrameNetworkingContext):
        Save the pageID of the WebFrame.
        (WebKit::WebFrameNetworkingContext::initiatingPageID): Return the
        inititing page ID.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::send): Send DidReceiveURIRequest
        message to the WebPage that initiated the request.

2012-10-02  Zan Dobersek  <zandobersek@gmail.com>

        Unreviewed build fix for the GTK port after r130207.
        Use proper file separators for new entries.

        * GNUmakefile.list.am:

2012-10-02  Joone Hur  <joone.hur@intel.com>

        Unreviewed, GTK+,Efl debug build fix after r130225.

        This patch allows to include the static xErrorString variable when LOG_DISABLED is 0.

        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit):

2012-10-02  Sam Weinig  <sam@webkit.org>

        Fix a typo and add some \n's to make Mark happy.

        Rubber-stamped by Mark "logging must be fast" Rowe.

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

2012-10-02  Sam Weinig  <sam@webkit.org>

        Add Objective-C API for the InjectedBundle
        https://bugs.webkit.org/show_bug.cgi?id=98222

        Reviewed by Anders Carlsson.

        Add skeleton of the Objective-C API for the InjectedBundle.

        * WebKit2.xcodeproj/project.pbxproj:
        Add new API files.

        * WebProcess/InjectedBundle/API/mac: Added.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h: Added.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm: Added.
        (-[WKWebProcessPlugIn _initWithPrincipalClassInstance:injectedBundle:]):
        Initialization method for the WKWebProcessPlugIn object. This object will act as the WKBundleRef
        object does in the C-SPI.
        (+[WKWebProcessPlugIn _shared]):
        Access the shared instance.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h: Added.

        * WebProcess/InjectedBundle/InjectedBundle.h:
        Store an NSBundle rather than a CFBundleRef as the platform bundle.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp: Removed.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm: Copied from Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.cpp.
        (WebKit::InjectedBundle::load):
        If a principal class is provided and no WKBundleInitialize function is present in the bundle, use the principal class
        as the initialization point. The principal class must conform to the WKWebProcessPlugIn protocol and if a
        webProcessPlugInInitialize: method is present, it is called. 

2012-10-02  Dan Bernstein  <mitz@apple.com>

        Fixed a crash when the localization option is not passed to the web process.

        Reviewed by Sam Weinig.

        * PluginProcess/mac/PluginProcessMainMac.mm:
        (WebKit::PluginProcessMain): Changed to not call WKSetDefaultLocalization
        with the empty string.
        * WebProcess/mac/WebProcessMainMac.mm:
        (WebKit::WebProcessMain): Ditto.

== Rolled over to ChangeLog-2012-10-02 ==
