2013-04-24  Claudio Saavedra  <csaavedra@igalia.com>

        Build break after r149004
        https://bugs.webkit.org/show_bug.cgi?id=115091

        Reviewed by Csaba Osztrogonác.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::pageBackgroundTransparencyChanged):
        (WebKit): Add dummy method for new virtual method.
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk): Ditto.

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

        [EFL][WK2] Build break after r149004
        https://bugs.webkit.org/show_bug.cgi?id=115066

        Reviewed by Tim Horton.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::pageBackgroundTransparencyChanged):
        Added dummy method for new virtual method.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost): Ditto.

2013-04-23  Simon Fraser  <simon.fraser@apple.com>

        Turn off tiled drawing in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=115064

        Reviewed by Tim Horton.
        
        We get little benefit from making the Web Inspector use tiled drawing;
        it doesn't scroll the main frame, so doesn't benefit from the ScrollingCoordinator.
        Not using tiled drawing also means that we won't make compositing
        layers for position: -webkit-sticky, which avoids a number of issues
        with compositing layer proliferation in the inspector.
        
        Also turn off accelerated drawing, since that pref will force a single
        compositing layer.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::createInspectorPageGroup):
        * UIProcess/mac/WebInspectorProxyMac.mm:

2013-04-23  Simon Fraser  <simon.fraser@apple.com>

        When the web page transparency changes, DrawingAreaImpl needs to know about it
        https://bugs.webkit.org/show_bug.cgi?id=115062

        Reviewed by Tim Horton.
        
        The non-composited contents layer owned by LayerTreeHostMac needs to
        be marked as opaque or not depending on whether the WebPage draws
        a background (or transparent background). It computed this at creation,
        but did not dynamically update the state. Fix it so it does.
        
        This fixes cases of garbage pixels in the Web Inspector toolbar area
        in some configurations.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::pageBackgroundTransparencyChanged):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::pageBackgroundTransparencyChanged):

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

        REGRESSION(r148922): Crash opening web archives or loading web pages
        https://bugs.webkit.org/show_bug.cgi?id=115061
        <rdar://problem/13714228>

        Reviewed by Sam Weinig.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        Calling ResourceLoader::didReceiveResponse can cause the WebResourceLoader object to go away,
        so protect it here and guard against a null core loader.

2013-04-23  Tim Horton  <timothy_horton@apple.com>

        Web process crashes at WebPage::determinePrimarySnapshottedPlugInTimerFired + 8
        https://bugs.webkit.org/show_bug.cgi?id=115056
        <rdar://problem/13719543>

        Reviewed by Simon Fraser.

        Stop the primary plugin detection timer if the WebPage is torn down.

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

2013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_uri_request_get_http_headers to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=112160

        Reviewed by Andreas Kling.

        It allows to load requests with custom headers, or to update the
        headers of a request before being sent to the server in the
        WebKitWebPage::send-request callback.

        * UIProcess/API/gtk/WebKitURIRequest.cpp:
        (_WebKitURIRequestPrivate): Add SoupMessageHeaders.
        (webkit_uri_request_get_http_headers): Return the HTTP headers of
        the request as a SoupMessageHeaders if the request is HTTP. A new
        SoupMessageHeaders is created on demand using the existing headers
        of the request.
        (webkitURIRequestGetResourceRequest): Instead of returning a const
        reference of the internal ResourceRequest, set a request passed as
        a reference and update its HTTP headers using the
        SoupMessageHeaders if present.
        * UIProcess/API/gtk/WebKitURIRequest.h:
        * UIProcess/API/gtk/WebKitURIRequestPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_request): Update to the new
        webkitURIRequestGetResourceRequest API.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
        webkit_uri_request_get_http_headers symbol.
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (testWebPageURI):
        (testURIRequestHTTPHeaders):
        (serverCallback):
        (beforeAll):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (willSendRequestForFrame): Update to the new
        webkitURIRequestGetResourceRequest API.

2013-04-23  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2] Make EFL WKView API shareable between ports
        https://bugs.webkit.org/show_bug.cgi?id=114734

        Reviewed by Anders Carlsson.

        EFL-independent part of WKView API (and its implementation) is now
        shareable between ports that use Coordinated Graphics and put to
        CoordinatedGraphics folders.

        * PlatformEfl.cmake:
        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp: Renamed from Source/WebKit2/UIProcess/API/C/efl/WKView.cpp.
        (WKViewCreate):
        (WKViewInitialize):
        (WKViewGetSize):
        (WKViewSetSize):
        (WKViewSetViewClient):
        (WKViewIsFocused):
        (WKViewSetIsFocused):
        (WKViewIsVisible):
        (WKViewSetIsVisible):
        (WKViewGetContentScaleFactor):
        (WKViewSetContentScaleFactor):
        (WKViewGetContentPosition):
        (WKViewSetContentPosition):
        (WKViewSetUserViewportTranslation):
        (WKViewUserViewportToContents):
        (WKViewPaintToCurrentGLContext):
        (WKViewGetPage):
        (WKViewSetDrawsBackground):
        (WKViewGetDrawsBackground):
        (WKViewSetDrawsTransparentBackground):
        (WKViewGetDrawsTransparentBackground):
        (WKViewSetThemePath):
        (WKViewSuspendActiveDOMObjectsAndAnimations):
        (WKViewResumeActiveDOMObjectsAndAnimations):
        (WKViewSetShowsAsSource):
        (WKViewGetShowsAsSource):
        (WKViewExitFullScreen):
        * UIProcess/API/C/CoordinatedGraphics/WKView.h: Renamed from Source/WebKit2/UIProcess/API/C/efl/WKView.h.
        * UIProcess/API/C/efl/WKViewEfl.cpp: Added.
        (WKViewPaintToCairoSurface):
        (WKViewCreateSnapshot):
        * UIProcess/API/C/efl/WKViewEfl.h: Added.
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebView.cpp.
        (WebKit):
        (WebKit::WebView::WebView):
        (WebKit::WebView::~WebView):
        (WebKit::WebView::initialize):
        (WebKit::WebView::setSize):
        (WebKit::WebView::setFocused):
        (WebKit::WebView::setVisible):
        (WebKit::WebView::setUserViewportTranslation):
        (WebKit::WebView::userViewportToContents):
        (WebKit::WebView::paintToCurrentGLContext):
        (WebKit::WebView::setThemePath):
        (WebKit::WebView::setDrawsBackground):
        (WebKit::WebView::drawsBackground):
        (WebKit::WebView::setDrawsTransparentBackground):
        (WebKit::WebView::drawsTransparentBackground):
        (WebKit::WebView::suspendActiveDOMObjectsAndAnimations):
        (WebKit::WebView::resumeActiveDOMObjectsAndAnimations):
        (WebKit::WebView::setShowsAsSource):
        (WebKit::WebView::showsAsSource):
        (WebKit::WebView::exitFullScreen):
        (WebKit::WebView::initializeClient):
        (WebKit::WebView::didChangeContentsSize):
        (WebKit::WebView::transformFromScene):
        (WebKit::WebView::transformToScene):
        (WebKit::WebView::coordinatedGraphicsScene):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::dipSize):
        (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/CoordinatedGraphics/WebView.h: Renamed from Source/WebKit2/UIProcess/efl/WebView.h.
        (WebCore):
        (WebKit):
        (WebView):
        (WebKit::WebView::size):
        (WebKit::WebView::isFocused):
        (WebKit::WebView::isVisible):
        (WebKit::WebView::setContentScaleFactor):
        (WebKit::WebView::contentScaleFactor):
        (WebKit::WebView::setContentPosition):
        (WebKit::WebView::contentPosition):
        (WebKit::WebView::pageRef):
        (WebKit::WebView::page):
        * UIProcess/CoordinatedGraphics/WebViewClient.cpp: Renamed from Source/WebKit2/UIProcess/efl/WebViewClient.cpp.
        (WebKit):
        (WebKit::WebViewClient::viewNeedsDisplay):
        (WebKit::WebViewClient::didChangeContentsSize):
        (WebKit::WebViewClient::webProcessCrashed):
        (WebKit::WebViewClient::webProcessDidRelaunch):
        (WebKit::WebViewClient::didChangeContentsPosition):
        (WebKit::WebViewClient::didRenderFrame):
        (WebKit::WebViewClient::didCompletePageTransition):
        (WebKit::WebViewClient::didChangeViewportAttributes):
        (WebKit::WebViewClient::didChangeTooltip):
        * UIProcess/CoordinatedGraphics/WebViewClient.h: Renamed from Source/WebKit2/UIProcess/efl/WebViewClient.h.
        (WebCore):
        (WebKit):
        * UIProcess/efl/WebViewEfl.cpp: Added.
        (WebKit):
        (WebKit::WebView::create):
        (WebKit::WebViewEfl::WebViewEfl):
        (WebKit::WebViewEfl::setEwkView):
        (WebKit::WebViewEfl::paintToCairoSurface):
        (WebKit::WebViewEfl::createPopupMenuProxy):
        (WebKit::WebViewEfl::createContextMenuProxy):
        (WebKit::WebViewEfl::setCursor):
        (WebKit::WebViewEfl::updateTextInputState):
        (WebKit::WebViewEfl::handleDownloadRequest):
        * UIProcess/efl/WebViewEfl.h: Added.
        (WebKit):
        (WebViewEfl):
        (WebKit::WebViewEfl::ewkView):

2013-04-23  Antoine Quint  <graouts@apple.com>

        Initial advance of text runs should be taken into account
        https://bugs.webkit.org/show_bug.cgi?id=114949

        Reviewed by Darin Adler.

        Adding support for new method CTRunGetInitialAdvance in WebKitSystemInterface.

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

2013-04-23  Noam Rosenthal  <noam@webkit.org>

        [Coordinated Graphics] Remove the lockAnimations code path
        https://bugs.webkit.org/show_bug.cgi?id=114899

        Remove locking/unlocking animations and checks for the lock state.
        The animation locking has been tested to create not-so-smooth animations,
        while the use case where the composited animations run out of sync from
        the non-composited animations is very rare and unnoticeable.

        Reviewed by Benjamin Poulain.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::performScheduledLayerFlush):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:

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

        Need WebKit SPI to detect whether a page contains form controls
        <rdar://problem/13686661>
        https://bugs.webkit.org/show_bug.cgi?id=115003

        Reviewed by Beth Dakin.

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

2013-04-22  Alexey Proskuryakov  <ap@apple.com>

        [Mac] REGRESSION (r142806): "Just Leaking" Console errors on launch
        https://bugs.webkit.org/show_bug.cgi?id=115002
        <rdar://problem/13254212>

        Reviewed by Sam Weinig.

        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.mm:
        (WebKit::BootstrapMain): Added an autorelease pool for code that uses Objective-C.

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

        Web process should decide when to continue main resource loads
        https://bugs.webkit.org/show_bug.cgi?id=114995

        Reviewed by Sam Weinig.

        Main resource loads can be converted to downloads, so we need the ability to let the web process decide when
        to continue loading after a response has been received.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        For non-main resources, just call continueDidReceiveResponse directly; there's no need to ping-pong to the web process in that case.

        (WebKit::NetworkResourceLoader::continueDidReceiveResponse):
        Just call ResourceHandle::continueDidReceiveResponse.

        * NetworkProcess/NetworkResourceLoader.messages.in:
        Add ContinueDidReceiveResponse message.
        
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        Initialize m_isLoadingMainResource.

        * NetworkProcess/SchedulableLoader.h:
        (WebKit::SchedulableLoader::isLoadingMainResource):
        Add getter.

        (SchedulableLoader):
        Move m_shouldClearReferrerOnHTTPSToHTTPRedirect next to the rest of the booleans.

        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (NetworkResourceLoadParameters):
        Add isMainResource flag.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleSubresourceLoad):
        Pass the cached resource to scheduleLoad.

        (WebKit::WebResourceLoadScheduler::schedulePluginStreamLoad):
        Pass null to scheduleLoad.

        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        Initialize isMainResource.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        If this is a main resource load, send back a ContinueDidReceiveResponse message.

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

        Plugin Snapshotting: Don't consume insane amounts of time detecting the primary plugin
        https://bugs.webkit.org/show_bug.cgi?id=114994
        <rdar://problem/13696269>

        Reviewed by Anders Carlsson.

        On some pages, we currently waste a lot of time on every subframe load
        and every addPluginView doing primary plugin detection. This patch
        attempts to address this via a few minor changes:

        - Only allow detection after the main frame's didFinishLoad comes, instead of the first subframe.

        - Only explicitly detect on the main frame's didFinishLoad (not subframes).

        - Coalesce calls to determinePrimarySnapshottedPlugIn from both addPluginView
        (in case JS is adding lots of plugins in a loop) and didFinishLoad.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addPluginView): Coalesce calls to determinePrimarySnapshottedPlugIn.
        (WebKit::WebPage::didFinishLoad):
        Coalesce calls to determinePrimarySnapshottedPlugIn.
        Bail on subframe loads, we're only interested in the main frame being complete.
        (WebKit::WebPage::determinePrimarySnapshottedPlugInTimerFired):
        Call determinePrimarySnapshottedPlugIn.
        * WebProcess/WebPage/WebPage.h:
        Add m_determinePrimarySnapshottedPlugInTimer and determinePrimarySnapshottedPlugInTimerFired

2013-04-22  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13334446> [Mac] Tweak sandbox profiles.

        Reviewed by Anders Carlsson.

        Unbreak Lion, which doesn't provide detailed control over IPC.

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

2013-04-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Enable introspection always for developer builds
        https://bugs.webkit.org/show_bug.cgi?id=114983

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Make warnings during gir scanning cause the build to fail. Eliminate
        warnings about deprecated API that the g-ir-scanner uses when generating
        the scanner program. Use --quiet.

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

        Make it easier to extend NetworkResourceLoadParameters
        https://bugs.webkit.org/show_bug.cgi?id=114992

        Reviewed by Sam Weinig.

        Turn NetworkResourceLoadParameters into a struct which matches all our other parameter classes in WebKit2. Fill in the struct manually
        instead of having a constructor with 9 parameters.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
        (WebKit::NetworkConnectionToWebProcess::performSynchronousLoad):
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        (NetworkResourceLoadParameters):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):

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

        PDFPlugin: Support unlocking encrypted PDFs
        https://bugs.webkit.org/show_bug.cgi?id=114938
        <rdar://problem/12872888>

        Reviewed by Alexey Proskuryakov and Oliver Hunt.

        If we try to load an encrypted PDF, we need to provide a sane mechanism
        through which the user can provide the password. Add a slightly-below-center
        password field to match PDFKit's normal behavior.

        * WebKit2.xcodeproj/project.pbxproj: Add PDFPluginPasswordField.{h,mm}
        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h: Add attemptToUnlockWithPassword:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        Add createPasswordEntryForm, attemptToUnlockPDF, m_passwordField.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (annotationStyle): Make #annotationContainer a flexbox that centers its contents.
        This won't affect the normal absolutely-positioned form fields, but the inline
        password field will be centered vertically and horizontally.

        (WebKit::PDFPlugin::pdfDocumentDidLoad):
        If the document is locked when loaded, create a password field.

        (WebKit::PDFPlugin::createPasswordEntryForm):
        Create a PDFPluginPasswordField and attach it to the document.

        (WebKit::PDFPlugin::attemptToUnlockPDF):
        Try to unlock the PDF with the given password. If this succeeds, remove
        the password field and relayout the scroll view.

        (WebKit::PDFPlugin::calculateSizes):
        Make the document 0x0 if it is locked, preventing scrolling.

        (WebKit::PDFPlugin::handleMouseEvent):
        Don't pass mouse events to PDFLayerController while it is locked,
        as it has no useful events to provide, and will try to present a
        dialog asking for the password if we let a click through.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.h:
        (WebKit::PDFPluginAnnotation::eventListener): Added.
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::handleEvent):
        Move event-handling code here from PDFPluginAnnotationEventListener::handleEvent
        so that subclasses can override this instead of having to have their own
        event listeners (this is also why we now expose eventListener()).

        (WebKit::PDFPluginAnnotation::PDFPluginAnnotationEventListener::handleEvent):
        Forward the event to our owning PDFPluginAnnotation.

        * WebProcess/Plugins/PDF/PDFPluginPasswordField.h: Added.
        (WebKit::PDFPluginPasswordField::PDFPluginPasswordField):
        * WebProcess/Plugins/PDF/PDFPluginPasswordField.mm: Added.
        (WebKit::PDFPluginPasswordField::create):
        (WebKit::PDFPluginPasswordField::~PDFPluginPasswordField):
        Unregister for keyup.

        (WebKit::PDFPluginPasswordField::createAnnotationElement):
        Register for keyup, and set our element's class to "password".

        (WebKit::PDFPluginPasswordField::updateGeometry):
        Added. Override updateGeometry and do nothing, as the password field
        has a geometry defined by CSS instead of by the PDF content.

        (WebKit::PDFPluginPasswordField::handleEvent):
        If the enter/return key is pressed, attempt to unlock the PDF. Also,
        we do not call either of our superclass' implementations of handleEvent,
        because blurring the password field should not destroy it, and tabbing
        between fields has no relevance when there can only be one field.

        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.h:
        (WebKit::PDFPluginTextAnnotation::PDFPluginTextAnnotationEventListener):
        Removed. We now share our superclass' event listener.

        (WebKit::PDFPluginTextAnnotation::textAnnotation): Const.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::~PDFPluginTextAnnotation):
        PDFPluginTextAnnotation no longer has its own event listener,
        so there's nothing left to clear here. Just make sure to unregister
        our event from PDFPluginAnnotation's shared event listener!

        (WebKit::PDFPluginTextAnnotation::createAnnotationElement):
        Ensure that we can create a PDFPluginTextAnnotation with a null annotation.

        (WebKit::PDFPluginTextAnnotation::commit): Use value().
        (WebKit::PDFPluginTextAnnotation::value):
        Factor retrieving the value of the form control out of commit().

        (WebKit::PDFPluginTextAnnotation::handleEvent):
        Call up to PDFPluginAnnotation's handler so that defocus destroys the annotation.

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

        Slow/beachballing when using the find bar on a page with plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=114990
        <rdar://problem/12832313>

        Reviewed by Tim Horton.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::notifyWidget):
        Call shouldCreateTransientPaintingSnapshot().

        (WebKit::PluginView::shouldCreateTransientPaintingSnapshot):
        Don't create a painting snapshot if we're asked to paint the find indicator.

        * WebProcess/Plugins/PluginView.h:
        Add new member function.

2013-04-22  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13334446> [Mac] Tweak sandbox profiles.

        Reviewed by Sam Weinig.

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

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

        Don't kill our XPC services in response to memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=114985
        <rdar://problem/13229217>

        Reviewed by Mark Rowe.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
        Call xpc_transaction_begin() so we'll never be killed by the kernel when there's memory pressure;
        we prefer to manage our own lifetime thank you very much!

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize):
        Remove call to disable sudden termination.

2013-04-22  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13681842> [Mac] Tweak WebProcess sandbox profile to use
        system-graphics function when available.

        Reviewed by Sam Weinig.

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

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

        [GTK] Set up libPlatform.la
        https://bugs.webkit.org/show_bug.cgi?id=114168

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add the new libPlatform.la library to the libwebkitgtk library. Link the WebKitPluginProcess
        executable against libPlatform.la as well.

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

        Hard code plug-in sandbox profile lookup directories and move
        the profiles to WebKit2.

        Reviewed by Anders Carlsson.

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (WebKit::PluginProcessMainDelegate::getExtraInitializationData):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (WebKit::PluginServiceInitializerDelegate::getExtraInitializationData):
        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        Stop passing the sandbox-profile-directory-path to the plug-in process.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::loadSandboxProfileForDirectory):
        (WebKit::loadSandboxProfile):
        (WebKit::PluginProcess::initializeSandbox):
        Hard code the plug-in sandbox profile lookup to only look in the WebKit2 bundle
        and /System/Library/Sandbox/Profiles/.

        * Resources/PlugInSandboxProfiles: Added.
        Add profiles.

        * WebKit2.xcodeproj/project.pbxproj:
        Copy the profiles to the bundle.

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

        Refactor creation of the full screen window into an (overridable) method.
        https://bugs.webkit.org/show_bug.cgi?id=110369

        Reviewed by Eric Carlson.

        Add a new WKView method -(NSWindow)createFullScreenWindow which can be overridden
        by subclasses to provide custom full screen windows to the WKFullScreenWindowController.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView fullScreenWindowController]):
        (-[WKView createFullScreenWindow]):
        * UIProcess/API/mac/WKViewPrivate.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:]):

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

        [GTK] Add webkit_web_context_set_disk_cache_directory to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=111848

        Reviewed by Anders Carlsson.

        This allow applications to set a custom directory for the disk
        cache.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_set_disk_cache_directory):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/TestMain.cpp:
        (removeNonEmptyDirectory):
        (main): Use a different temporary disk cache directory for every
        test.

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

        [SOUP] Soup disk cache should respect the diskCacheDirectory from the process initial parameters
        https://bugs.webkit.org/show_bug.cgi?id=111845

        Reviewed by Anders Carlsson.

        Move the cache initialization to platformInitializeWebProcess() to
        create the cache using the directory received from the UI
        process. This allows to add public API to set a different disk
        cache directory from the UI process.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory): Return
        default disk cache directory.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory): Ditto.
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl): Remove soup cache initialization.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): Ditto.
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess): Initialize
        soup cache.

2013-04-22  Krzysztof Wolanski  <k.wolanski@samsung.com>:

        [WK2] Fix build warning when GESTURE_EVENTS is ON.
        https://bugs.webkit.org/show_bug.cgi?id=114812

        Reviewed by Andreas Kling.

        Handle GestureSingleTap in the event type switch.

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

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

        [WebKit2] Plugins without a MIME Type fail to load
        https://bugs.webkit.org/show_bug.cgi?id=112834

        Reviewed by Benjamin Poulain.

        The problem is that when the plugin is created and the MIME Type
        is empty, since the MIME Type guessed in the UI process using the
        plugin extension is not passed to the WebProcess, when the plugin
        is instantiated, the value of NPMIMEType parameter passed to
        NPP_New is NULL, and NPERR_INVALID_INSTANCE_ERROR is returned.
        GetPluginPath message has been renamed to FindPlugin, since it
        doesn't only return the path but also the new MIME Type and load
        policy.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::findPlugin): Receive an output newMIMEType
        parameter that is passed to PluginModuleInfo::findPlugin() so that
        in case of guessing the MIME Type, the new one is passed back to
        the WebProcess.
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin): Pass the MIME Type
        from the parameters to WebPage::createPlugin.
        (WebKit::WebFrameLoaderClient::recreatePlugin): Pass a newMIMEType
        parameter to WebPage::createPlugin.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Add newMIMEType out parameter and
        pass it to the FindPlugin message.
        (WebKit::WebPage::canPluginHandleResponse): Pass newMIMEType to
        FindPlugin message.
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

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

        Widget should not depend on AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=114514

        Reviewed by Chris Fleizach.

        Update to API changes.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::createScrollbar):
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (WebKit::SimplePDFPlugin::createScrollbar):
        (WebKit::SimplePDFPlugin::destroyScrollbar):

2013-04-20  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Fix unit test webkit2/WebKitFindController/hide
        https://bugs.webkit.org/show_bug.cgi?id=89810

        Reviewed by Carlos Garcia Campos.

        The test had some hacks in order to compare a page with highlighted
        results after using the find command with the original page. Now it uses
        the snapshots API that allows to make the test simpler and more
        reliable.

        * UIProcess/API/gtk/tests/TestMain.h:
        (Test::cairoSurfacesEqual): Moved helper function to compare two cairo
        surfaces from TestWebKitWebView.
        (Test):
        * UIProcess/API/gtk/tests/TestWebKitFindController.cpp:
        (testFindControllerHide): Modify test to use snapshots.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewSnapshot): Move basic snapshop methods to WebViewTest to
        share them with TestWebKitFindController test.
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::WebViewTest): Initialize cairo surface.
        (WebViewTest::~WebViewTest): Destroy cairo surface.
        (onSnapshotReady): Callback to set the cairo surface when the snapshot
        is ready.
        (WebViewTest::getSnapshotAndWaitUntilReady): Method that takes a
        snapshot and returns the cairo surface when it is ready.
        * UIProcess/API/gtk/tests/WebViewTest.h: Add new method headers and
        attribute for the cairo surface.

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

        Unreviewed, revert r148782. It was not reviewed by a WebKit2 owner.

        * PluginProcess/mac/PluginProcessShim.mm:
        * Shared/mac/CookieStorageShim.cpp: Removed.
        * Shared/mac/CookieStorageShim.h: Removed.
        * Shared/mac/CookieStorageShimLibrary.cpp: Removed.
        * Shared/mac/CookieStorageShimLibrary.h: Removed.
        * Shared/mac/DYLDInterpose.h: Removed.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/mac/SecItemShimLibrary.mm:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:


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

        WWDC session videos don’t play at developer.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=114858

        Reviewed by Eric Carlson.

        AVFoundation uses CFNetwork to store and retrieve cookies from the global store.
        However, in the case where network access happens in the NetworkProcess, session
        cookies are stored in-memory, and are not accessable in the WebProcess. Until such
        a time as AVFoundation can provide an API which would allow us to provide cookies
        for a specific request, we will interpose the CFNetwork method which they use to
        retrieve the cookie string from the cookie store for their pending request.

        Duplicate the previous SecItemShim target to a new, WebProcessShim target. This
        target includes the SecItemShim functionality, but will add a new shim for cookie
        retrieval:
        * Shared/mac/CookieStorageShimLibrary.h: Added
        (CookieStorageShimCallbacks):
        * Shared/mac/CookieStorageShimLibrary.cpp: Added.
        (WebKit::ShimProtector::ShimProtector): A simple stack-based counter class.
        (WebKit::ShimProtector::~ShimProtector):
        (WebKit::ShimProtector::count):
        (WebKit::shimCFHTTPCookieStorageCopyRequestHeaderFieldsForURL): Interpose
            the CFNetwork call, and pass to the registered callback.
        (WebKit::WebKitCookieStorageShimInitialize): Register the callbacks.

        Add a helper singleton class which will talk to the shim through the 
        registered callbacks:
        * Shared/mac/CookieStorageShim.h: Added
        (WebKit::CookieStorageShim::CookieStorageShim):
        * Shared/mac/CookieStorageShim.cpp: Added.
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL): Pass the request
            over to the NetworkProcess.
        (WebKit::CookieStorageShim::shared): Simple singleton.
        (WebKit::CookieStorageShim::initialize): Call the library initializer.

        Initialize the shim only when the WebProcess is delegating network loading
        to the NetworkProcess:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

        Rename the WebProcess's shim from SecItemShim -> WebProcessShim:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

        As the DYLD_INTERPOSE macro is used in multiple files now, put it in its
        own header:
        * Shared/mac/DYLDInterpose.h: Added.
        * PluginProcess/mac/PluginProcessShim.mm:
        * WebProcess/mac/SecItemShimLibrary.mm:

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

2013-04-19  Brady Eidson  <beidson@apple.com>

        Add JoinExistingSession to the WebContext XPC.
        <rdar://problem/13541540> and https://bugs.webkit.org/show_bug.cgi?id=114882

        Reviewed by Sam Weinig.

        This fixes <keygen> and maybe other things.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:

2013-04-19  Martin Robinson  <mrobinson@igalia.com>

        [GTK] JSCore.gir.in has a few problems
        https://bugs.webkit.org/show_bug.cgi?id=114710

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Updated to reflect new location of JavaScriptCore gir file. Share the
        same autotools data task as the WebKit1 and JavaScriptCore gir installations.

2013-04-19  Noam Rosenthal  <noam@webkit.org>

        [Texmap] Implementation for pattern compositing
        https://bugs.webkit.org/show_bug.cgi?id=109588

        Reviewed by Allan Sandfeld Jensen.

        Serialize the two new properties from CoordinatedGraphicsLayer to CoordinatedGraphicsScene.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
            Encode/decode the new tiling properties.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
            Enable pattern compositing for coordinated graphics.
            This is needed since we don't want to enable pattern compositing for
            WebKit1 yet.

2013-04-18  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Update PDFLayerController's scale factors earlier
        https://bugs.webkit.org/show_bug.cgi?id=114843

        Reviewed by Simon Fraser.

        Inform PDFLayerController of the initial page/device scale factors so that
        it renders at the correct scale the first time, instead of first rendering
        at 1x and then flashing to 2x (on 2x devices).

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

2013-04-18  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Hook up the search-in-Spotlight menu item
        https://bugs.webkit.org/show_bug.cgi?id=114837
        <rdar://problem/13583591>

        Reviewed by Mark Rowe.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        Add performSpotlightSearch: delegate callback.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (WebKit::PDFPlugin::performSpotlightSearch):
        Add performSpotlightSearch() PDFPlugin method.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate performSpotlightSearch:]): Hand the search string to PDFPlugin.
        (WebKit::PDFPlugin::performSpotlightSearch): Hand the search string to WebPageProxy.

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

        Dispatch local storage events
        https://bugs.webkit.org/show_bug.cgi?id=114838

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::dispatchEvents):
        Pass 0 as the storage area ID if the event originally comes from another process.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        Gather all the frames for which we want to dispatch events.

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

        Use the page group id from the UI process as the local storage namespace ID
        https://bugs.webkit.org/show_bug.cgi?id=114836

        Reviewed by Beth Dakin.

        The WebCore PageGroup identifier is different across processes, so use the one given to us by the UI process.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebKit::WebPageGroupProxy::corePageGroup):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::webPageGroup):
        * WebProcess/WebProcess.h:

2013-04-18  Tim Horton  <timothy_horton@apple.com>

        Add a synchronous version of WKView endDeferringViewInWindowChanges
        https://bugs.webkit.org/show_bug.cgi?id=114780
        <rdar://problem/12821901>

        Reviewed by Simon Fraser.

        Add new WKView SPI, endDeferringViewInWindowChangesSync, which synchronously
        (though with a 250 ms timeout) does the work required to reparent a WKView
        without flashing white.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView beginDeferringViewInWindowChanges]):
        (-[WKView endDeferringViewInWindowChanges]):
        Make begin/endDeferringViewInWindowChanges not allow nested deferrals,
        as we don't need them, and they complicate synchronous-end a lot.

        (-[WKView endDeferringViewInWindowChangesSync]):
        Add a sync version of endDeferringViewInWindowChanges which waits
        for DidUpdateInWindowState.

        (-[WKView isDeferringViewInWindowChanges]):

        * UIProcess/API/mac/WKViewPrivate.h: Add endDeferringViewInWindowChangesSync.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::waitForDidUpdateInWindowState):
        Add waitForDidUpdateInWindowState(), which blocks for
        250ms or until the WebProcess reparents all of its layers and spins
        the runloop once, to prevent flashing when parenting a WKView.
        If we've already timed out waiting for the WebProcess, don't block, as
        it's probably quite busy and is likely to time out again.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isInWindow): Added.
        (WebKit::WebPageProxy::waitForDidUpdateInWindowState): Added.
        (WebKit::WebPageProxy::didUpdateInWindowState): Added.

        * UIProcess/WebPageProxy.messages.in: Add DidUpdateInWindowState()

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didUpdateInWindowStateTimerFired): Send DidUpdateInWindowState to WebPageProxy.
        (WebKit::WebPage::setIsInWindow): When setIsInWindow completes, TileController
        tiles have been reparented, and the TiledCoreAnimationDrawingArea has
        reconnected the layer tree to the context, start a 0-delay runloop timer
        to allow painting and layer flushing to finish; when the timer fires,
        we'll send the UIProcess a DidUpdateInWindowState so it can stop blocking.

        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add didUpdateInWindowStateTimerFired and m_sendDidUpdateInWindowStateTimer.

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

        StorageManager should keep track of local storage namespaces
        https://bugs.webkit.org/show_bug.cgi?id=114831

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        Add the local storage namespace, and security origin as member variables.

        (StorageManager::LocalStorageNamespace):
        New class that represents a local storage namespace.

        (WebKit::StorageManager::StorageArea::~StorageArea):
        If this storage area belongs to a local storage namespace, notify it that we've been destroyed.

        (WebKit::StorageManager::StorageArea::clone):
        Assert that we don't have a local storage namespace.

        (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
        If we already have a storage area for the given security origin, return it. Otherwise, create a new storage area.
        Note that LocalStorageNamespace does not hold strong references to its StorageArea objects; they are being kept alive
        by a mapping inside the StorageManager.

        (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea):
        Remove the storage area from the map. If there are no more areas, remove the namespace from the manager.

        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        StorageArea::create now takes the security origin.

        (WebKit::StorageManager::createLocalStorageMap):
        Get (or create) the right local storage namespace and then create a storage area.

2013-04-17  Geoffrey Garen  <ggaren@apple.com>

        Renamed JSGlobalData to VM
        https://bugs.webkit.org/show_bug.cgi?id=114777

        Reviewed by Phil Pizlo.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit):
        * Shared/mac/WebMemorySampler.mac.mm:
        (WebKit::WebMemorySampler::sampleWebKit):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::javaScriptObjectsCount):
        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::JSNPMethod::finishCreation):
        * WebProcess/Plugins/Netscape/JSNPMethod.h:
        (WebKit::JSNPMethod::create):
        (JSNPMethod):
        (WebKit::JSNPMethod::createStructure):
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:
        (WebKit::JSNPObject::JSNPObject):
        (WebKit::JSNPObject::finishCreation):
        (WebKit::JSNPObject::callMethod):
        (WebKit::JSNPObject::callObject):
        (WebKit::JSNPObject::callConstructor):
        (WebKit::JSNPObject::put):
        (WebKit::JSNPObject::deleteProperty):
        (WebKit::JSNPObject::getOwnPropertyNames):
        (WebKit::JSNPObject::propertyGetter):
        * WebProcess/Plugins/Netscape/JSNPObject.h:
        (WebKit::JSNPObject::create):
        (WebKit::JSNPObject::createStructure):
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        (WebKit::NPJSObject::create):
        (WebKit::NPJSObject::initialize):
        * WebProcess/Plugins/Netscape/NPJSObject.h:
        (JSC):
        (NPJSObject):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        (WebKit::NPRuntimeObjectMap::getOrCreateNPObject):
        (WebKit::NPRuntimeObjectMap::convertJSValueToNPVariant):
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:
        (JSC):
        (NPRuntimeObjectMap):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowScriptNPObject):
        (WebKit::PluginView::pluginElementNPObject):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runJavaScriptInMainFrame):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::getWebCoreStatistics):

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

        Differentiate between creating local storage maps and session storage maps
        https://bugs.webkit.org/show_bug.cgi?id=114823

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createLocalStorageMap):
        (WebKit::StorageManager::createSessionStorageMap):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/Storage/StorageManager.messages.in:
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):

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

        StorageAreaMaps should not assume that a zero storage namespace ID is used for local storage
        https://bugs.webkit.org/show_bug.cgi?id=114822

        Reviewed by Beth Dakin.

        Store the storage type directly in the storage area map.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        * WebProcess/Storage/StorageAreaMap.h:
        (WebKit::StorageAreaMap::storageType):

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

        Begin fleshing out UI side local storage
        https://bugs.webkit.org/show_bug.cgi?id=114820

        Reviewed by Beth Dakin.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
        (WebKit::StorageNamespaceImpl::createSessionStorageNamespace):
        (WebKit::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebKit::StorageNamespaceImpl::~StorageNamespaceImpl):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::localStorageNamespace):

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

        Fix spelling I thought I had fixed.

        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup initWithIdentifier:]):

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

        WebKit should not write WKPreferences to app user defaults when using the ObjC API
        <rdar://problem/13593578>
        https://bugs.webkit.org/show_bug.cgi?id=114821

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup initWithIdentifier:]):
        Use a identifier-less preferences for the ObjC-API. I think we will probably want this
        to be the default for the C-API at some point as well, but Safari currently uses this
        behavior.

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

        Change storage factory functions to take a PageGroup and Page respectively
        https://bugs.webkit.org/show_bug.cgi?id=114776

        Reviewed by Beth Dakin.

        Update for WebCore changes.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::localStorageNamespace):
        (WebKit::WebPlatformStrategies::sessionStorageNamespace):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2013-04-18  Timothy Hatcher  <timothy@apple.com>

        Remove an ASSERT that is causing flakeyness in Debug builds.

        https://webkit.org/b/113020

        Reviewed by Jessie Berlin.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::open): Removed ASSERT(m_createdInspectorPage).

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

        [GTK] Add WebKitWebPage::send-request signal to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=83681

        Reviewed by Anders Carlsson.

        Add WebKitWebPage::send-request signal emitted in willSendRequest
        callback to allow web process extensions to modify requests before
        they are sent or cancel the resource load.
        This patch makes WebKitURIRequest and WebKitURIResponse objects
        shareable between UI process and web extensions APIs. Since both
        APIs force single header includes, the WebKitDefines.h header has
        been split moving the forward declarations specific to the UI
        process API to a new file WebKitForwardDeclarations.h. This way we
        can also  share the WebKitDefines.h header and remove the
        WebKitWebExtensionDefines.h header used in the web extensions API.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKitContextMenu.h: Include WebKitForward.h.
        * UIProcess/API/gtk/WebKitContextMenuItem.h: Ditto.
        * UIProcess/API/gtk/WebKitDefines.h: Remove forward declarations.
        * UIProcess/API/gtk/WebKitDownload.h: Include WebKitForward.h.
        * UIProcess/API/gtk/WebKitFindController.h: Ditto.
        * UIProcess/API/gtk/WebKitForwardDeclarations.h: Added. Contains
        the forward declarations moved from WebKitDefines.h.
        * UIProcess/API/gtk/WebKitPrintOperation.h: Include WebKitForward.h.
        * UIProcess/API/gtk/WebKitURIRequest.cpp:
        (webkitURIRequestSetProperty): Use webkit_uri_request_set_uri() to
        set the new URI.
        (webkit_uri_request_class_init): Make URI property construct
        instead of construct-only, since it can be updated once
        constructed. It should never be NULL, so set default value to
        about:blank instad of NULL.
        (webkit_uri_request_set_uri): New public method to set the URI of
        the WebKitURIRequest.
        * UIProcess/API/gtk/WebKitURIRequest.h: Allow to include this file
        from webkit-web-extension.h.
        * UIProcess/API/gtk/WebKitURIResponse.h: Ditto.
        * UIProcess/API/gtk/WebKitURISchemeRequest.h: Include
        WebKitForward.h.
        * UIProcess/API/gtk/WebKitWebView.h: Ditto.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add
        webkit_uri_request_set_uri.
        * UIProcess/API/gtk/tests/TestResources.cpp:
        (testWebResourceSendRequest):
        (serverCallback):
        (beforeAll):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (sendRequestCallback):
        (pageCreatedCallback):
        * UIProcess/API/gtk/webkit2marshal.list:
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h: Include
        WebKitDefines.h instead of WebKitWebExtensionDefines.h.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (willSendRequestForFrame): Emit WebKitWebPage::send-request and
        return early if the load is cancelled.
        (webkit_web_page_class_init): Add WebKitWebPage::send-request
        signal.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h: Include
        WebKitDefines.h instead of WebKitWebExtensionDefines.h.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2013-04-18  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [WK2] CoordinatedGraphicsLayerState is a struct, not a class
        https://bugs.webkit.org/show_bug.cgi?id=108855

        Reviewed by Andreas Kling.

        Fixes the forward declaration which takes CoordinatedGraphicsLayerState
        as a class.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (WebCore):

2013-04-18  Krzysztof Wolanski  <k.wolanski@samsung.com>:

        [EFL][WK2] Change inadequate return value in method setDone().
        https://bugs.webkit.org/show_bug.cgi?id=114806

        Reviewed by Andreas Kling.

        Fix possible warning in EFL port: no return statement in function returning non-void.
        Change return value from bool to void in method setDone().

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

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

        [WK2][EFL] Text Checker's settings refactor
        https://bugs.webkit.org/show_bug.cgi?id=111713

        Reviewed by Andreas Kling.

        Use WK2's TextCheckerState object as the store for the text checker settings.
        It's shared between the client (Ewk API part) and WebProcess (read only).
        Thanks to it, we don't have to keep any additional structure with
        the settings on ewk side.

        In the consistency with WKTextChecker C API, move the Ewk's text checker settings APIs
        to the ewk_text_checker.h/cpp. They're not connected to Ewk_View/Ewk_Settings object to
        keep them in ewk_setting.h/cpp.

        Introduce a new class to implement WKTextCheckerClient callbacks to call spelling
        methods through WK2 C API.
        The main purpose of this change is to detach text checker initialization from ewk_context.

        * PlatformEfl.cmake:
        Add a new files to the build.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        Detach the text checker initialization from context.
        There might be more than default context.
        There is one text checker object per application.

        * UIProcess/API/efl/ewk_settings.cpp:
        * UIProcess/API/efl/ewk_settings.h:
        Remove the text checker settings.

        * UIProcess/API/efl/ewk_text_checker.cpp:
        Add the text checker settings to the ewk_text_checker.h/cpp

        (convertLanguagesToEinaList):
        Add helper function to convert Vector's values to Eina_List.

        (clientCallbacks):
        Add the client callback responsible for the continuous spell checking
        setting change to the struct.

        (ewk_text_checker_continuous_spell_checking_enabled_set):
        Do not call the client's callback responsible for the setting
        change unless WebKit changes the setting (trough the context
        'Check Spelling While Typing' option).

        * UIProcess/API/efl/ewk_text_checker.h:
        Adjust APIs name to the ewk_text_checker syntax.
        Update the documentation according to the changes.

        * UIProcess/API/efl/ewk_text_checker_private.h:
        (ClientCallbacks):
        Move ClientCallbacks structure to TextCheckerClientEfl.
        The client callbacks (Ewk API) have to be accessible in WKTextCheckerClient callbacks
        to choose what implementation will be used - the client's (if definied) or Enchant impl.

        * UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:
        Update the unit tests according to the APIs change.
        Update the test responsible for the notification about the setting change
        according to changes in 'ewk_text_checker_continuous_spell_checking_enabled_set'.

        * UIProcess/efl/TextCheckerClientEfl.cpp: Added.
        Implement WKTextCheckerClient callbacks.

        (TextCheckerClientEfl::TextCheckerClientEfl):
        (TextCheckerClientEfl::instance):
        Allow to get and create TextCheckerClientEfl object.

        (TextCheckerClientEfl::isContinuousSpellCheckingEnabled):
        Get the setting value based on WK2 C API.

        (TextCheckerClientEfl::ensureSpellCheckingLanguage):
        Load the default languages if user didn't specify any.

        (TextCheckerClientEfl::updateSpellCheckingLanguages):
        (TextCheckerClientEfl::languagesUpdateTimerFired):
        (TextCheckerClientEfl::availableSpellCheckingLanguages):
        (TextCheckerClientEfl::loadedSpellCheckingLanguages):
        (TextCheckerClientEfl::availableSpellCheckingLanguages):
        (TextCheckerClientEfl::loadedSpellCheckingLanguages):
        Provide support for languages.

        (TextCheckerClientEfl::spellCheckingSettingChangeTimerFired):
        (TextCheckerClientEfl::callContinuousSpellCheckingChangeCallbackAsync):
        Notify the client about the setting change.

        (TextCheckerClientEfl::isContinuousSpellCheckingEnabledCallback):
        (TextCheckerClientEfl::setContinuousSpellCheckingEnabledCallback):
        (TextCheckerClientEfl::uniqueSpellDocumentTagCallback):
        (TextCheckerClientEfl::closeSpellDocumentWithTagCallback):
        (TextCheckerClientEfl::checkSpellingOfStringCallback):
        (TextCheckerClientEfl::guessesForWordCallback):
        (TextCheckerClientEfl::learnWordCallback):
        (TextCheckerClientEfl::ignoreWordCallback):
        WKTextCheckerClient callbacks implementation.

        * UIProcess/efl/TextCheckerClientEfl.h: Added.
        (TextCheckerClientEfl):
        (TextCheckerClientEfl::clientCallbacks):
        Return the client callbacks to be used in ewk_text_checker.cpp.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::state):
        Initialize the TextCheckerState's members to false.

        (WebKit::TextChecker::setContinuousSpellCheckingEnabled):
        Set the default language if user didn't specify any.
        Notify the client about the setting change.
        This method is called when context menu 'Check Spelling While Typing'
        option has been toggled.

        (WebKit::TextChecker::continuousSpellCheckingEnabledStateChanged):
        Set the default language if user didn't specify any.
        Called by WKTextChecker's API.

2013-04-18  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] Add WebKitWebPage::webkit_web_page_get_uri to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=111288

        Reviewed by Anders Carlsson.

        Add new property URI to WebKitWebPage providing a method
        webkit_web_page_get_uri to get it and the signal "notify::uri" to
        monitor changes in the URI.

        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Include new method in
        GTK+ doc.
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        (testWebPageURI):
        (beforeAll):
        (afterAll): Add test to check that WebKitWebPage URI matches with
        WebKitWebView value. The tests is listening for changes in WebKitWebPage
        URI via D-Bus and checks that value is the same than WebKitWebView URI.
        It also checks that the order of the URIs in a redirection is right.
        When the test finishes the signals are disconnected properly.
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (uriChangedCallback):
        (pageCreatedCallback): Add new D-Bus signal "URIChanged" connected to
        "notify::uri" signal of WebKitWebPage.
        * UIProcess/API/gtk/tests/WebKitTestBus.cpp:
        (WebKitTestBus::getOrCreateConnection): Rename method connection() to
        getOrCreateConnection().
        (WebKitTestBus::createProxy): Use the new method name.
        * UIProcess/API/gtk/tests/WebKitTestBus.h:
        (WebKitTestBus::connection): Add public getter for m_connection.
        (WebKitTestBus): Add private method header getOrCreateConnection().
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (_WebKitWebPagePrivate): Add new URI attribute.
        (webkitWebPageSetURI): Method to set the URI and emit the "notify:uri"
        signal if it has changed.
        (didStartProvisionalLoadForFrame): At this point it use the unreachable
        URL from provisional document loader if any. Otherwise, it uses the URL
        from provisional document loader.
        (didReceiveServerRedirectForProvisionalLoadForFrame): In the case of
        redirections it works like for didStartProvisionalLoadForFrame getting
        the unreachable URL if any.
        (didSameDocumentNavigationForFrame): In this case it gets the URL from
        the document loader.
        (webkitWebPageGetProperty): Add code related to URI property.
        (webkit_web_page_class_init): Add bits related to URI property.
        (webkitWebPageCreate): Implement callbacks to monitor URI changes.
        (webkit_web_page_get_uri): Return URI attribute.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h: Add new method
        header.

2013-04-18  Xan Lopez  <xan@igalia.com>

        [GTK] When the WebProcess crashes, a signal should be emitted
        https://bugs.webkit.org/show_bug.cgi?id=105180

        Emit a "web-process-crashed" signal when the WebProcess crashes. This
        is useful, for example, to show an error page in a web browser
        like Chrome does.

        Reviewed Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (processDidCrash):
        (attachLoaderClientToView):
        * UIProcess/API/gtk/WebKitWebContextPrivate.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkitWebViewWebProcessCrashed):
        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
        (testWebExtensionGetTitle):
        (webProcessCrashedCallback):
        (testWebKitWebViewProcessCrashed):
        (beforeAll):
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (methodCallCallback):

2013-04-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [EFL][WK2] Add tooltip API to the WKView client
        https://bugs.webkit.org/show_bug.cgi?id=111563

        Reviewed by Andreas Kling.

        Add tooltip to the barebone Tizen C API, and implement
        the method so that the EFL API keeps working.

        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didChangeTooltip):
        (WebKit):
        (WebKit::ViewClientEfl::ViewClientEfl):
        * UIProcess/efl/ViewClientEfl.h:
        (ViewClientEfl):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::toolTipChanged):
        * UIProcess/efl/WebViewClient.cpp:
        (WebKit::WebViewClient::didChangeTooltip):
        (WebKit):
        * UIProcess/efl/WebViewClient.h:

2013-04-17  Joone Hur  <joone.hur@intel.com>

        [EFL][AC] m_pendingSurfaceResize needs to be guarded by USE(ACCELERATED_COMPOSITING)
        https://bugs.webkit.org/show_bug.cgi?id=114770

        AC related code is guarded by USE(ACCELERATED_COMPOSITING) in order to build 
        WebKitEfl with no-tiled-backing-store(r147792), but m_pendingSurfaceResize is 
        not included. This patch allows m_pendingSurfaceResize to be guarded by 
        USE(ACCELERATED_COMPOSITING). 

        Reviewed by Simon Fraser.

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

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

        The storage manager should know the local storage directory
        https://bugs.webkit.org/show_bug.cgi?id=114765

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::create):
        (WebKit::StorageManager::setLocalStorageDirectory):
        (WebKit::StorageManager::setLocalStorageDirectoryInternal):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::setLocalStorageDirectory):
        * UIProcess/WebContext.h:

2013-04-17  Joone Hur  <joone.hur@intel.com>

        [EFL][AC] MiniBrowser starts with a black empty view before painting a web page
        https://bugs.webkit.org/show_bug.cgi?id=103745

        Reviewed by Kenneth Rohde Christiansen.

        Evas paints empty evas objects before rendering a web page, so it shows 
        a black empty view for a moment. This patch prevents from painting the empty 
        evas objects until a GL surface is ready for rendering.  

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

2013-04-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add webkit_web_page_get_id() to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=111938

        Reviewed by Anders Carlsson.

        Add API to the web extensions API to get the identifier of a web
        page.

        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbol.
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (methodCallCallback): Check the page ID matches the one returned
        by webkit_web_page_get_id().
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkit_web_page_get_id):
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.h:

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

        Clone storage namespaces for window.open
        https://bugs.webkit.org/show_bug.cgi?id=114703

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::clone):
        New helper function for cloning a storage area.

        (WebKit::StorageManager::StorageArea::setItem):
        Correctly handle the copy-on-write feature of StorageMap if it has multiple storage areas pointing to it.

        (WebKit::StorageManager::StorageArea::removeItem):
        Ditto.

        (WebKit::StorageManager::SessionStorageNamespace::cloneTo):
        Add cloned storage areas.

        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::copy):
        Create a new session storage namespace for the new page.

2013-04-16  Beth Dakin  <bdakin@apple.com>

        Need a new layout milestone to notify bundle clients when the header has been 
        flushed
        https://bugs.webkit.org/show_bug.cgi?id=114706
        -and corresponding-
        <rdar://problem/13657284>

        Reviewed by Simon Fraser.

        Make this new LayoutMilestone private at the API layer. 
        * Shared/API/c/WKPageLoadTypes.h:
        * Shared/API/c/WKPageLoadTypesPrivate.h: Added.

        Handle the new milestone.
        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toWKLayoutMilestones):
        (WebKit::toLayoutMilestones):

        New file to make the milestone private.
        * WebKit2.xcodeproj/project.pbxproj:

        Add or remove the DidFirstFlushForHeaderLayer millstone based on whether we just 
        added or removed a header.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setHeaderLayerWithHeight):

2013-04-16  Ryosuke Niwa  <rniwa@webkit.org>

        Another EFL build fix.

        * WebProcess/WebPage/efl/WebPageEfl.cpp:

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

        Remove more #includes from Frame.h
        https://bugs.webkit.org/show_bug.cgi?id=114642

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.cpp:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebPage/qt/WebPageQt.cpp:

2013-04-16  Timothy Hatcher  <timothy@apple.com>

        Make resizing the docked Web Inspector stay in sync with the inspected view.

        https://webkit.org/b/114682

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        Disable screen updates to make sure the layers for both views resize in sync.

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

        Remove unneeded headers from ScriptExecutionContext.h
        https://bugs.webkit.org/show_bug.cgi?id=114631

        Reviewed by Alexey Proskuryakov.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/WebPage/PageOverlay.cpp:

2013-04-16  Maciej Stachowiak  <mjs@apple.com>

        Remove even yet still more traces of v8
        https://bugs.webkit.org/show_bug.cgi?id=114693

        Reviewed by Anders Carlsson.

        * Scripts/generate-forwarding-headers.pl: Remove v8 from list of platforms.

2013-04-16  Alexey Proskuryakov  <ap@apple.com>

        Remove unused AlternativeTextClient::dismissDictationAlternativeUI
        https://bugs.webkit.org/show_bug.cgi?id=114598

        Reviewed by Ryosuke Niwa.

        * UIProcess/API/mac/PageClientImpl.h:
        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::dictationAlternatives):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:

2013-04-16  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WK2] Add API to retrieve a snapshot from a webview
        https://bugs.webkit.org/show_bug.cgi?id=98270

        Reviewed by Anders Carlsson.

        This adds the GTK+ API necessary to retrieve a snapshot from a
        webview asynchronously. The API uses the injected bundle
        internally to get the snapshot from the WebProcess.

        * UIProcess/API/gtk/WebKitError.cpp:
        (webkit_snapshot_error_quark): Add snapshot API related error
        quark.
        * UIProcess/API/gtk/WebKitError.h: Add snapshot error handling.
        * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp:
        (didReceiveWebViewMessageFromInjectedBundle): Handle the new
        "DidGetSnapshot" message.
        * UIProcess/API/gtk/WebKitPrivate.h: Add SnapshotRegion enum.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (_WebKitWebViewPrivate): Add a map for the snapshot results.
        (GetSnapshotAsyncData):
        (webKitWebViewDidReceiveSnapshot):
        (webKitSnapshotRegionToSnapshotRegion): Helper method for casting
        the region option enumeration.
        (generateSnapshotCallbackID): Method to generate unique callback
        ids.
        (webkit_web_view_get_snapshot):
        (webkit_web_view_get_snapshot_finish): New snapshotting API.
        * UIProcess/API/gtk/WebKitWebView.h: Ditto.
        * UIProcess/API/gtk/WebKitWebViewPrivate.h: Add the private method
        to handle a received snapshot.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add the new API
        bits.
        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (cairoSurfacesEqual): Add helper to compare cairo_surface_t
        structs.
        (testWebViewSnapshot): New test.
        (beforeAll): Add the new test.
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::selectAll): Add method to help test snapshots
        including selection.
        * UIProcess/API/gtk/tests/WebViewTest.h: Ditto
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp:
        (didReceiveMessageToPage): Ditto.
        (webkitWebExtensionCreate): Register method above.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkitWebPageDidReceiveMessage): Add this method. It
        handles the new message "GetSnapshot".
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPagePrivate.h:
        Add method above.

2013-04-16  Timothy Hatcher  <timothy@apple.com>

        Create full rects for the inspector and inspected views when
        adjusting to an inspected view frame change. 

        This ensures switching dock sides restores the inspected view
        and inspector to fill the parent's bounds.

        https://webkit.org/b/114666
        rdar://problem/13660796

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):

2013-04-16  Balazs Kelemen  <kbalazs@webkit.org>

        Initialize logging channels for web processes
        https://bugs.webkit.org/show_bug.cgi?id=114621

        Reviewed by Sam Weinig.

        Use InitializeWebKit2 for initializing the web and plugin processes.
        It handles initializing the logging channels and it's better to have
        shared core for this. For the plugin process now we always create
        a RunLoop object which is not necessary with the -scanPlugin argument
        but it shouldn't be a problem.

        * PluginProcess/qt/PluginProcessMainQt.cpp:
        (WebKit::PluginProcessMain):
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::PluginProcessMainUnix):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainEfl):
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk):
        * WebProcess/qt/WebProcessMainQt.cpp:
        (WebKit::WebProcessMainQt):

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

        [EFL][WK2] Add an API for getting context menu item's parent menu
        https://bugs.webkit.org/show_bug.cgi?id=107510

        Reviewed by Kenneth Rohde Christiansen.

        Added parent menu support and API for Ewk_Context_Menu_Item, to
        allow selecting context menus using Elementary widgets.
        Context menu unit test updated with new function. 

        * UIProcess/API/efl/ewk_context_menu.cpp:
        (EwkContextMenu::EwkContextMenu):
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (EwkContextMenuItem::EwkContextMenuItem):
        (ewk_context_menu_item_parent_menu_get):
        * UIProcess/API/efl/ewk_context_menu_item.h:
        * UIProcess/API/efl/ewk_context_menu_item_private.h:
        (EwkContextMenuItem::create):
        (EwkContextMenuItem::parentMenu):
        (EwkContextMenuItem::setParentMenu):
        (EwkContextMenuItem):
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        (showContextMenu):

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

        Fix release builds with !LOG_DISABLED.

        * Platform/mac/Logging.mac.mm:

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

        [GTK][EFL] Remove deprecated libsoup API usage
        https://bugs.webkit.org/show_bug.cgi?id=104894

        Reviewed by Philippe Normand.

        Remove LIBSOUP_USE_UNSTABLE_REQUEST_API and only include
        libsoup/soup.h.

        * WebProcess/Cookies/soup/WebKitSoupCookieJarSqlite.h:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/soup/WebKitSoupRequestGeneric.h:
        * WebProcess/soup/WebProcessSoup.cpp:
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::registerURIScheme): Remove requester and
        use method soup_session_add_feature_by_type().

2013-04-15  Dean Jackson  <dino@apple.com>

        Plugins that resize might need to be snapshotted.
        https://bugs.webkit.org/show_bug.cgi?id=102157
        <rdar://problem/12696259>

        Reviewed by Tim Horton.

        Allow a running plugin to be snapshotted. All this
        means is that we start the snapshot timer again.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::beginSnapshottingRunningPlugin): Restart
            the timer.
        * WebProcess/Plugins/PluginView.h: Virtual method declaration.

2013-04-15  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL][WK2] build fix after r148434
        https://bugs.webkit.org/show_bug.cgi?id=114647

        Reviewed by Benjamin Poulain.

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

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

        After switching to another space and back, video races to catch up with audio
        https://bugs.webkit.org/show_bug.cgi?id=114634

        Reviewed by Tim Horton.

        In Mountain Lion and previous, report that a view is "not visible" when its window
        is not in the active space. This causes us to notify AVFoundation that its CAImageQueues
        will not be serviced and results in not having the "catch up" behavior when returning
        to the browser's space.

        * UIProcess/API/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::isViewVisible):

2013-04-15  Seulgi Kim  <seulgikim@company100.net>

        Schedule rendering at regular interval (60fps)
        https://bugs.webkit.org/show_bug.cgi?id=114617

        Reviewed by Martin Robinson.

        Schedule rendering reguarly regardless of the time taken to render a
        frame. Otherwise, next flush delayed by the amount of the rendering
        time.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk):
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired):
        (WebKit::LayerTreeHostGtk::flushAndRenderLayers):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

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

        [EFL][WK2] Use C API in ewk_context_menu
        https://bugs.webkit.org/show_bug.cgi?id=109698

        Reviewed by Andreas Kling.

        EFL port unlike others does not handle context menus inside WebKit but exposes an API:
        ewk_context_menu and ewk_context_menu_item, and leaves context menu to application.
        Currently EFL port's context menu API uses internal C++ classes, while it should use WK2 C API,
        to avoid violating layering.
        This patch changes EFL context menu API to use only WK2 C API.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::showContextMenu):
        * UIProcess/API/efl/EwkView.h:
        (WebKit):
        (EwkView):
        * UIProcess/API/efl/ewk_context_menu.cpp:
        (EwkContextMenu::EwkContextMenu):
        (EwkContextMenu::contextMenuItemSelected):
        (ewk_context_menu_item_select):
        (getWKTagFromEwkAction):
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        (EwkContextMenuItem::EwkContextMenuItem):
        (getEwkActionFromWKTag):
        * UIProcess/API/efl/ewk_context_menu_item.h:
        * UIProcess/API/efl/ewk_context_menu_item_private.h:
        (EwkContextMenuItem::create):
        (EwkContextMenuItem):
        * UIProcess/API/efl/ewk_context_menu_private.h:
        (EwkContextMenu::create):
        (EwkContextMenu):
        * UIProcess/efl/ContextMenuClientEfl.cpp:
        (showContextMenu):
        (hideContextMenu):
        (ContextMenuClientEfl::ContextMenuClientEfl):
        * UIProcess/efl/ContextMenuClientEfl.h:
        (WebKit::ContextMenuClientEfl::view):
        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        (WebKit::WebContextMenuProxyEfl::hideContextMenu):
        * UIProcess/efl/WebContextMenuProxyEfl.h:
        (WebContextMenuProxyEfl):

2013-04-15  Balazs Kelemen  <kbalazs@webkit.org>

        [CoordGfx] Background color should not be part of GraphicsLayerState
        https://bugs.webkit.org/show_bug.cgi?id=113785

        Reviewed by Andreas Kling.

        Page background is independent from layer state, send it to the UI
        as soon as possible.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
        (CoreIPC::::decode):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setBackgroundColor):

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

        [WK2] Add new callbacks and a function for WebKit2 context menu API
        https://bugs.webkit.org/show_bug.cgi?id=111552

        Reviewed by Anders Carlsson.

        Add contextMenuHide and contextMenuShow callbacks to WKPageContextMenuClient
        and WKPageContextMenuSelected API so context menus can be handled outside
        WebKit. API version of this client was bumped so older client version still
         can be used

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSelectContextMenuItem):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp:
        (attachContextMenuClientToView):
        * UIProcess/WebPageContextMenuClient.cpp:
        (WebKit::WebPageContextMenuClient::getContextMenuFromProposedMenu):
        (WebKit::WebPageContextMenuClient::showContextMenu):
        (WebKit):
        (WebKit::WebPageContextMenuClient::hideContextMenu):
        * UIProcess/WebPageContextMenuClient.h:
        (WebPageContextMenuClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/efl/ContextMenuClientEfl.cpp:
        (ContextMenuClientEfl::ContextMenuClientEfl):

2013-04-14  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Regression(r148274): Broke rendering in the browser
        https://bugs.webkit.org/show_bug.cgi?id=114593

        Reviewed by Anders Carlsson.

        r148274 added a new "didChangeViewportAttributes" callback to
        WKView but did not hook it up in ViewClientEfl. This patch
        fixes this and makes rendering work again in the browser.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::ViewClientEfl):

2013-04-14  Andreas Kling  <akling@apple.com>

        Move CSSOM classes to using MutableStylePropertySet over StylePropertySet.
        <http://webkit.org/b/114581>

        Reviewed by Anders Carlsson.

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

2013-04-14  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed build fix for WebKit2 EFL after r148373 due to missing
        header includes.

        * UIProcess/InspectorServer/efl/WebInspectorServerEfl.cpp:
        * UIProcess/efl/InputMethodContextEfl.cpp:

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

        Add ObjC API for setting initialization data for the WKWebProcessPlugIn
        https://bugs.webkit.org/show_bug.cgi?id=103846

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKProcessGroup.h:
        Adds a new optional processGroupWillCreateConnectionToWebProcessPlugIn: method for the WKProcessGroupDelegate protocol,
        which allows the user to pass (via an autoreleased return value) initialization data to the web process plugin.

        * UIProcess/API/mac/WKProcessGroup.mm:
        (getInjectedBundleInitializationUserData):
        (setUpInectedBundleClient):
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        (-[WKProcessGroup dealloc]):
        Use the existing WKContextInjectedBundleClient infrastructure to pass the initialization data to the bundle
        via the new ObjCObjectGraph APIObject.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        Adds webProcessPlugIn:initializeWithObject: to the WKWebProcessPlugIn protocol, replacing webProcessPlugInInitialize:.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::load):
        Pass the initialization data to the web process plugin.

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

        Attempt Build Fix.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:

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

        Make Frame's ScriptController an OwnPtr and remove the #include
        https://bugs.webkit.org/show_bug.cgi?id=114105

        Reviewed by Dean Jackson.

        * Shared/WebHitTestResult.cpp:
        * Shared/WebHitTestResult.h:
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.h:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Storage/StorageAreaImpl.cpp:
        * WebProcess/Storage/StorageAreaMap.cpp:
        * WebProcess/WebPage/WebFrame.cpp:
        * WebProcess/WebPage/WebPage.cpp:

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

        Unreviewed GTK build fix after r148311.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (resizeWebKitWebViewBaseFromAllocation): Passing IntSize() as the scroll offset
        argument to the DrawingAreaProxy::setSize method.

2013-04-12  Gavin Barraclough  <barraclough@apple.com>

        Add private interface to WKView to asynchronously update the drawing area size
        https://bugs.webkit.org/show_bug.cgi?id=114549

        Reviewed by Simon Fraser.

        This will allow a client using the WKView to resize the contents without blocking waiting for the web process to repaint.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setDrawingAreaSize:]):
            - if the new size of teh drawing area does not match the frame size, position it according to the contentAnchor.
        (-[WKView updateLayer]):
            - Don't let a subsequent frame size change block on a prior async resize.
        (-[WKView forceAsyncDrawingAreaSizeUpdate:]):
            - resize the drawing area asynchronously, even if frame size udpates are disabled.
        (-[WKView waitForAsyncDrawingAreaSizeUpdate]):
            - wait for asynchronous updates to complete.

        * UIProcess/API/mac/WKViewPrivate.h:
            - declare new methods.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit):
        * UIProcess/DrawingAreaProxy.h:
        (DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::waitForPossibleGeometryUpdate):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        (TiledCoreAnimationDrawingAreaProxy):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate):
            - pass timeout for waitForPossibleGeometryUpdate as a parameter.

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

        32-bit build fix.

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

2013-04-12  Jeffrey Pfau  <jpfau@apple.com>

        Query directly for cache partition names
        https://bugs.webkit.org/show_bug.cgi?id=114538

        Reviewed by David Kilzer.

        Call back into WebKitSystemInterface to ask it for the cache
        partition names instead of trying to figure them out.

        * WebProcess/ResourceCache/WebResourceCacheManager.cpp:
        (WebKit::WebResourceCacheManager::getCacheOrigins):
        (WebKit):
        (WebKit::WebResourceCacheManager::returnCacheOrigins):
        * WebProcess/ResourceCache/WebResourceCacheManager.h:
        (WebResourceCacheManager):
        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::WebResourceCacheManager::cfURLCacheHostNames):
        (WebKit):
        (WebKit::WebResourceCacheManager::cfURLCacheHostNamesWithCallback):

2013-04-12  Gavin Barraclough  <barraclough@apple.com>

        Build fix - too soon!

        * UIProcess/API/mac/WKViewPrivate.h:

2013-04-12  Gavin Barraclough  <barraclough@apple.com>

        Build fix - too soon!

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

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

        [WK2] WebPageProxy loadURL() won't work when called just after terminateProcess()
        https://bugs.webkit.org/show_bug.cgi?id=110743

        Reviewed by Benjamin Poulain.

        A call to loadURL() just after terminating WebProcess will fail thanks to
        WebPageProxy being in an undefined state since it is in the middle of its own
        cleanup after process termination.

        To properly fix this, not only WebPageProxy cleanup should be made
        at WebProcess termination request, but also WebProcessProxy needs
        to only return to its caller after terminating the process and
        closing connections. Otherwise, WebPageProxy can even be able to
        detect that WebProcess is no longer running, but a call to respawn
        the process will fail.

        To fix these issues, this patch moves the cleanup code to a shared private function
        that is used for both the cases i.e. user termination and real crash. WebProcess
        shutdown is done using a new method that ensures that all cleanup was done before
        returning.

        A last change introduced in this patch is that for user requested termination,
        clients are no longer notified of a crash (since it is not a crash).

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::terminateProcess):
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::userRequestedTerminate):
        (WebKit):
        * UIProcess/WebProcessProxy.h:
        (WebProcessProxy):

2013-04-12  Gavin Barraclough  <barraclough@apple.com>

        Add contentAnchor to WKView
        http://bugs.webkit.org/show_bug.cgi?id=114469
        
        Currently if you call setFrameSize: while frame size updates are disabled, or if the geometry
        update times out, then the previously rendered page content will be rendered anchored to the
        top left corner of the frame.

        This is appropriate if the frame is being resized from the bottom right corner. In order to
        achieve a more desirable appearance if the frame is being resized from another corner we
        should allow the corner at which the content anchors to be specified.

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setFrameSize:]):
            - If the content anchor has been set, then updating the frame size moves the origin within the layer.
        (-[WKView _setDrawingAreaSize:]):
            - Instruct the drawing area to paint at the correct position within the layer.
        (-[WKView _setAcceleratedCompositingModeRootLayer:]):
            - If the root layer is cleared this implicitly resets any origin position we had set within it.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
            - initialize new data members.
        (-[WKView setContentAnchor:]):
        (-[WKView contentAnchor]):
            - Accessor implementation for @property contentAnchor.

        * UIProcess/API/mac/WKViewPrivate.h:
        (NS_ENUM):
            - Added WKContentAnchor enum type, and @property contentAnchor.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::setSize):
            - Don't suppress geometry updates where the layer poistion has changed.

        * UIProcess/DrawingAreaProxy.h:
        (DrawingAreaProxy):
            - Added m_layerPosition, layerPosition argument to setSize

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        (TiledCoreAnimationDrawingAreaProxy):
            - Added m_lastSentLayerPosition

        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
            - Don't suppress geometry updates where the layer poistion has changed.

        (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
            - Pass layer position in UpdateGeometry message.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::updateGeometry):
            - Added layerPosition argument to updateGeometry

        * WebProcess/WebPage/DrawingArea.messages.in:
            - Added layerPosition argument to updateGeometry

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
            - Added layerPosition argument to updateGeometry

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
            - Added layerPosition argument to updateGeometry

2013-04-12  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148296 and r148297.
        http://trac.webkit.org/changeset/148296
        http://trac.webkit.org/changeset/148297
        https://bugs.webkit.org/show_bug.cgi?id=114536

        Needs more thought (Requested by ap on #webkit).

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

2013-04-12  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r138858): GIFs don't start playing when they come out of background tabs
        https://bugs.webkit.org/show_bug.cgi?id=108864
        <rdar://problem/13140489>

        Reviewed by Antti Koivisto.

        Don't repaint the world when animations resume; instead, FrameView
        will cause all animated images to repaint. This line also had no effect for
        TiledCoreAnimationDrawingArea, which does not implement setNeedsDisplay.

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

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

        <rdar://problem/13334446> [Mac] Tweak sandbox profile.

        Apply a post-landing review comment.

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

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

        <rdar://problem/13334446> [Mac] Tweak sandbox profile.

        Reviewed by Jessie Berlin.

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

2013-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Split GtkAuthenticationDialog in two widgets
        https://bugs.webkit.org/show_bug.cgi?id=103644

        Reviewed by Xan Lopez.

        * GNUmakefile.list.am: Add new files to compilation.
        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.cpp: Removed.
        * UIProcess/API/gtk/WebKit2GtkAuthenticationDialog.h: Removed.
        * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp: Added.
        (webkitAuthenticationDialogAuthenticate): Use the
        AuthenticationChallengeProxy to authenticate and destroy the dialog.
        (okButtonClicked): Call webkitAuthenticationDialogAuthenticate()
        with the credential.
        (cancelButtonClicked): Call
        webkitAuthenticationDialogAuthenticate() with a NULL credential to
        continue without credential.
        (webkitAuthenticationDialogInitialize): Build the UI.
        (webkitAuthenticationDialogDraw): Draw a background.
        (webkitAuthenticationDialogMap): Grab default button.
        (webkitAuthenticationDialogConstructed): Create a GtkStyleContext
        with the GtkWindow path to draw the widget background like a real
        dialog.
        (webkit_authentication_dialog_class_init):
        (webkitAuthenticationDialogNew): Create a new
        WebKitAuthenticationDialog widget.
        * UIProcess/API/gtk/WebKitAuthenticationDialog.h: Added.
        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewHandleAuthenticationChallenge): Create a
        WebKitAuthenticationDialog widget and pass add it to the
        container.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (_WebKitWebViewBasePrivate): Updated to use the widget directly.
        (webkitWebViewChildIsInternalWidget): Ditto.
        (webkitWebViewBaseAddAuthenticationDialog): Ditto.
        (webkitWebViewBaseCancelAuthenticationDialog): Ditto.
        (webkitWebViewBaseContainerRemove): Ditto.
        (webkitWebViewBaseContainerForall): Ditto.
        (resizeWebKitWebViewBaseFromAllocation): Ditto.
        (webkitWebViewBaseFocus): Ditto.
        (webkitWebViewBaseDestroy): Destroy the auth widget is present.
        (webkit_web_view_base_class_init): Add implementation for
        GtkWidgetClass::destroy.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2013-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web Process crash when the UI process finishes too early
        https://bugs.webkit.org/show_bug.cgi?id=112729

        Reviewed by Anders Carlsson.

        The problem is when creating the GSocket in the WorkQeue for the
        socket descriptor. GLib considers a programmer error to create a
        GSocket providing an invalid socket and finishes the process with
        g_error(). We are actually providing a valid socket when creating
        the GSocket, but it can be invalidated by the worker thread while
        the GSocket is being created. This is because
        registerEventSourceHandler is called from the main thread and
        unregisterEventSourceHandler can be called from the worker
        thread. We are currently registering two event handlers, one to
        read data from the socket and another one to close the CoreIPC
        connection when the socket connection is broken. Every event
        source registered uses its own GSocket (even if the file
        descriptor is actually the same), so that when the UI process
        finishes too early, the first event handler can be executed in the
        worker thread, closing the socket descriptor, while the main
        thread is creating the GSocket for the second one.
        We don't really need to use a separate event handler to monitor
        the connection, because GSocket always notifies when condition is
        G_IO_HUP and G_IO_ERR even if they haven't been explicitly set in
        g_socket_create_source(). We can register socket event sources
        differently, providing also a function to be called when the
        connection is closed, using a single socket and the same even source.

        * Platform/CoreIPC/unix/ConnectionUnix.cpp:
        (CoreIPC::Connection::platformInvalidate):
        (CoreIPC::Connection::open): Register a single socket event
        handler providing also a function to be called when the connection
        is closed.
        * Platform/WorkQueue.h:
        (WorkQueue):
        * Platform/gtk/WorkQueueGtk.cpp: The EventSource class has been
        split, moving everyting specific to socket event source to a
        derived class SocketEventSource.
        (WorkQueue::EventSource::EventSource):
        (WorkQueue::EventSource::performWork):
        (WorkQueue::EventSource::performWorkOnce):
        (WorkQueue::EventSource::performWorkOnTermination):
        (WorkQueue::EventSource::deleteEventSource):
        (WorkQueue::EventSource):
        (WorkQueue::SocketEventSource):
        (WorkQueue::SocketEventSource::SocketEventSource):
        (WorkQueue::SocketEventSource::cancel):
        (WorkQueue::SocketEventSource::didClose):
        (WorkQueue::SocketEventSource::checkCondition):
        (WorkQueue::SocketEventSource::eventCallback):
        (WorkQueue::registerSocketEventHandler):
        (WorkQueue::unregisterSocketEventHandler):
        (WorkQueue::dispatchOnSource):

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

        <rdar://problem/13126204> [Mac] Tweak sandbox profile.

        Reviewed by Anders Carlsson.

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

2013-04-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] Add document-loaded signal to WebKitWebPage
        https://bugs.webkit.org/show_bug.cgi?id=110614

        Reviewed by Carlos Garcia Campos.

        Add a new signal document-loaded to WebKitWebPage that will be emitted
        when the DOM document has been loaded for the main frame.

        * UIProcess/API/gtk/tests/TestWebExtensions.cpp:
        (documentLoadedCallback):
        (testDocumentLoadedSignal):
        (beforeAll): Add test for document-loaded signal.
        * UIProcess/API/gtk/tests/WebExtensionTest.cpp:
        (documentLoadedCallback):
        (pageCreatedCallback):
        (methodCallCallback): Add new D-Bus signal DocumentLoaded in order to
        test document-loaded signal.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (webkit_web_page_class_init):
        (webkitWebPageCreate): Add document-loaded signal and emit it when
        didFinishDocumentLoadForFrame is called.

2013-04-12  Hanyee Kim  <choco@company100.net>

        [GTK] Webkit fails to build webkit2gtk-tests-resources.gresource.
        https://bugs.webkit.org/show_bug.cgi?id=114485

        Reviewed by Martin Robinson.

        Generating webkit2gtk-tests-resources.gresource can be failed due to
        the non-existing target directory.
        We need to make target directory before generating it.

        * UIProcess/API/gtk/tests/GNUmakefile.am:

2013-04-12  Andreas Kling  <akling@apple.com>

        REGRESSION(r145869): Right-click on SWF contents displays the context menu at the wrong place.
        <http://webkit.org/b/113836>
        <rdar://problem/13587624>

        Reviewed by Anders "Wesley Crusher" Carlsson.

        Mac plugins expect flipped-Y screen coordinates, while DOM APIs speak in unflipped coordinates,
        and we were mixing them up in the window frame caching optimization.

        Solve this by having the UIProcess send both flipped and unflipped window frames to the WebProcess.
        The flipped frame is passed on to plugins, and the unflipped frame is used for window.screenX/Y etc.

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

            No need to retrieve the window frame here as WebPageProxy::windowAndViewFramesChanged() will
            always override it anyway.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::windowRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowAndViewFramesChanged):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::windowFrameInUnflippedScreenCoordinates):
        * WebProcess/WebPage/WebPage.messages.in:

2013-04-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] WebView: Add callbacks to the WKViewClient to handle page viewport update
        https://bugs.webkit.org/show_bug.cgi?id=110463

        Reviewed by Anders Carlsson.

        * UIProcess/efl/ViewClientEfl.h:
        (ViewClientEfl):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::didChangeViewportProperties):
        * UIProcess/efl/WebViewClient.cpp:
        (WebKit::WebViewClient::didChangeViewportAttributes):
        (WebKit):
        * UIProcess/efl/WebViewClient.h:

            Added didChangeViewportAttributes callback to the WKViewClient to
            handle page viewport updates.

        * CMakeLists.txt:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit):
        * UIProcess/API/C/WKViewportAttributes.cpp: Added.
        (WKViewportAttributesGetTypeID):
        * UIProcess/API/C/WKViewportAttributes.h: Added.
        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/WebViewportAttributes.cpp: Added.
        (WebKit):
        (WebKit::WebViewportAttributes::WebViewportAttributes):
        (WebKit::WebViewportAttributes::~WebViewportAttributes):
        * UIProcess/WebViewportAttributes.h: Added.
        (WebKit):
        (WebViewportAttributes):
        (WebKit::WebViewportAttributes::create):
        (WebKit::WebViewportAttributes::originalAttributes):
        (WebKit::WebViewportAttributes::type):

            Added WKViewportAttributesRef - WK2 C API object that is wrapping 
            WebCore::ViewportAttributes structure and is passed in didChangeViewportAttributes
            WKViewClient callback.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didChangeViewportAttributes):
        (WebKit):

            Added implementaion of didChangeViewportAttributes WKViewClient 
            callback so that existing EFL WK2 funtionality is kept.


2013-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] The style of visited links doesn't change in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=112175

        Reviewed by Benjamin Poulain.

        The problem is that visited links were not tracked by the web
        process. There's a web process initial parameter to set whether
        web process should track visited links or not and it's disabled by
        default.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): Always set
        shouldTrackVisitedLinks to true.

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

        REGRESSION (r146956): ASSERTion failure: WebKit::WebProcess::pageWillLeaveWindow
        https://bugs.webkit.org/show_bug.cgi?id=114481
        <rdar://problem/13534784>

        Reviewed by Simon Fraser.

        Inform the WebProcess of WebPages which are already in a window when created.

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

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

        Add support for clearing storage areas
        https://bugs.webkit.org/show_bug.cgi?id=114479

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::StorageArea):
        Store the quota size so we can recreate the underlying StorageMap when clearing.
        
        (WebKit::StorageManager::StorageArea::clear):
        Create a new storage map and dispatch events.

        (WebKit::StorageManager::clear):
        Find the right storage area and call clear.

        * UIProcess/Storage/StorageManager.messages.in:
        Add Clear message.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::clear):
        Call the storage map.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::clear):
        Reset the cached values and send a clear message.

        (WebKit::StorageAreaMap::resetValues):
        New helper function.

        (WebKit::StorageAreaMap::didClear):
        New stub.

        * WebProcess/Storage/StorageAreaMap.messages.in:
        Add DidClear message.

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

        WebKit should set the header and footer layers' contentsScale when the device 
        scale factor changes
        https://bugs.webkit.org/show_bug.cgi?id=114471
        -and corresponding-
        <rdar://problem/13621288>

        Reviewed by Simon Fraser.

        Update the header and footer contentsScale when the device scale factor has 
        changed.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setDeviceScaleFactor):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::updateHeaderAndFooterLayersForDeviceScaleChange):

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

        Implement removing storage area items
        https://bugs.webkit.org/show_bug.cgi?id=114472

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::StorageArea::setItem):
        Rename connection to sourceConnection.

        (WebKit::StorageManager::StorageArea::removeItem):
        Remove the item from the map and dispatch events if needed.

        (WebKit::StorageManager::removeItem):
        Find the right storage area, remove the item and send back a DidRemoveItem message.

        * UIProcess/Storage/StorageManager.messages.in:
        Add RemoveItem message.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::removeItem):
        Call StorageAreaMap::removeItem.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::removeItem):
        Send a RemoveItem message to the storage manager.
        
        (WebKit::StorageAreaMap::didRemoveItem):
        Add empty stub.

        * WebProcess/Storage/StorageAreaMap.messages.in:
        Add DidRemoveItem message.

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

        InjectedBundleNodeHandle::imageForRect doesn't respect device scale factor or highlighting option
        https://bugs.webkit.org/show_bug.cgi?id=114466
        <rdar://problem/13508513>

        Reviewed by Simon Fraser.

        Respect the device scale factor when creating the snapshot image.
        Clear the snapshot image before drawing into it.
        Respect SnapshotOptionsExcludeSelectionHighlighting.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):

2013-04-11  Commit Queue  <rniwa@webkit.org>

        Unreviewed, rolling out r148034, r148052, r148097, and
        r148194.
        http://trac.webkit.org/changeset/148034
        http://trac.webkit.org/changeset/148052
        http://trac.webkit.org/changeset/148097
        http://trac.webkit.org/changeset/148194
        https://bugs.webkit.org/show_bug.cgi?id=114463

        broke mutiresolution favicons, among other things (Requested
        by thorton on #webkit).

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::setIconDataForIconURL):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        * UIProcess/WebIconDatabase.messages.in:
        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL):
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::destroy):

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

        Implement StorageManager::getValues
        https://bugs.webkit.org/show_bug.cgi?id=114461

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::items):
        (WebKit::StorageManager::getValues):
        Return the items from the right storage area.

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

        Clean up related storage areas when a connection is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=114459

        Reviewed by Beth Dakin.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::processWillCloseConnection):
        Dispatch invalidateConnectionInternal on the work queue.
        
        (WebKit::StorageManager::createStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        Rename m_storageAreas to m_storageAreasByConnection.

        (WebKit::StorageManager::invalidateConnectionInternal):
        Go over all known storage areas and remove this connection as a listener.

        (WebKit::StorageManager::findStorageArea):
        Rename m_storageAreas to m_storageAreasByConnection.

        * UIProcess/Storage/StorageManager.h:
        Rename m_storageAreas to m_storageAreasByConnection.

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

        Make StorageAreaMap dispatch session storage events
        https://bugs.webkit.org/show_bug.cgi?id=114454

        Reviewed by Beth Dakin.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::dispatchStorageEvent):
        Depending on the storage area type, call dispatchSessionStorageEvent or dispatchLocalStorageEvent.

        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
        Enumerate all the frames in our page and dispatch the event to the relevant ones.

        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
        Add empty stub for now.

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

        Implement more logic in StorageAreaMap
        https://bugs.webkit.org/show_bug.cgi?id=114451

        Reviewed by Alexey Proskuryakov.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        Add new overload.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::addListener):
        (WebKit::StorageManager::StorageArea::removeListener):
        These take storage map IDs.

        (WebKit::StorageManager::StorageArea::setItem):
        Rename storageAreaID to sourceStorageAreaID.

        (WebKit::StorageManager::StorageArea::dispatchEvents):
        Remove the code that would not dispatch to the source connection, there may still be storage areas interested in those events.

        (WebKit::StorageManager::setItem):
        This now takes the source storage area ID.

        (WebKit::StorageManager::findStorageArea):
        This takes a storage map ID.

        * UIProcess/Storage/StorageManager.messages.in:
        SetItem now takes the source storage area ID as well.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::setItem):
        Pass the source frame to StorageAreaMap::setItem.

        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::StorageAreaMap::StorageAreaMap):
        Send CreateStorageMap and add the object as a message receiver.

        (WebKit::StorageAreaMap::~StorageAreaMap):
        Send DestroyStorageMap and remove the object as a message receiver.

        (WebKit::StorageAreaMap::length):
        (WebKit::StorageAreaMap::key):
        (WebKit::StorageAreaMap::item):
        (WebKit::StorageAreaMap::contains):
        Load values and forward calls to the storage map.

        (WebKit::StorageAreaMap::setItem):
        This now takes the source frame as well. Update the local storage map and send a SetItem message.
        
        (WebKit::StorageAreaMap::loadValuesIfNeeded):
        Get the values from the storage manager.

        (WebKit::StorageAreaMap::dispatchStorageEvent):
        This now takes the source storage area ID.

        * WebProcess/Storage/StorageAreaMap.messages.in:
        DispatchStorageEvent now takes the source storage area ID.

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

        Web/Plugin process deadlock initializing async plugins.
        <rdar://problem/13525232> and https://bugs.webkit.org/show_bug.cgi?id=114217

        Rubberstamped by Anders Carlsson.

        Rollout r147953 and r147968 as we identified other causes for this.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginAsynchronously):
        * WebProcess/Plugins/PluginProxy.messages.in:

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

        Remove some ResourceHandle.h includes
        https://bugs.webkit.org/show_bug.cgi?id=114416

        Reviewed by Ryosuke Niwa.

        * WebProcess/Network/NetworkProcessConnection.cpp: Added an include that is now
        necessary.

2013-04-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] EventHandler should handle Space and BackSpace 
        https://bugs.webkit.org/show_bug.cgi?id=114428

        Reviewed by Jocelyn Turcotte.

        Remove our own handling of space and backspace.

        * WebProcess/WebPage/qt/WebPageQt.cpp:
        (WebKit::WebPage::performDefaultBehaviorForKeyEvent):

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

        Unreviewed Qt buildfixes after r148147, r148148 and r148154.

        * DerivedSources.pri:
        * Target.pri:

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

        Unreviewed GTK build fix, fixing the WebKit2 build.

        * GNUmakefile.list.am:

2013-04-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Build warning in didReceiveMessage() generated by messages.py
        https://bugs.webkit.org/show_bug.cgi?id=112513

        Reviewed by Anders Carlsson.

        Legacy receiver makes -Wunused-parameter build warnings. This patch is to fix them.

        * Scripts/webkit2/messages.py:
        (generate_message_handler):

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

        [CMAKE] Build fix after StorageArea refactoring
        https://bugs.webkit.org/show_bug.cgi?id=114398

        Unreviewed build fix.

        Change StorageAreaImpl.messages.in with StorageAreaMap.messages.in.
        Add StorageAreaMap.cpp in CMakeLists.txt.

        * CMakeLists.txt:

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

        Make StorageAreaImpl a wrapper around StorageAreaMap
        https://bugs.webkit.org/show_bug.cgi?id=114404

        Reviewed by Oliver Hunt.

        Prepare for moving all the code that deals with local storage values to StorageAreaMap,
        and make StorageAreaImpl a dumb wrapper that simply calls through to the map.

        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::create):
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        (WebKit::StorageAreaImpl::~StorageAreaImpl):
        (WebKit::StorageAreaImpl::storageType):
        (WebKit::StorageAreaImpl::length):
        (WebKit::StorageAreaImpl::key):
        (WebKit::StorageAreaImpl::getItem):
        (WebKit::StorageAreaImpl::setItem):
        (WebKit::StorageAreaImpl::contains):
        * WebProcess/Storage/StorageAreaImpl.h:
        (WebKit::StorageAreaImpl::storageAreaID):
        * WebProcess/Storage/StorageAreaMap.cpp:
        (WebKit::generateStorageMapID):
        (WebKit::StorageAreaMap::create):
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::storageType):
        (WebKit::StorageAreaMap::length):
        (WebKit::StorageAreaMap::key):
        (WebKit::StorageAreaMap::item):
        (WebKit::StorageAreaMap::setItem):
        (WebKit::StorageAreaMap::contains):
        (WebKit::StorageAreaMap::didSetItem):
        (WebKit::StorageAreaMap::dispatchStorageEvent):
        * WebProcess/Storage/StorageAreaMap.h:
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        (StorageNamespaceImpl):

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

        Rename StorageManager messages to refer to the StorageMap instead of the StorageArea
        https://bugs.webkit.org/show_bug.cgi?id=114401

        Reviewed by Ryosuke Niwa.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::createStorageMap):
        (WebKit::StorageManager::destroyStorageMap):
        (WebKit::StorageManager::setItem):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/Storage/StorageManager.messages.in:
        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        (WebKit::StorageAreaImpl::~StorageAreaImpl):

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

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * Platform/CoreIPC/gtk: Removed.
        * Platform/CoreIPC/qt: Removed.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32: Removed.
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.64: Removed.
        * PluginProcess/gtk: Removed.
        * Shared/API/c/win: Removed.
        * Shared/Plugins/Netscape/win: Removed.
        * Shared/cg/win: Removed.
        * Shared/win: Removed.
        * UIProcess/API/C/win: Removed.
        * UIProcess/API/gtk/webkit: Removed.
        * UIProcess/Launcher/win: Removed.
        * UIProcess/Plugins/gtk: Removed.
        * UIProcess/Plugins/win: Removed.
        * UIProcess/texmap: Removed.
        * UIProcess/win: Removed.
        * WebProcess/Authentication/mac: Removed.
        * WebProcess/Cookies/efl: Removed.
        * WebProcess/Cookies/gtk: Removed.
        * WebProcess/Downloads/cf/win: Removed.
        * WebProcess/Downloads/cfnet: Removed.
        * WebProcess/Downloads/curl: Removed.
        * WebProcess/Downloads/efl: Removed.
        * WebProcess/Downloads/gtk: Removed.
        * WebProcess/Downloads/mac: Removed.
        * WebProcess/Downloads/qt: Removed.
        * WebProcess/Downloads/soup: Removed.
        * WebProcess/FullScreen/gtk: Removed.
        * WebProcess/FullScreen/mac: Removed.
        * WebProcess/FullScreen/qt: Removed.
        * WebProcess/FullScreen/win: Removed.
        * WebProcess/InjectedBundle/API/c/win: Removed.
        * WebProcess/InjectedBundle/win: Removed.
        * WebProcess/KeyValueStorage: Removed.
        * WebProcess/Network/CustomProtocols/mac: Removed.
        * WebProcess/Plugins/Netscape/gtk: Removed.
        * WebProcess/Plugins/Netscape/win: Removed.
        * WebProcess/WebCoreSupport/win: Removed.
        * WebProcess/WebPage/LayerTreeCoordinator: Removed.
        * WebProcess/WebPage/ca/mac: Removed.
        * WebProcess/WebPage/ca/win: Removed.
        * WebProcess/WebPage/win: Removed.
        * WebProcess/win: Removed.
        * qt/Resources: Removed.

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

        [CMAKE] Build fix after r148147, r148148
        https://bugs.webkit.org/show_bug.cgi?id=114395

        Unreviewed build fix.

        Use StorageAreaImpl, StorageNamespaceImpl instead of StorageAreaProxy, StorageNamespaceProxy.

        * CMakeLists.txt:

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

        Add a stubbed out StorageAreaMap class
        https://bugs.webkit.org/show_bug.cgi?id=114392

        Reviewed by Andreas Kling.

        The intention is that StorageAreaMap is going to take over responsibility for storing the storage values in the
        web process, as well as dispatching events. A StorageAreaMap will be shared between multiple StorageAreaImpl objects,
        for example if multiple frames with the same origin use local storage.

        * DerivedSources.make:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::dispatchEvents):
        (WebKit::StorageManager::setItem):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/StorageAreaImpl.cpp:
        (WebKit::StorageAreaImpl::StorageAreaImpl):
        (WebKit::StorageAreaImpl::~StorageAreaImpl):
        * WebProcess/Storage/StorageAreaMap.cpp: Added.
        (WebKit):
        (WebKit::StorageAreaMap::create):
        (WebKit::StorageAreaMap::StorageAreaMap):
        (WebKit::StorageAreaMap::~StorageAreaMap):
        (WebKit::StorageAreaMap::didSetItem):
        (WebKit::StorageAreaMap::dispatchStorageEvent):
        * WebProcess/Storage/StorageAreaMap.h: Added.
        (WebKit):
        (StorageAreaMap):
        * WebProcess/Storage/StorageAreaMap.messages.in: Renamed from Source/WebKit2/WebProcess/Storage/StorageAreaImpl.messages.in.

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

        Rename StorageAreaProxy to StorageAreaImpl.

        Rubber-stamped by Beth Dakin.

        * DerivedSources.make:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::StorageArea::dispatchEvents):
        (WebKit::StorageManager::setItem):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/StorageAreaImpl.cpp: Renamed from Source/WebKit2/WebProcess/Storage/StorageAreaProxy.cpp.
        * WebProcess/Storage/StorageAreaImpl.h: Renamed from Source/WebKit2/WebProcess/Storage/StorageAreaProxy.h.
        * WebProcess/Storage/StorageAreaImpl.messages.in: Renamed from Source/WebKit2/WebProcess/Storage/StorageAreaProxy.messages.in.
        * WebProcess/Storage/StorageNamespaceImpl.cpp:
        (WebKit::StorageNamespaceImpl::storageArea):
        * WebProcess/Storage/StorageNamespaceImpl.h:
        (WebKit):
        (StorageNamespaceImpl):

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

        Rename StorageNamespaceProxy to StorageNamespaceImpl.

        Rubber-stamped by Beth Dakin.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::create):
        (WebKit::StorageAreaProxy::StorageAreaProxy):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):
        * WebProcess/Storage/StorageNamespaceImpl.cpp: Renamed from Source/WebKit2/WebProcess/Storage/StorageNamespaceProxy.cpp.
        * WebProcess/Storage/StorageNamespaceImpl.h: Renamed from Source/WebKit2/WebProcess/Storage/StorageNamespaceProxy.h.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::sessionStorageNamespace):

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

        [wk2] Un-pollute TCADA methods with "PageOverlayLayerMap::iterator end"
        https://bugs.webkit.org/show_bug.cgi?id=114387

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::paintContents):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):

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

        [wk2] REGRESSION: Find highlight does not update when the view is resized
        https://bugs.webkit.org/show_bug.cgi?id=114382
        <rdar://problem/13599797>

        Reviewed by Simon Fraser.

        Invalidate the page overlays from TiledCoreAnimationDrawingArea::updateGeometry.
        This will have no effect if the page overlay hasn't previously asked to be painted
        (as drawsContent will remain false on the layer).

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea): Add invalidateAllPageOverlays.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::invalidateAllPageOverlays): Factor this out of didChangeScrollOffsetForAnyFrame.
        (WebKit::TiledCoreAnimationDrawingArea::didChangeScrollOffsetForAnyFrame): Call invalidateAllPageOverlays.
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry): Call invalidateAllPageOverlays.

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

        FindBanner matches are offset when the WKView has a header or footer
        https://bugs.webkit.org/show_bug.cgi?id=114314
        -and corresponding-
        <rdar://problem/13522434>

        Reviewed by Simon Fraser.

        When calculating the matching rects, also adjust to the scroll offset that is  
        relative to the Document.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::rectsForTextMatches):

2013-04-10  Tobias Mueller  <tobiasmue@gnome.org>

        Fixed build failure in Plugin.h: FloatPoint was not in namespace WebCore

        make[1]: *** Waiting for unfinished jobs....
        In file included from Source/WebKit2/PluginProcess/PluginCreationParameters.h:31:0,
                         from Source/WebKit2/PluginProcess/PluginCreationParameters.cpp:27:
        ./Source/WebKit2/WebProcess/Plugins/Plugin.h:268:58: error: 'FloatPoint' in namespace 'WebCore' does not name a type
        ./Source/WebKit2/WebProcess/Plugins/Plugin.h:268:77: error: ISO C++ forbids declaration of 'parameter' with no type [-fpermissive]
        cc1plus: warning: unrecognized command line option "-Wno-c++11-extensions" [enabled by default]
        make[1]: *** [Source/WebKit2/PluginProcess/libwebkit2gtk_3_0_la-PluginCreationParameters.lo] Error 1

        It now passes that make target.

        https://bugs.webkit.org/show_bug.cgi?id=111862

        Reviewed by Darin Adler.

        * WebProcess/Plugins/Plugin.h:
        (WebCore): Added FloatPoint to the WebCore namespace

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

        Remove unneeded headers from FrameLoader.h
        https://bugs.webkit.org/show_bug.cgi?id=114223

        Reviewed by Geoffrey Garen.

        Include HistoryController.h from WebCore.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:

2013-04-09  Geoffrey Garen  <ggaren@apple.com>

        Removed bitrotted TimeoutChecker code
        https://bugs.webkit.org/show_bug.cgi?id=114336

        Reviewed by Alexey Proskuryakov.

        This mechanism hasn't worked for a while.

        MarkL is working on a new version of this feature with a distinct
        implementation.

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

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

        <rdar://problem/13617144> WKNavigationData needs to expose the destination of the navigation

        Introduce WKNavigationDataCopyNavigationDestinationURL to access the destination of the navigation.

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKNavigationData.cpp:
        (WKNavigationDataCopyURL): Add a note about returning the URL from the original request for sake of
        backwards-compatibility.
        (WKNavigationDataCopyNavigationDestinationURL): Return the URL from our underlying WebNavigationDataStore.
        * UIProcess/API/C/WKNavigationData.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::updateGlobalHistory): Store the current URL in to the WebNavigationDataStore
        object. WKNavigationData can retrieve the value that we were previously storing here via the originalRequest.

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

        <rdar://problem/13617104> WKPageCopySessionState needs to provide more context to the filter callback

        Introduce a new value type for WKPageSessionStateFilterCallback that represents the passing
        of whole WKBackForwardListItemRefs to the filter callback. This allows clients to consider
        more than the original URL of the item when filtering entries from the session state.

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetSessionBackForwardListItemValueType): Return a static string representing our new value type.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation): Call the filter function with each of the
        possible value types in turn, respecting the first false value, if any, that is returned.

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

        [GTK] Add support for Page Visibility
        https://bugs.webkit.org/show_bug.cgi?id=97324

        Reviewed by Sam Weinig.

        Added new unittest to test page visibility using GTK Widget visibility API.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewPageVisibility):
        (beforeAll):
        * UIProcess/API/gtk/tests/WebViewTest.cpp:
        (WebViewTest::showInWindow):
        * UIProcess/API/gtk/tests/WebViewTest.h:

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

        REGRESSION (r146518): WebKit2APITests/TestInspector is failing
        https://bugs.webkit.org/show_bug.cgi?id=113281

        Reviewed by Darin Adler.

        Changes to the WebInspectorProxy opening processing in r146518 caused the change in how the GTK-specific
        WebInspectorProxy code operates, specifically the 'bring-to-front' signal is not emitted anymore when opening the
        inspector due to the WebInspectorProxy::bringToFront method now only bringing the inspector window to front if it exists
        and opening it (and thus unable to bring it to front) otherwise.

        Closing of the inspector through the didClose method is now done immediately after sending the WebInspector::Close()
        message to the WebProcess rather than waiting for the WebProcess to communicate back the order of closing. Due to this
        the relevant code in the test cases had to be changed to not run the loop but rather just check that the closing was
        successful.

        (InspectorTest::InspectorTest): Remove the initialization of the now redundant m_quitOnBringToFront member variable.
        (InspectorTest::bringToFront): Quit the loop without checking the removed member variable.
        (InspectorTest::closed): Do not quit the loop as it is not run anymore.
        (InspectorTest::showIdle): A helper method that asynchronously calls the webkit_web_inspector_show method, removing some
        unnecessary complexity about under what exact circumstances to quit the loop in open-window/bring-to-front callbacks.
        (InspectorTest::show): Replaces the showAndWaitUntilFinished method, adding an idle invocation of the showIdle helper
        method and running the loop.
        (InspectorTest::close): Formerly closeAndWaitUntilClosed, now does not run the loop anymore as there's no need for it.
        (testInspectorDefault): Only the window opening event is now expected upon showing the inspector for the first time.
        Adjusting callsites to use InspectorTest::show and InspectorTest::close instead of
        InspectorTest::showAndWaitUntilFinished and InspectorTest::showAndWaitUntilFinished.
        (CustomInspectorTest::destroyWindow): Formerly destroyWindowAndWaitUntilClosed, the closing is not asynchronous anymore
        so the loop is not run.
        (testInspectorManualAttachDetach): Only the window opening event is now expected upon showing the inspector for the first time.
        Adjusting callsites to use InspectorTest::show and InspectorTest::close instead of
        InspectorTest::showAndWaitUntilFinished and InspectorTest::showAndWaitUntilFinished.
        (testInspectorCustomContainerDestroyed): Adjusting callsites to use InspectorTest::show and CustomInspectorTest::destroyWindow
        instead of InspectorTest::showAndWaitUntilFinished and CustomInspectorTest::destroyWindowAndWaitUntilClosed.
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::show): When showing a connected WebInspectorProxy, call the bringToFront method which will
        open the inspector if it's not yet visible or bring it to the front otherwise. 

2013-04-10  Zan Dobersek  <zandobersek@gmail.com>

        [GTK][WK2] Implement WebInspectorProxy::platformInspectedWindowWidth
        https://bugs.webkit.org/show_bug.cgi?id=113498

        Reviewed by Martin Robinson.

        The method was introduced in r147004.

        * UIProcess/API/gtk/tests/TestInspector.cpp: Specify the gMinimumAttachedInspectorWidth variable, reflecting the value
        of WebInspectorProxy::minimumAttachedWidth. Use it as the width to which the inspected view should be resized in
        InspectorTest::resizeViewAndAttach.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformInspectedWindowHeight): Use the gtk_widget_get_allocated_height method to return the
        widget height.
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth): Newly implemented, similarly uses the
        gtk_widget_get_allocated_width method to return the widget width.

2013-04-09  Antoine Quint  <graouts@apple.com>

        WKFrameIsDisplayingMarkupDocument should return true for Web Archives
        https://bugs.webkit.org/show_bug.cgi?id=114291

        Reviewed by Dean Jackson.

        Also return true for the Web Archive MIME type since a Web Archive
        is displaying a markup document by nature.

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

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

        REGRESSION (r147454): Youtube annotation links to new window broken
        https://bugs.webkit.org/show_bug.cgi?id=114242
        <rdar://problem/13609940>

        Reviewed by Beth Dakin.

        Set the current user gesture to "DefinitelyProcessingNewUserGesture" if popups are allowed.

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

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

        If we fail to decode a message name, pass the message length as the name
        https://bugs.webkit.org/show_bug.cgi?id=114305
        <rdar://problem/13605703>

        Reviewed by Sam Weinig.

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

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

        Don't create another plugin process for restarted plugins
        https://bugs.webkit.org/show_bug.cgi?id=114233

        Reviewed by Geoff Garen.

        A snapshotting plugin starts in a separate process from
        regular plugins. This can be a little confusing to users
        because they might see two plugin processes. We can set
        the minimum life and timeout on the snapshotting process
        to much smaller values, since the process doesn't need
        to live that long. This will reduce some potential
        confusion. Also, since there is another plugin process
        running real plugins, it should be paged in if it needs
        to restart.

        There was, however, a bug in the process management. A
        restarted plugin received a special PluginProcess::Type,
        so that it could cross fade into the page nicely. This
        caused it to start a *third* plugin process. Instead
        mark a restarted flag directly on the PluginProxy and
        revert back to two process types.

        * PluginProcess/PluginProcess.h: Remove TypeRestartedProcess.

        * UIProcess/Plugins/PluginProcessProxy.cpp: Add two new
            timeout values for snapshotting processes.
        (WebKit::PluginProcessProxy::didFinishLaunching): Chose which
            of the timeout pairs to use.

        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::pluginLayer): Don't look at the process type, instead
            look at the process flag to see if we are restarted.
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::create): Copy the new flag into constructor.
        (WebKit::PluginProxy::PluginProxy): Remember the flag.
        * WebProcess/Plugins/PluginProxy.h: Add a new m_restartedProcess flag.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): When we are creating the proxy, separate
            the concept of snapshotting and restarting.

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

        [wk2] IconDatabase images should be decoded in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=112524
        <rdar://problem/10133914>

        Reviewed by Oliver Hunt.

        In the interests of keeping decoding of data coming in from the greater Internet
        in the WebProcess, move decoding of favicons from the UIProcess to the WebProcess.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::setIconBitmapForIconURL):
        Receive a ShareableBitmap handle from the WebProcess instead of a DataReference.
        Use the new setIconBitmapForIconURL IconDatabase method.

        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        Rename setIconDataForIconURL to setIconBitmapForIconURL.

        * UIProcess/WebIconDatabase.messages.in: Ditto.

        * WebProcess/IconDatabase/WebIconDatabaseProxy.cpp:
        (WebKit::WebIconDatabaseProxy::setIconDataForIconURL):
        In the WebProcess, decode the incoming icon and draw it into a ShareableBitmap.

2013-04-09  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        [EFL] Declare TEST_THEME_DIR in a single place.
        https://bugs.webkit.org/show_bug.cgi?id=114285

        Reviewed by Anders Carlsson.

        * PlatformEfl.cmake: Remove definition of `TEST_THEME_DIR', which is
        now defined in OptionsEfl.cmake.

2013-04-09  Rafael Brandao  <rafael.lobo@openbossa.org>

        [CoordinatedGraphics] serviceScriptedAnimations expects time in seconds
        https://bugs.webkit.org/show_bug.cgi?id=112582

        Reviewed by Andreas Kling.

        We've been exposing different time unit for requestAnimationFrame because
        of wrong conversion before serviceScriptedAnimations function calls.
        Fixed it to use seconds instead of milliseconds.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::syncDisplayState): Remove unnecessary conversion.

2013-04-09  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Remove obsolete QtWebPageFindClient forward declaration from qquickwebview_p.h.
        https://bugs.webkit.org/show_bug.cgi?id=114284

        Reviewed by Andreas Kling.

        The class QtWebPageFindClient was removed in r142073 when the functionality
        was folded into QQuickWebViewPrivate.

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

2013-04-09  Michael Brüning  <michael.bruning@digia.com>

        Fix GTK WebKit2 build after r148005.
        https://bugs.webkit.org/show_bug.cgi?id=114270

        Reviewed by Andreas Kling.

        Fix GTK build break that went through the buildbot undetected.

        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_get_selected_files):

2013-04-09  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Remove direct references to WebPageProxy from QQuickWebPage.
        https://bugs.webkit.org/show_bug.cgi?id=112850

        Reviewed by Andreas Kling.

        Removes direct references to WebPageProxy from QQuickWebPage and prepares the
        class for the move to QRawWebView. The access to the device scale factor and
        CoordinatedGraphicsScene is provided through QQuickWebViewPrivate, and therefore
        accessors to these properties are temporarily added. Eventually, this access will
        be provided through QRawWebView when the move is complete.

        This also moves the pointer to QtWebPageEventHandler from QQuickWebPagePrivate
        to QQuickWebViewPrivate as it is mainly used from there.

        * UIProcess/API/qt/qquickwebpage.cpp:
        (QQuickWebPagePrivate::QQuickWebPagePrivate):
        (QQuickWebPagePrivate::paint):
        (QQuickWebPage::updatePaintNode):
        * UIProcess/API/qt/qquickwebpage_p.h:
        * UIProcess/API/qt/qquickwebpage_p_p.h:
        (QQuickWebPagePrivate):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewPrivate::handleMouseEvent):
        (QQuickWebViewPrivate::processDidCrash):
        (QQuickWebViewPrivate::coordinatedGraphicsScene):
        (QQuickWebViewPrivate::deviceScaleFactor):
        (QQuickWebViewPrivate::setIntrinsicDeviceScaleFactor):
        (QQuickWebViewFlickablePrivate::onComponentComplete):
        (QQuickWebView::keyPressEvent):
        (QQuickWebView::keyReleaseEvent):
        (QQuickWebView::inputMethodEvent):
        (QQuickWebView::focusInEvent):
        (QQuickWebView::itemChange):
        (QQuickWebView::touchEvent):
        (QQuickWebView::wheelEvent):
        (QQuickWebView::hoverEnterEvent):
        (QQuickWebView::hoverMoveEvent):
        (QQuickWebView::hoverLeaveEvent):
        (QQuickWebView::dragMoveEvent):
        (QQuickWebView::dragEnterEvent):
        (QQuickWebView::dragLeaveEvent):
        (QQuickWebView::dropEvent):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (WebCore):
        (WebKit):
        (QQuickWebViewPrivate):

2013-04-09  Michael Brüning  <michael.bruning@digia.com>

        [Qt][WK2] Use C API to enable Navigator Qt Object.
        https://bugs.webkit.org/show_bug.cgi?id=112810

        Reviewed by Andreas Kling.

        Replace the direct reference to the WebPageProxy with use of
        C API.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::setNavigatorQtObjectEnabled):

2013-04-09  Michael Brüning  <michael.bruning@digia.com>

        [WK2] Add C API to copy selected files from WebOpenPanelParameters.
        https://bugs.webkit.org/show_bug.cgi?id=112339

        Reviewed by Andreas Kling.

        Replaces the existing WebOpenPanelParameters::selectedFileNames() method
        to return a copy of the selected file names and exposes it through the
        C API. This is done in order to reduce the direct use of WebKit2 internal
        classes. The implementation is very similar to the one in 
        WebOpenPanelParameters::acceptMIMETypes().

        This also updates the GTK port, which is the other user of selectedFileNames.

        * Shared/WebOpenPanelParameters.cpp:
        (WebKit::WebOpenPanelParameters::selectedFileNames):
        (WebKit):
        * Shared/WebOpenPanelParameters.h:
        (WebOpenPanelParameters):
        * UIProcess/API/C/WKOpenPanelParameters.cpp:
        (WKOpenPanelParametersCopySelectedFileNames):
        * UIProcess/API/C/WKOpenPanelParameters.h:
        * UIProcess/API/gtk/WebKitFileChooserRequest.cpp:
        (webkit_file_chooser_request_get_selected_files):
        * UIProcess/qt/QtWebPageUIClient.cpp:
        (WebKit::QtWebPageUIClient::runOpenPanel):

2013-04-09  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2] Remove build warnings for unused parameters
        https://bugs.webkit.org/show_bug.cgi?id=114234

        Reviewed by Andreas Kling.

        Fix build warnings -Wunused-parameter.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::SessionStorageNamespace::cloneTo):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::requestNetworkingStatistics):
        (WebKit::WebContext::pluginInfoStoreDidLoadPlugins):
        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::removeItem):
        (WebKit::StorageAreaProxy::clear):
        (WebKit::StorageAreaProxy::dispatchSessionStorageEvent):
        (WebKit::StorageAreaProxy::dispatchLocalStorageEvent):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didFinishLoad):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::shouldPlugInAutoStartFromOrigin):

2013-04-09  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        [WK2] Drop WebProcess capabilities on Linux using seccomp filters
        https://bugs.webkit.org/show_bug.cgi?id=89875

        Reviewed by Maciej Stachowiak.

        Introduce the foundations of the SeccompFilter-based sandbox. The
        hardening of the WebProcess (and potentially PluginProcess, etc)
        works by a combination of the two things:

        - Blocking syscalls that are not used, reducing the size of the attack
        surface.
        - Trapping sensitive syscalls and delegating the execution of these
        syscalls to a separated trusted process subject to a set of policies.

        The initial implementation traps the open()-family of syscalls on WebKit
        EFL's and Qt's WebProcess, but it could be easily used by any Linux port,
        since the code is suppose to be Linux-compliant. The list of syscalls handled
        by the broker process should definitely grow as we mature the
        implementation. Other syscalls needs to be handled to get this sandbox
        fully functional, like unlink(), mkdir(), etc.

        The broker process should be initialized as early as possible on the
        sandboxed process main() function, because it only does a fork(), which
        is cheap on Linux. That also aims to minimize the resident memory footprint
        of the broker process.

        Opening of files for upload and saving downloads is not supported yet,
        since it should be handled to the UIProcess in a similar fashion as
        the Mac port does.

        * PlatformEfl.cmake:
        * Shared/linux/SeccompFilters/OpenSyscall.cpp: Added.
        (WebKit):
        (WebKit::OpenSyscall::createFromOpenatContext):
        (WebKit::OpenSyscall::createFromCreatContext):
        (WebKit::OpenSyscall::OpenSyscall):
        (WebKit::OpenSyscall::setResult):
        (WebKit::OpenSyscall::execute):
        (WebKit::OpenSyscall::encode):
        (WebKit::OpenSyscall::decode):
        (WebKit::OpenSyscallResult::OpenSyscallResult):
        (WebKit::OpenSyscallResult::~OpenSyscallResult):
        (WebKit::OpenSyscallResult::encode):
        (WebKit::OpenSyscallResult::decode):
        * Shared/linux/SeccompFilters/OpenSyscall.h: Added.
        (CoreIPC):
        (WebKit):
        (OpenSyscall):
        (WebKit::OpenSyscall::setPath):
        (WebKit::OpenSyscall::setFlags):
        (WebKit::OpenSyscall::setMode):
        (OpenSyscallResult):
        (WebKit::OpenSyscallResult::fd):
        (WebKit::OpenSyscallResult::errorNumber):
        * Shared/linux/SeccompFilters/SeccompBroker.cpp: Added.
        (WebKit):
        (SeccompBrokerClient):
        (WebKit::sendMessage):
        (WebKit::receiveMessage):
        (WebKit::SIGSYSHandler):
        (WebKit::registerSIGSYSHandler):
        (WebKit::SeccompBrokerClient::shared):
        (WebKit::SeccompBrokerClient::SeccompBrokerClient):
        (WebKit::SeccompBrokerClient::~SeccompBrokerClient):
        (WebKit::SeccompBrokerClient::dispatch):
        (WebKit::SeccompBrokerClient::handleIfOpeningOnlineCPUCount):
        (WebKit::SeccompBroker::launchProcess):
        (WebKit::SeccompBroker::initialize):
        (WebKit::SeccompBroker::runLoop):
        * Shared/linux/SeccompFilters/SeccompBroker.h: Added.
        (WebKit):
        (SeccompBroker):
        (WebKit::SeccompBroker::setSyscallPolicy):
        (WebKit::SeccompBroker::SeccompBroker):
        * Shared/linux/SeccompFilters/SeccompFilters.cpp: Added.
        (WebKit):
        (WebKit::SeccompFilters::SeccompFilters):
        (WebKit::SeccompFilters::~SeccompFilters):
        (WebKit::SeccompFilters::addRule):
        (WebKit::SeccompFilters::initialize):
        * Shared/linux/SeccompFilters/SeccompFilters.h: Added.
        (WebKit):
        (SeccompFilters):
        (WebKit::SeccompFilters::context):
        (WebKit::SeccompFilters::platformInitialize):
        * Shared/linux/SeccompFilters/SigactionSyscall.cpp: Added.
        (WebKit):
        (WebKit::SigactionSyscall::createFromContext):
        * Shared/linux/SeccompFilters/SigactionSyscall.h: Added.
        (WebKit):
        (SigactionSyscall):
        * Shared/linux/SeccompFilters/SigprocmaskSyscall.cpp: Added.
        (WebKit):
        (WebKit::SigprocmaskSyscall::createFromContext):
        * Shared/linux/SeccompFilters/SigprocmaskSyscall.h: Added.
        (WebKit):
        (SigprocmaskSyscall):
        * Shared/linux/SeccompFilters/Syscall.cpp: Added.
        (WebKit):
        (WebKit::Syscall::createFromContext):
        (WebKit::Syscall::createFromDecoder):
        (WebKit::Syscall::Syscall):
        (WebKit::SyscallResult::createFromDecoder):
        (WebKit::SyscallResult::SyscallResult):
        * Shared/linux/SeccompFilters/Syscall.h: Added.
        (CoreIPC):
        (WebKit):
        (Syscall):
        (WebKit::Syscall::~Syscall):
        (WebKit::Syscall::type):
        (WebKit::Syscall::setContext):
        (WebKit::Syscall::context):
        (SyscallResult):
        (WebKit::SyscallResult::~SyscallResult):
        (WebKit::SyscallResult::type):
        * Shared/linux/SeccompFilters/SyscallPolicy.cpp: Added.
        (WebKit):
        (WebKit::removeTrailingSlash):
        (WebKit::SyscallPolicy::hasPermissionForPath):
        (WebKit::SyscallPolicy::addFilePermission):
        (WebKit::SyscallPolicy::addDirectoryPermission):
        (WebKit::SyscallPolicy::addDefaultWebProcessPolicy):
        * Shared/linux/SeccompFilters/SyscallPolicy.h: Added.
        (WebKit):
        (SyscallPolicy):
        * Target.pri:
        * WebKit2.pri:
        * WebProcess/efl/SeccompFiltersWebProcessEfl.cpp: Added.
        (WebKit):
        (WebKit::SeccompFiltersWebProcessEfl::SeccompFiltersWebProcessEfl):
        (WebKit::SeccompFiltersWebProcessEfl::platformInitialize):
        * WebProcess/efl/SeccompFiltersWebProcessEfl.h: Added.
        (WebKit):
        (SeccompFiltersWebProcessEfl):
        * WebProcess/qt/SeccompFiltersWebProcessQt.cpp: Added.
        (WebKit):
        (WebKit::SeccompFiltersWebProcessQt::SeccompFiltersWebProcessQt):
        (WebKit::SeccompFiltersWebProcessQt::platformInitialize):
        * WebProcess/qt/SeccompFiltersWebProcessQt.h: Added.
        (WebKit):
        (SeccompFiltersWebProcessQt):
        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):
        * WebProcess/soup/WebProcessSoup.cpp:
        (WebKit::WebProcess::platformInitializeWebProcess):

2013-04-08  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Mark not implemented methods in TextCheckerEfl.
        https://bugs.webkit.org/show_bug.cgi?id=112261

        Reviewed by Anders Carlsson.

        There's no need to call client's methods in TextCheckerEfl.cpp if they are not
        implemented. Mark them as not implemented until we provide proper implementation.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::isContinuousSpellCheckingAllowed):
        (WebKit::TextChecker::setGrammarCheckingEnabled):
        (WebKit::TextChecker::grammarCheckingEnabledStateChanged):
        (WebKit::TextChecker::checkGrammarOfString):
        (WebKit::TextChecker::spellingUIIsShowing):
        (WebKit::TextChecker::toggleSpellingUIIsShowing):
        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
        (WebKit::TextChecker::updateSpellingUIWithGrammarString):

2013-04-08  Benjamin Poulain  <benjamin@webkit.org>

        Remove HTML Notification
        https://bugs.webkit.org/show_bug.cgi?id=114231

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

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

        Don't run primary plugin detection if plugin snapshotting is off
        https://bugs.webkit.org/show_bug.cgi?id=114222
        <rdar://problem/13603988>

        Reviewed by Dean Jackson.

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

2013-04-08  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Remove WebKit2 source code
        https://bugs.webkit.org/show_bug.cgi?id=114096

        Reviewed by Anders Carlsson.

        Remove conditional includes for the windows platform.

        * Shared/API/c/WKBase.h:
        * UIProcess/API/C/WKAPICast.h:

2013-04-08  Geoffrey Garen  <ggaren@apple.com>

        Stop #include-ing all of JavaScriptCore in every DOM-related file
        https://bugs.webkit.org/show_bug.cgi?id=114220

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.cpp:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.h:

2013-04-08  Brady Eidson  <beidson@apple.com>

        Web/Plugin process deadlock initializing async plugins.
        <rdar://problem/13525232> and https://bugs.webkit.org/show_bug.cgi?id=114217

        Reviewed by Anders Carlsson.

       The "Async initialization complete" messages probably don't have to be synchronous.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::createPluginAsynchronously): Notify of initialization success/failure asynchronously.
        * WebProcess/Plugins/PluginProxy.messages.in: 

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

        Add an async version of ResourceHandle::didReceiveResponse
        https://bugs.webkit.org/show_bug.cgi?id=114215

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        Send the message and then call continueDidReceiveResponse.

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

        [GTK] Build Platform as a separate static library
        https://bugs.webkit.org/show_bug.cgi?id=114164

        Reviewed by Martin Robinson.

        This way we reduce a bit the amount of files compiled twice
        because of the plugin process.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Platform/gtk/WorkQueueGtk.cpp: Remove unused header.
        * Platform/unix/SharedMemoryUnix.cpp: Ditto.

2013-04-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] WebView: Add callbacks to the WKViewClient to remove direct access to page viewport controller
        https://bugs.webkit.org/show_bug.cgi?id=110741

        Reviewed by Anders Carlsson.

        Provided WKViewClient with didRequestScroll, didRenderFrame and didCompletePageTransition
        callbacks so that direct access from WebView to page viewport controller is avoided.

        Implementation of callbacks is also added to keep the current EFL WK2 functionality.

        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):

            Moved here code from deleted WebView::didCommitLoad.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didChangeContentsPosition):
        (WebKit):
        (WebKit::ViewClientEfl::didRenderFrame):
        (WebKit::ViewClientEfl::didCompletePageTransition):
        (WebKit::ViewClientEfl::ViewClientEfl):
        * UIProcess/efl/ViewClientEfl.h:
        (ViewClientEfl):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::pageDidRequestScroll):
        (WebKit::WebView::didRenderFrame):
        (WebKit::WebView::pageTransitionViewportReady):
        * UIProcess/efl/WebViewClient.cpp:
        (WebKit::WebViewClient::didChangeContentsPosition):
        (WebKit):
        (WebKit::WebViewClient::didRenderFrame):
        (WebKit::WebViewClient::didCompletePageTransition):
        * UIProcess/efl/WebViewClient.h:
        (WebCore):

2013-04-08  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] WebView's interactive property is not fully respected
        https://bugs.webkit.org/show_bug.cgi?id=113066

        Reviewed by Jocelyn Turcotte.

        WK2 sign-off by Benjamin Poulain.

        The QML WebView inherits the "interactive" property from Flickable
        which is true by default, and disables the interaction with the
        Flickable if set to false.
        Resulting from the design of the WebView panning and flicking is
        disabled by Flickable but to be consistent we also need to disable
        double-tap gestures and pinch gestures since they would trigger
        scale and position changes.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
        (WebKit::PageViewportControllerClientQt::pinchGestureRequestUpdate):
        (WebKit::PageViewportControllerClientQt::pinchGestureEnded):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleDoubleTapEvent):

2013-04-07  David Kilzer  <ddkilzer@apple.com>

        Remove the rest of SVG_DOM_OBJC_BINDINGS
        <http://webkit.org/b/114112>

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:
        - Remove ENABLE_SVG_DOM_OBJC_BINDINGS macro.

2013-04-06  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the WebKit2 build.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit):
        * NetworkProcess/NetworkResourceLoader.h:
        (NetworkResourceLoader): Removed a defunct function.

2013-04-05  Ed Bartosh  <bartosh@gmail.com>

        [WK2] --no-tiled-backing-store build fails because FloatPoint is not declared
        https://bugs.webkit.org/show_bug.cgi?id=113618

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/Plugin.h: Forward declared FloatPoint

2013-04-05  Geoffrey Garen  <ggaren@apple.com>

        Made USE(JSC) unconditional
        https://bugs.webkit.org/show_bug.cgi?id=114058

        Reviewed by Anders Carlsson.

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::WebMemorySampler::sampleWebKit):
        * config.h:

2013-04-05  Ed Bartosh  <bartosh@gmail.com>

        [EFL] --no-tiled-backing-store build fails because of not used #if USE(ACCELERATED_COMPOSITING)
        https://bugs.webkit.org/show_bug.cgi?id=113627

        Reviewed by Simon Fraser.

        Wrapped code with #if USE(ACCELERATED_COMPOSITING) to make it compilable
        with --no-tiled-backing-store build option:
        * UIProcess/API/C/efl/WKView.cpp:
        * UIProcess/API/efl/EvasGLContext.cpp:
        * UIProcess/API/efl/EvasGLContext.h:
        * UIProcess/API/efl/EvasGLSurface.cpp:
        * UIProcess/API/efl/EvasGLSurface.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::displayTimerFired):
        (EwkView::takeSnapshot):
        * UIProcess/API/efl/EwkView.h:
        (WebKit):
        (EwkView):
        * UIProcess/API/efl/SnapshotImageGL.cpp:
        * UIProcess/API/efl/SnapshotImageGL.h:
        * UIProcess/PageViewportController.cpp:
        * UIProcess/PageViewportController.h:
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didChangeContentsSize):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::didCommitLoad):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::didChangeViewportProperties):
        (WebKit::WebView::pageDidRequestScroll):
        (WebKit::WebView::didRenderFrame):
        (WebKit::WebView::pageTransitionViewportReady):

2013-04-05  Ed Bartosh  <bartosh@gmail.com>

        [EFL][WK2] --no-tiled-backing-store build fails because of not used #if USE(COORDINATED_GRAPHICS)
        https://bugs.webkit.org/show_bug.cgi?id=113629

        Reviewed by Simon Fraser.

        Wrapped code related to coordinated graphics with #if USE(COORDINATED_GRAPHICS)
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.cpp:
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::initialize):
        (WebKit):
        (WebKit::WebView::paintToCairoSurface):
        (WebKit::WebView::updateViewportSize):

2013-04-05  Timothy Hatcher  <timothy@apple.com>

        Allow the Web Inspector to use WebSQL.

        This fixes an exception on load in the Safari Web Inspector.

        https://webkit.org/b/114040
        rdar://problem/13581422

        Reviewed by Anders Carlsson.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::exceededDatabaseQuota): Added.
        (WebKit::WebInspectorProxy::platformCreateInspectorPage): Hook up exceededDatabaseQuota.

2013-04-04  Brady Eidson  <beidson@apple.com>

        Add SPI to get a copy of the context menu at a given point.
        <rdar://problem/13450908> and https://bugs.webkit.org/show_bug.cgi?id=113958

        Reviewed by Andy Estes.

        Add the new accessor: 
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::contextMenuAtPoint):
        * WebProcess/WebPage/WebPage.h:

        Expose the new SPI:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCopyContextMenuAtPoint):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2013-04-05  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] WebView should own page position and scale factor
        https://bugs.webkit.org/show_bug.cgi?id=111075

        Reviewed by Andreas Kling.

        View content position and content scale factor should belong to WebView
        rather than to EwkView as it decreases EwkView usage inside EFL-agnostic
        WebView and improves WebView encapsulation.

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

            New WKView API was added to set and get content scale factor.
            The view content scale factor is not the same as page scale factor:
            it always applies to content but not necessarily applies to the page.
            The view content scale factor is calculated by viewport controller
            and applies immediately for painting in UI process. Page scale factor
            is updated later after the frame is rendered to accomplish the pending
            scale change.

        (WKViewGetContentPosition):
        (WKViewSetContentPosition):

            New WKView API was added to set and get content position.
            Content position is set in UI units.

        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        (WebKit::PageViewportControllerClientEfl::setPageScaleFactor):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::paintToCairoSurface):
        (WebKit::WebView::transformToScene):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::pageDidRequestScroll):
        * UIProcess/efl/WebView.h:
        (WebKit::WebView::setContentScaleFactor):
        (WebKit::WebView::contentScaleFactor):
        (WebView):
        (WebKit::WebView::setContentPosition):
        (WebKit::WebView::contentPosition):

2013-04-05  Alberto Garcia  <agarcia@igalia.com>

        [GTK][WK2] WebKitLoaderClient: add missing initializers
        https://bugs.webkit.org/show_bug.cgi?id=112961

        Reviewed by Carlos Garcia Campos.

        There are two new attributes: pluginLoadPolicy and pluginDidFail.

        * UIProcess/API/gtk/WebKitLoaderClient.cpp:
        (attachLoaderClientToView):

2013-04-05  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Encapsulate view states set-up within WebView
        https://bugs.webkit.org/show_bug.cgi?id=110877

        Reviewed by Benjamin Poulain.

        View states set-up is encapsulated within WebView. This change
        reduces both usage of EwkView inside WebView class and usage of
        WebPageProxy inside EwkView class.

        New WKView API was added so that EwkView can define whether or not
        the view is visible and focused.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewIsFocused):
        (WKViewSetIsFocused):
        (WKViewIsVisible):
        (WKViewSetIsVisible):
        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (::handleEvent):
        (EwkView::handleEvasObjectShow):
        (EwkView::handleEwkViewFocusIn):
        (EwkView::handleEwkViewFocusOut):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::setFocused):
        (WebKit):
        (WebKit::WebView::setVisible):
        (WebKit::WebView::isViewFocused):
        (WebKit::WebView::isViewVisible):
        * UIProcess/efl/WebView.h:
        (WebKit::WebView::isFocused):
        (WebView):
        (WebKit::WebView::isVisible):

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

        [EFL][WK2] Add support for getting page contents as string
        https://bugs.webkit.org/show_bug.cgi?id=106752

        Reviewed by Andreas Kling.

        Modified ewk_view_page_contents_get() API to get page contents as string.
        EWK_PAGE_CONTENTS_TYPE_STRING is added to Ewk_Page_Contents_Type.
        Now, we can use both EWK_PAGE_CONTENTS_TYPE_MHTML and EWK_PAGE_CONTENTS_TYPE_STRING
        for getting page contents.

        * UIProcess/API/efl/ewk_view.cpp:
        (Ewk_Page_Contents_Context):
        (ewkViewPageContentsAsMHTMLCallback):
        (ewkViewPageContentsAsStringCallback):
        (ewk_view_page_contents_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (PageContentsAsMHTMLCallback):
        (PageContentsAsStringCallback):
        (TEST_F):

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

        [Cairo] Stop passing raw pointers to BitmapImage::create()
        https://bugs.webkit.org/show_bug.cgi?id=113945

        Reviewed by Martin Robinson.

        Pass a smart pointer in to BitmapImage::create() instead of a raw one
        for the cairo surface. The factory method prototype was updated for
        cairo in r147643.

        * Shared/cairo/ShareableBitmapCairo.cpp:
        (WebKit::ShareableBitmap::createImage):

2013-04-03  Dean Jackson  <dino@apple.com>

        Expose settings to disable plugin snapshotting autostart and primary detection
        https://bugs.webkit.org/show_bug.cgi?id=113918

        Reviewed by Tim Horton.

        Three new settings: snapshotAllPlugIns, primaryPlugInSnapshotDetectionEnabled and
        autostartOriginPlugInSnapshottingEnabled.
        These are exposed via WKPreferences (WebKit2 only, since that's the only port actively
        using the feature).

        * Shared/WebPreferencesStore.h: Add macros for new settings.
        * UIProcess/API/C/WKPreferences.cpp: Getters and setters for new settings.
        (WKPreferencesSetSnapshotAllPlugIns):
        (WKPreferencesGetSnapshotAllPlugIns):
        (WKPreferencesSetAutostartOriginPlugInSnapshottingEnabled):
        (WKPreferencesGetAutostartOriginPlugInSnapshottingEnabled):
        (WKPreferencesSetPrimaryPlugInSnapshotDetectionEnabled):
        (WKPreferencesGetPrimaryPlugInSnapshotDetectionEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Forward settings updates.
        (WebKit::WebPage::addPluginView): Don't run primary plugin detection if the setting is false.
        (WebKit::WebPage::didFinishLoad): Ditto.

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

        [Cairo] Fix canvas drawing of SVG-based patterns and remove NativeImageCairo
        https://bugs.webkit.org/show_bug.cgi?id=113929

        Reviewed by Martin Robinson.

        Update code now that PassNativeImagePtr is now a typedef to PassRefPtr<cairo_surface_t>
        instead of NativeImageCairo*.

        * Shared/gtk/ArgumentCodersGtk.cpp:
        (CoreIPC::decodeImage):
        * UIProcess/API/C/cairo/WKIconDatabaseCairo.cpp:
        (WKIconDatabaseTryGetCairoSurfaceForURL):
        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp:
        (getIconSurfaceSynchronously):

2013-04-04  Sze Howe Koh  <szehowe.koh@gmail.com>

        [Qt] docs: Fix module name format
        https://bugs.webkit.org/show_bug.cgi?id=113209

        Reviewed by Jocelyn Turcotte.

        Make QDoc-generated documentation follow the conventions at
        http://qt-project.org/wiki/Spelling_Module_Names_in_Qt_Documentation

        * UIProcess/API/qt/qquickwebview.cpp:

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

        [WK2][EFL] WebView should own view size
        https://bugs.webkit.org/show_bug.cgi?id=110753

        Reviewed by Andreas Kling.

        WebView owns view size. WKViewGetSize and WKViewSetSize API
        is exposed accordingly. Usage of EFL-specific ewkView inside
        toolkit-agnostic WebView class is reduced.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewGetSize):
        (WKViewSetSize):
        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setDeviceScaleFactor):
        (EwkView::size):
        (EwkView::deviceSize):
        (EwkView::scheduleUpdateDisplay):
        (EwkView::handleEvasObjectCalculate):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setSize):
        (WebKit):
        (WebKit::WebView::paintToCurrentGLContext):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::viewSize):
        (WebKit::WebView::dipSize):
        * UIProcess/efl/WebView.h:
        (WebView):
        (WebKit::WebView::size):

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

        Don't try to set the exception port for server connections
        https://bugs.webkit.org/show_bug.cgi?id=113910
        <rdar://problem/11248925>

        Reviewed by Darin Adler.

        Treat a SetExceptionPort message to the server connection as an invalid message.

        * Platform/CoreIPC/mac/ConnectionMac.cpp:
        (CoreIPC::Connection::receiveSourceEventHandler):

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

        <http://webkit.org/b/113898> Eliminate some code duplication by introducing an array of handlers to register / unregister.

        Reviewed by Antti Koivisto.

        * UIProcess/mac/WebContextMac.mm:
        (OcclusionNotificationHandler): Structure containing the notification name, type and handler.
        (WebKit::registerOcclusionNotificationHandlers): Register all of the handlers in the array.
        (WebKit::unregisterOcclusionNotificationHandlers): Unregister all of the handlers in the array.

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

        Enable process suppression when no windows in the application have drawn recently.
        <http://webkit.org/b/113854> / <rdar://problem/13540351>

        Reviewed by Darin Adler.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::applicationWindowModificationsStarted): Note that modifications are no longer stopped.
        (WebKit::applicationWindowModificationsStopped): Note that modifications have stopped.
        (WebKit::registerOcclusionNotificationHandlers): Register handlers for the start and stop notifications.
        (WebKit::unregisterOcclusionNotificationHandlers): Unregister handlers for the start and stop notifications.
        (WebKit::WebContext::canEnableProcessSuppressionForNetworkProcess): Allow suppression if the application is occluded
        or the application has not drawn recently.
        (WebKit::WebContext::canEnableProcessSuppressionForWebProcess): Ditto.
        (WebKit::WebContext::canEnableProcessSuppressionForGlobalChildProcesses): Ditto.

2013-04-03  Dean Jackson  <dino@apple.com>

        Cross fade into restarted plugin
        https://bugs.webkit.org/show_bug.cgi?id=113868

        Reviewed by Tim Horton.

        Add a new plugin process type that indicates this is a plugin that
        has been restarted from snapshotting. On Apple ports, this allows
        us to animate the appearance of the plugin so that it crossfades
        with the snapshot. Other ports will have to add their own fading.

        * PluginProcess/PluginProcess.h: New Type: TypeRestartedProcess.
        * WebProcess/Plugins/Netscape/mac/PluginProxyMac.mm:
        (WebKit::PluginProxy::pluginLayer): When the plugin's CALayer is created, if it
            is a restarted plugin, add an opacity animation to fade it in.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Mark restarted plugins with the new process type.

2013-04-03  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13564588> Add a temporary workaround for a build failure.

        Fix suggested by Mark Rowe.

        * Shared/mac/ChildProcessMac.mm:

2013-04-03  Alexey Proskuryakov  <ap@apple.com>

        [WK2] XMLHttpRequest upload events don't work with NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=113887

        Reviewed by Brady Eidson.

        Just forward didSendData client call to WebProcess.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didSendData):
        (WebKit::NetworkResourceLoader::didCancelAuthenticationChallenge): Tweaked a comment.
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didSendData):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:

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

        Remove code for Mac 10.5 and earlier from WTF and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=113844

        Reviewed by Benjamin Poulain.

        Removed the code for 10.5 and removed if-def for 10.6.

        * Shared/mac/PasteboardTypes.mm:
        (WebKit::PasteboardTypes::forEditing):

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

        Be more robust against empty message receiver names in incoming messages
        https://bugs.webkit.org/show_bug.cgi?id=113833
        <rdar://problem/13284433>

        Reviewed by Beth Dakin.

        Turns out that we either send or receive messages whose receiver names are empty. This leads to bad things when we try to look
        up the message receiver name in a hash map since the empty name is used to represent an empty hash map value.

        * Platform/CoreIPC/Connection.cpp:
        (CoreIPC::Connection::addWorkQueueMessageReceiverOnConnectionWorkQueue):
        Sprinkle assertions.

        (CoreIPC::Connection::processIncomingMessage):
        If the message receiver name is not valid, make sure to call didReceiveInvalidMessage on the client thread.

        (CoreIPC::Connection::dispatchDidReceiveInvalidMessage):
        Add new helper function.

2013-04-02  Simon Cooper  <scooper@apple.com>

        [Mac][WK2] Don’t let plug-ins use System V shared memory
        https://bugs.webkit.org/show_bug.cgi?id=113466
        <rdar://problem/13159030>

        Reviewed, tweaked and landed by Alexey Proskuryakov.

        Instead of allowing plug-ins to request System V shm, give them a
        temporary but usable alternative if they try to request it.

        * PluginProcess/mac/PluginProcessShim.mm:

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

        Add WKContextSetInvalidMessageFunction
        https://bugs.webkit.org/show_bug.cgi?id=113820
        <rdar://problem/12679817>

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetInvalidMessageFunction):
        Call WebContext::didReceiveInvalidMessage.

        * UIProcess/API/C/WKContextPrivate.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setInvalidMessageCallback):
        Set the global variable.

        (WebKit::WebContext::didReceiveInvalidMessage):
        Construct a message name string and call the invalid message callback.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didReceiveInvalidMessage):
        Call WebContext::didReceiveInvalidMessage.

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

        [Mac] Remove WKCreateNSURLConnectionDelegateProxy
        https://bugs.webkit.org/show_bug.cgi?id=113810

        Reviewed by Anders Carlsson.

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

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

        <rdar://problem/13551119> [WK2] Crashes in NetworkProcess when canceling loads
        https://bugs.webkit.org/show_bug.cgi?id=113803

        Reviewed by Darin Adler.

        * Shared/Downloads/mac/DownloadMac.mm: (WebKit::Download::startWithHandle):
        Just pass nil instead of proxy.

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

        [WK2] Remove repeating code in declaration of WK2 API classes
        https://bugs.webkit.org/show_bug.cgi?id=112782

        Reviewed by Benjamin Poulain.

        The following two lines of code had been repeated in every WK2 API
        object class:
        1) static const Type APIType = SomeAPIType;
        2) virtual Type type() const { return APIType; }

        This patch introduces template class 'TypedAPIObject' inherited
        from WebKit::APIObject and it contains the common functionality. 
        So the new pattern is that API object classes are inherited from
        TypedAPIObject (rather than from WebKit::APIObject directly) passing
        the corresponding API object type as a template parameter.

        The existing API object classes are modified accordingly to the
        proposed pattern.

        * Shared/APIObject.h:
        (WebKit):
        (TypedAPIObject):
        (WebKit::TypedAPIObject::~TypedAPIObject):
        (WebKit::TypedAPIObject::TypedAPIObject):
        * Shared/ImmutableArray.h:
        (ImmutableArray):
        * Shared/ImmutableDictionary.h:
        (ImmutableDictionary):
        * Shared/WebArchive.h:
        (WebArchive):
        * Shared/WebArchiveResource.h:
        (WebArchiveResource):
        * Shared/WebBackForwardListItem.h:
        (WebBackForwardListItem):
        * Shared/WebBatteryStatus.h:
        (WebBatteryStatus):
        * Shared/WebCertificateInfo.h:
        * Shared/WebConnection.h:
        (WebConnection):
        * Shared/WebContextMenuItem.h:
        (WebContextMenuItem):
        * Shared/WebData.h:
        * Shared/WebError.h:
        (WebKit::WebError::errorCode):
        * Shared/WebGeolocationPosition.h:
        (WebGeolocationPosition):
        * Shared/WebGeometry.h:
        * Shared/WebGraphicsContext.h:
        (WebGraphicsContext):
        * Shared/WebHitTestResult.h:
        * Shared/WebImage.h:
        (WebImage):
        * Shared/WebNetworkInfo.h:
        (WebNetworkInfo):
        * Shared/WebNumber.h:
        * Shared/WebOpenPanelParameters.h:
        (WebOpenPanelParameters):
        * Shared/WebRenderLayer.h:
        * Shared/WebRenderObject.h:
        * Shared/WebSecurityOrigin.h:
        * Shared/WebSerializedScriptValue.h:
        (WebSerializedScriptValue):
        * Shared/WebString.h:
        * Shared/WebURL.h:
        * Shared/WebURLRequest.h:
        (WebURLRequest):
        * Shared/WebURLResponse.h:
        (WebURLResponse):
        * Shared/WebUserContentURLPattern.h:
        * Shared/mac/ObjCObjectGraph.h:
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:
        (AuthenticationChallengeProxy):
        * UIProcess/Authentication/AuthenticationDecisionListener.h:
        (AuthenticationDecisionListener):
        * UIProcess/Authentication/WebCredential.h:
        (WebCredential):
        * UIProcess/Authentication/WebProtectionSpace.h:
        (WebProtectionSpace):
        * UIProcess/Downloads/DownloadProxy.h:
        (DownloadProxy):
        * UIProcess/GeolocationPermissionRequestProxy.h:
        (GeolocationPermissionRequestProxy):
        * UIProcess/Notifications/NotificationPermissionRequest.h:
        (NotificationPermissionRequest):
        * UIProcess/Notifications/WebNotification.h:
        (WebNotification):
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        (WebNotificationManagerProxy):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        (WebPluginSiteDataManager):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        (WebApplicationCacheManagerProxy):
        * UIProcess/WebBackForwardList.h:
        (WebBackForwardList):
        * UIProcess/WebBatteryManagerProxy.h:
        (WebBatteryManagerProxy):
        * UIProcess/WebContext.h:
        (WebContext):
        * UIProcess/WebCookieManagerProxy.h:
        (WebCookieManagerProxy):
        * UIProcess/WebDatabaseManagerProxy.h:
        (WebDatabaseManagerProxy):
        * UIProcess/WebEditCommandProxy.h:
        (WebEditCommandProxy):
        * UIProcess/WebFrameProxy.h:
        (WebFrameProxy):
        * UIProcess/WebGeolocationManagerProxy.h:
        (WebGeolocationManagerProxy):
        * UIProcess/WebGrammarDetail.h:
        (WebGrammarDetail):
        * UIProcess/WebIconDatabase.h:
        (WebIconDatabase):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/WebKeyValueStorageManagerProxy.h:
        (WebKeyValueStorageManagerProxy):
        * UIProcess/WebMediaCacheManagerProxy.h:
        (WebMediaCacheManagerProxy):
        * UIProcess/WebNavigationData.h:
        (WebNavigationData):
        * UIProcess/WebNetworkInfoManagerProxy.h:
        (WebNetworkInfoManagerProxy):
        * UIProcess/WebOpenPanelResultListenerProxy.h:
        (WebOpenPanelResultListenerProxy):
        * UIProcess/WebPageGroup.h:
        (WebPageGroup):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::WebPreferences):
        * UIProcess/WebPreferences.h:
        (WebPreferences):
        * UIProcess/WebResourceCacheManagerProxy.h:
        (WebResourceCacheManagerProxy):
        * UIProcess/WebTextChecker.h:
        (WebTextChecker):
        * UIProcess/WebVibrationProxy.h:
        (WebVibrationProxy):
        * UIProcess/efl/WebPopupItemEfl.h:
        (WebPopupItemEfl):
        * UIProcess/efl/WebView.h:
        * UIProcess/soup/WebSoupRequestManagerProxy.h:
        (WebSoupRequestManagerProxy):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        (InjectedBundleNodeHandle):
        * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.h:
        (InjectedBundleRangeHandle):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (InjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.h:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.h:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.h:
        (InjectedBundleDOMWindowExtension):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.h:
        * WebProcess/InjectedBundle/InjectedBundleNavigationAction.h:
        (InjectedBundleNavigationAction):
        * WebProcess/InjectedBundle/InjectedBundleScriptWorld.h:
        (InjectedBundleScriptWorld):
        * WebProcess/WebPage/PageOverlay.h:
        (PageOverlay):
        * WebProcess/WebPage/WebFrame.h:
        (WebFrame):
        * WebProcess/WebPage/WebInspector.h:
        (WebInspector):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/WebPageGroupProxy.h:
        (WebPageGroupProxy):

2013-04-01  Timothy Hatcher  <timothy@apple.com>

        Allow changing Web Inspector dock sides without undocking first.

        https://webkit.org/b/113661
        rdar://problem/13543127

        Reviewed by Joseph Pecoraro.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage): Send AttachedBottom and
        AttachedRight messages so InspectorFrontendClientLocal knows which side we
        are attached.

        (WebKit::WebInspectorProxy::canAttach): If we are already attached, allow
        attaching again to allow switching sides.

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

        Nor this! (Who reviewed this anyway!)

        * WebProcess/Storage/StorageNamespaceProxy.cpp:
        (WebKit::StorageNamespaceProxy::storageArea):

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

        Didn't mean to commit this!

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:

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

        https://bugs.webkit.org/show_bug.cgi?id=113721
        <rdar://problem/13549181> REGRESSION (r146929): HTTP auth credentials not reused during session

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorage): Added an override that
        we still need. It's not great, but causes no trouble for NetworkProcess.
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorageAsync): Implement in
        terms of sync version to avoid duplicating logic.

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

        Apply changes from storage events locally
        https://bugs.webkit.org/show_bug.cgi?id=111502

        Reviewed by Sam Weinig.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::StorageAreaProxy):
        Store the security origin as a member variable.

        (WebKit::StorageAreaProxy::dispatchStorageEvent):
        Set the item and call the appropriate event dispatch function.
    
        (WebKit::StorageAreaProxy::dispatchSessionStorageEvent):
        (WebKit::StorageAreaProxy::dispatchLocalStorageEvent):
        Add stubs.

        * WebProcess/Storage/StorageAreaProxy.h:

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

        <rdar://problem/13490123> Sandbox extension tracking is incorrect when restoring a session
        https://bugs.webkit.org/show_bug.cgi?id=113709

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad): Added an assertion
        to catch extension tracking logic errors that could result in giving an extension to
        non-local pages.
        (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad): Just like
        below, clearing m_pendingProvisionalSandboxExtension appears incorrect, even though
        I am not aware of any scenarios where this happens in practice.
        (WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad): The load may
        be failing exactly because a new one cancels it, so we shouldn't be preventing
        the new one from using its extension.

2013-04-01  Brady Eidson  <beidson@apple.com>

        SharedMemory release build hardening.
        <rdar://problem/13546860> and https://bugs.webkit.org/show_bug.cgi?id=113710

        Reviewed by Anders Carlsson.

        Successful creation of a memory entry with a size less than the size we requested should be treated
        as a failure to create the SharedMemory object.

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::createFromVMBuffer): Early return if the port we get is bogus for our needs.
        (WebKit::SharedMemory::createHandle): Ditto.
        (WebKit::SharedMemory::create): Guarantee we pass valid input in to mach_vm_map.

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

        Unreviewed buildfix after r147260.

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

2013-03-29  Seokju Kwon  <seokju.kwon@gmail.com>

        [EFL] Unreviewed build fix after r147251
        https://bugs.webkit.org/show_bug.cgi?id=113631

        Unreviewed build fix.

        Add NETWORK_PROCESS guard.

        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins):

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

        Crash when "willSendRequest" causes the ResourceLoader to be cancelled.
        <rdar://problem/13531679> and https://bugs.webkit.org/show_bug.cgi?id=113616

        Reviewed by Alexey Proskuryakov.

        These callbacks to the WebCore ResourceLoader can cause the WebResourceLoader to be destroyed.
        A RefPtr<> protector fixes that.

        Additionally we can invalidate the WebResourceLoader to avoid unnecessary callbacks to the NetworkProcess.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::remove): Call detachFromCoreLoader() on a removed WebResourceLoader.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::detachFromCoreLoader): Clear out the ResourceLoader pointer.
        (WebKit::WebResourceLoader::willSendRequest): Protect this, and don't message back to the NetworkProcess if its not needed.
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace): Ditto
        (WebKit::WebResourceLoader::didReceiveResource): Paranoid hardening - Protect this before delivering the data to the WebCore
          ResourceLoader, and null check it before delivering the "didFinishLoader" call.
        * WebProcess/Network/WebResourceLoader.h:

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

        Should never send events to plugins waiting on asynchronous initialization.
        <rdar://problem/13538945> and https://bugs.webkit.org/show_bug.cgi?id=113612

        Reviewed by Anders Carlsson.

        Sending mouse and keyboard events to a plugin in the middle of asynchronous initialization is silly.

        A quick audit of the sendSync() messages in PluginProxy suggests the following 8 can just have an early return:

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleMouseEvent):
        (WebKit::PluginProxy::handleWheelEvent):
        (WebKit::PluginProxy::handleMouseEnterEvent):
        (WebKit::PluginProxy::handleMouseLeaveEvent):
        (WebKit::PluginProxy::handleKeyboardEvent):
        (WebKit::PluginProxy::handleEditingCommand):
        (WebKit::PluginProxy::isEditingCommandEnabled):
        (WebKit::PluginProxy::handlesPageScaleFactor):

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

        Should never send events to plugins waiting on asynchronous initialization.
        <rdar://problem/13538945> and https://bugs.webkit.org/show_bug.cgi?id=113612

        Reviewed by Anders Carlsson.

        Sending mouse and keyboard events to a plugin in the middle of asynchronous initialization is silly.

        A quick audit of the sendSync() messages in PluginProxy suggests the following 8 can just have an early return:

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleMouseEvent):
        (WebKit::PluginProxy::handleWheelEvent):
        (WebKit::PluginProxy::handleMouseEnterEvent):
        (WebKit::PluginProxy::handleMouseLeaveEvent):
        (WebKit::PluginProxy::handleKeyboardEvent):
        (WebKit::PluginProxy::handleEditingCommand):
        (WebKit::PluginProxy::isEditingCommandEnabled):
        (WebKit::PluginProxy::handlesPageScaleFactor):

2013-03-29  Alexey Proskuryakov  <ap@apple.com>

        Expose FeatureObserver data to WebKit clients
        https://bugs.webkit.org/show_bug.cgi?id=113613

        Reviewed by Sam Weinig.

        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::featuresUsedInPage):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        Added a new injected bundle client call, featuresUsedInPage.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):
        (WebKit::WebPage::didCommitLoad):
        (WebKit::WebPage::reportUsedFeatures):
        * WebProcess/WebPage/WebPage.h:
        Report features used in a page when navigating away, or when closing.

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

        Crash when "willSendRequest" causes the ResourceLoader to be cancelled.
        <rdar://problem/13531679> and https://bugs.webkit.org/show_bug.cgi?id=113616

        Reviewed by Alexey Proskuryakov.

        These callbacks to the WebCore ResourceLoader can cause the WebResourceLoader to be destroyed.
        A RefPtr<> protector fixes that.

        Additionally we can invalidate the WebResourceLoader to avoid unnecessary callbacks to the NetworkProcess.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::remove): Call detachFromCoreLoader() on a removed WebResourceLoader.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::detachFromCoreLoader): Clear out the ResourceLoader pointer.
        (WebKit::WebResourceLoader::willSendRequest): Protect this, and don't message back to the NetworkProcess if its not needed.
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace): Ditto
        (WebKit::WebResourceLoader::didReceiveResource): Paranoid hardening - Protect this before delivering the data to the WebCore
          ResourceLoader, and null check it before delivering the "didFinishLoader" call.
        * WebProcess/Network/WebResourceLoader.h:

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

        Should never send events to plugins waiting on asynchronous initialization.
        <rdar://problem/13538945> and https://bugs.webkit.org/show_bug.cgi?id=113612

        Reviewed by Anders Carlsson.

        Sending mouse and keyboard events to a plugin in the middle of asynchronous initialization is silly.

        A quick audit of the sendSync() messages in PluginProxy suggests the following 8 can just have an early return:

        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::handleMouseEvent):
        (WebKit::PluginProxy::handleWheelEvent):
        (WebKit::PluginProxy::handleMouseEnterEvent):
        (WebKit::PluginProxy::handleMouseLeaveEvent):
        (WebKit::PluginProxy::handleKeyboardEvent):
        (WebKit::PluginProxy::handleEditingCommand):
        (WebKit::PluginProxy::isEditingCommandEnabled):
        (WebKit::PluginProxy::handlesPageScaleFactor):

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

        "Empty cache..." clears the disk cache from each WebProcess.
        <rdar://problem/12456652> and https://bugs.webkit.org/show_bug.cgi?id=113603

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::NetworkProcess):
        (WebKit::NetworkProcess::terminate): Override ChildProcess::terminate to allow us to finish clearing the cache.
        * NetworkProcess/NetworkProcess.h:

        * NetworkProcess/NetworkProcess.messages.in: Add the ClearCacheForAllOrigins message.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::clearCacheForAllOrigins): Clear the disk cache.
        (WebKit::NetworkProcess::platformTerminate): Wait for the clear to complete.

        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::clearCacheForAllOrigins): Message the network process, also.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformClearResourceCaches): Don't clear the disk cache if we use the network process.

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

        We leak NetworkConnectionToWebProcess objects.
        <rdar://problem/13393118> and https://bugs.webkit.org/show_bug.cgi?id=113551

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose): Remove this from the global set
          of NetworkConnectionToWebProcess objects.

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

        Resources are never revalidated/reloaded if a cached response exists on disk.
        <rdar://problem/13479890> and https://bugs.webkit.org/show_bug.cgi?id=113542

        Reviewed by Alexey Proskuryakov.

        Trying to get a cached resource in didReceiveResponse and then aborting the load
        meant we never performed any new loads.

        We can check and see if the data is cached data inside didReceiveBuffer, instead.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::didReceiveResponse): Don't try for cached resources here.
        (WebKit::NetworkResourceLoader::didReceiveData): This callback should never be used.
        (WebKit::NetworkResourceLoader::didReceiveBuffer): Try to see if this data objected represents
          a file based mmaped buffer.
        * NetworkProcess/NetworkResourceLoader.h:

        Refactor these utility functions to start from either a CFURLCachedResponse or a SharedBuffer:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (CFCachedURLResponseGetMemMappedData):
        (CFURLCacheIsMemMappedData):
        (WebKit::tryGetShareableHandleFromCFData):
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromCFURLCachedResponse):
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):

2013-03-28  Tim Horton  <timothy_horton@apple.com>

        [wk2] REGRESSION (r125500): WebFrameLoaderClient's active m_pluginView can be zeroed by PluginDocuments leaving the page cache
        https://bugs.webkit.org/show_bug.cgi?id=113430
        <rdar://problem/12729564>

        Reviewed by Brady Eidson.

        http://trac.webkit.org/changeset/147152 was wrong, and should have been
        (as the ChangeLog stated) testing the argument to redirectDataToPlugin,
        not the value of m_pluginView.

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

2013-03-28  Tim Horton  <timothy_horton@apple.com>

        [wk2] REGRESSION (r125500): WebFrameLoaderClient's active m_pluginView can be zeroed by PluginDocuments leaving the page cache
        https://bugs.webkit.org/show_bug.cgi?id=113430
        <rdar://problem/12729564>

        Reviewed by Brady Eidson.

        Ignore redirectDataToPlugin(0), which is only called from PluginDocument::detach(),
        and only after r125500. Otherwise, PluginDocuments that are put into the page cache
        but leave later can clear a totally different and legitimate PluginView from the
        WebFrameLoaderClient, causing data to be lost and PluginDocument loads to stall.

        This restores our behavior to the pre-r125500 state, which should be fine, as we
        clear WebFrameLoaderClient's m_pluginView when the load fails or finishes. This
        matches the changes made in r125500 for every platform other than Chromium and WebKit2.

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

2013-03-28  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: shouldUsePDFPlugin can't use pdfLayerControllerClass() because it asserts if it's not available
        https://bugs.webkit.org/show_bug.cgi?id=113533
        <rdar://problem/13528720>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldUsePDFPlugin):
        Move shouldUsePDFPlugin to WebPageMac, where it belongs, and explicitly look up PDFLayerController
        instead of using pdfLayerControllerClass(), which ASSERT()s if it isn't available.

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

        Reduce PluginProcess lifetime.
        <rdar://problem/12465479> and https://bugs.webkit.org/show_bug.cgi?id=113523

        Reviewed by Sam Weinig.

        Lower the minimum process lifetime from 30 minutes to 2 minutes.
        Lower the "shutdown after last plugin goes away" period from 10 minutes to 1 minute.

        * UIProcess/Plugins/PluginProcessProxy.cpp:

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

        [GTK] Build GTK-specific, non-layer-violating source code into WebCore-independent libPlatformGtk.la
        https://bugs.webkit.org/show_bug.cgi?id=112546

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Reference the platform_webcore_cppflags and GTK, libsecret and libsoup dependencies' cflags amongst the
        libPlatformGtk2's CPPFLAGS.
        * Scripts/generate-forwarding-headers.pl: Remove the Platform framework from the list of the frameworks to be searched
        for forwarding headers, it's at the moment not necessary to be included.
        * Shared/gtk/ArgumentCodersGtk.cpp: Adjust the forwarding header for GtkVersioning.h that's been moved back under the
        WebCore framework.
        * Shared/gtk/WebEventFactory.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Ditto.
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: Ditto.

2013-03-27  Tim Horton  <timothy_horton@apple.com>

        Unreviewed Qt build fix after http://trac.webkit.org/changeset/147067.

        * WebProcess/WebPage/WebPage.cpp:

2013-03-27  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Enable PDFPlugin only if its dependencies exist on the system
        https://bugs.webkit.org/show_bug.cgi?id=113372
        <rdar://problem/12685301>

        Reviewed by Alexey Proskuryakov.

        * Shared/mac/PDFKitImports.h: Wrap in #if PLATFORM(MAC).
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin): Use shouldUsePDFPlugin.
        (WebKit::WebPage::shouldUsePDFPlugin): If the PDFPlugin setting is enabled but PDFLayerController is not available, don't use PDFPlugin.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Add shouldUsePDFPlugin
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformPreferencesDidChange): Use shouldUsePDFPlugin.

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

        [WebKit2] Need SPI to determine whether a plug-in is blocked
        https://bugs.webkit.org/show_bug.cgi?id=113463

        Reviewed by Anders Carlsson.

        Add new SPI, WKContextCopyPlugInInfoForBundleIdetifier, to get data about a plug-in,
        including whether it is blocked by x-protect.

        * UIProcess/WebLoaderClient.cpp:
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toWKPluginLoadPolicy):
        (WebKit::toPluginModuleLoadPolicy):
        Move to a shared location.

        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextIsPlugInUpdateAvailable):
        (WKPlugInInfoPathKey):
        (WKPlugInInfoBundleIdentifierKey):
        (WKPlugInInfoVersionKey):
        (WKPlugInInfoLoadPolicyKey):
        (WKPlugInInfoUpdatePastLastBlockedVersionIsKnownAvailableKey):
        (WKContextCopyPlugInInfoForBundleIdetifier):
        Add new SPI and dictionary keys.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPluginWithBundleIdentifer):
        * UIProcess/Plugins/PluginInfoStore.h:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::findPluginWithBundleIdentifer):
        Add function to lookup plug-ins by bundle identifier.

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

        WKBundlePagePrivateMac.h is not being exported
        https://bugs.webkit.org/show_bug.cgi?id=113470
        -and corresponding-
        <rdar://problem/13522909>

        Reviewed by Sam Weinig.

        Mark it as private instead of project.
        * WebKit2.xcodeproj/project.pbxproj:

2013-03-26  Beth Dakin  <bdakin@apple.com>

        Need WK2 API to give a WebView a header and footer
        https://bugs.webkit.org/show_bug.cgi?id=113352
        -and corresponding-
        <rdar://problem/13383835>

        Reviewed by Simon Fraser.

        New API allows setting and getting layers for a header and footer.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/c/mac: Added.
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.h: Added.
        * WebProcess/InjectedBundle/API/c/mac/WKBundlePagePrivateMac.mm: Added.
        (WKBundlePageGetHeaderLayer):
        (WKBundlePageSetHeaderLayer):
        (WKBundlePageGetFooterLayer):
        (WKBundlePageSetFooterLayer):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setTopOverhangImage):
        (WebKit::WebPage::setBottomOverhangImage):
        (WebKit):
        (WebKit::WebPage::getHeaderLayer):
        (WebKit::WebPage::setHeaderLayerWithHeight):
        (WebKit::WebPage::getFooterLayer):
        (WebKit::WebPage::setFooterLayerWithHeight):

2013-03-27  Jer Noble  <jer.noble@apple.com>

        Going full screen and cancelling gets system into a weird state
        https://bugs.webkit.org/show_bug.cgi?id=113445

        Reviewed by Eric Carlson.

        Replace an array of BOOL member variables to track full screen state with a single enum, and
        add state tracking for the "waiting to enter" and "waiting to exit" states. Use this new,
        more specific enum to be more stringent about the state when responding to WebProcess
        messages. Also only set the placeholder view's target once in full screen mode.

        * UIProcess/mac/WKFullScreenWindowController.h:
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController isFullScreen]): Yes when in full screen, entering full screen,
            or waiting to enter full screen.
        (-[WKFullScreenWindowController cancelOperation:]): Only requestExitFullScreen() if a watchdog
            has not already been made active.
        (-[WKFullScreenWindowController enterFullScreen:]): Use the new state variable.
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:WebCore::finalFrame:WebCore::]): Ditto.
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]): Ditto. Set the placeholder target.
        (-[WKFullScreenWindowController exitFullScreen]): Ditto. Clear the placeholder target.
        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:WebCore::finalFrame:WebCore::]): Ditto.
        (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]): Ditto.
        (-[WKFullScreenWindowController performClose:]): Ditto.
        (-[WKFullScreenWindowController close]): Ditto.
        (-[WKFullScreenWindowController _startEnterFullScreenAnimationWithDuration:]): Ditto.

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

        Blind attempt at fixing the release build.

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync):

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

        Mem mapped resource data improvements.
        <rdar://problem/13196481> and https://bugs.webkit.org/show_bug.cgi?id=113422

        Reviewed by Alexey Proskuryakov (and looked over by Geoff Garen).

        Remove timer-based approach support code:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::abortInProgressLoad):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        * NetworkProcess/NetworkResourceLoader.h:

        Add an object to encapsulate monitoring a resource going in to the disk cache.
        It listens for a callback on the cached response indicating it is disk backed
        and also sets a timeout so we don't keep the monitor alive and waiting forever.
        * NetworkProcess/mac/DiskCacheMonitor.h: Added.
        (WebKit::DiskCacheMonitor::destinationID):
        (WebKit::DiskCacheMonitor::connectionToWebProcess):
        (WebKit::DiskCacheMonitor::resourceRequest):
        * NetworkProcess/mac/DiskCacheMonitor.mm: Added.
        (CFCachedURLResponseSetBecameFileBackedCallBackBlock):
        (WebKit::monitorFileBackingStoreCreation):
        (WebKit::DiskCacheMonitor::DiskCachingMonitor):
        (WebKit::DiskCacheMonitor::connection):

        Refactoring and monitor certain cached responses:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (CFCachedURLResponseGetMemMappedData):
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromCFURLCachedResponse): Use CFCachedURLResponseGetMemMappedData
          to explicitly get an mem-mapped data object.
        (WebKit::NetworkResourceLoader::tryGetShareableHandleForResource):
        (WebKit::NetworkResourceLoader::willCacheResponseAsync): If the resource is over the minimum
          size then set up a disk caching monitor.

        * WebKit2.xcodeproj/project.pbxproj:

2013-03-26  Timothy Hatcher  <timothy@apple.com>

        Add support for dock-to-right of the Web Inspector in the Mac port.

        Unfortunately this requires Safari changes, so it is disabled in the nightly builds.

        https://webkit.org/b/113341
        rdar://problem/10368152

        Reviewed by Joseph Pecoraro.

        * Resources/Dock.pdf: Removed.
        * Resources/DockBottom.pdf: Added.
        * Resources/DockRight.pdf: Added.
        * Shared/WebPreferencesStore.h:
        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        (WebKit::WebInspectorProxy::attachBottom):
        (WebKit::WebInspectorProxy::attachRight):
        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        (WebKit::WebInspectorProxy::setAttachedWindowWidth):
        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::canAttach):
        * UIProcess/WebInspectorProxy.h:
        (WebInspectorProxy):
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter attachRight:]):
        (-[WKWebInspectorProxyObjCAdapter attachBottom:]):
        (-[WKWebInspectorWindow _cursorForResizeDirection:]):
        (-[WKWebInspectorWindow _customTitleFrame]):
        (WebKit::createDockButton):
        (WebKit::WebInspectorProxy::createInspectorWindow):
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        (WebKit::WebInspectorProxy::platformAttachAvailabilityChanged):
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange):
        (WebKit::WebInspectorProxy::platformInspectedWindowWidth):
        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowHeight):
        (WebKit::WebInspectorProxy::platformSetAttachedWindowWidth):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        (WebKit::WebInspectorFrontendClient::attachWindow):
        (WebKit::WebInspectorFrontendClient::setAttachedWindowWidth):
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        (WebInspectorFrontendClient):
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::attachBottom):
        (WebKit::WebInspector::attachRight):
        (WebKit::WebInspector::setAttachedWindowWidth):
        (WebKit::WebInspector::attachedBottom):
        (WebKit::WebInspector::attachedRight):
        (WebKit::WebInspector::detached):
        * WebProcess/WebPage/WebInspector.h:
        (WebInspector):
        * WebProcess/WebPage/WebInspector.messages.in:

2013-03-27  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [CoordGfx] Support to share GraphicsSurface flags with client.
        https://bugs.webkit.org/show_bug.cgi?id=112982

        Reviewed by Noam Rosenthal.

        Covered by existing WebGL tests.

        This patch adds support to pass GraphicsSurface flags
        during it's client creation.

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

2013-03-26  Hayato Ito  <hayato@chromium.org>

        Allow ShadowContents in HitTests by default.
        https://bugs.webkit.org/show_bug.cgi?id=113171

        Reviewed by Dimitri Glazkov.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::hitTest):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::highlightPotentialActivation):
        (WebKit::WebPage::findZoomableAreaForPoint):
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::shouldDelayWindowOrderingEvent):
        (WebKit::WebPage::acceptsFirstMouse):

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

        [ca] Tell CA to clean up unused resources if a given WebProcess won't be drawing
        https://bugs.webkit.org/show_bug.cgi?id=107539
        <rdar://problem/13032692>

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Update WebCoreSystemInterface.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initially move the Page out of the window if necessary;
        Page defaults to in-window, which is wrong in many cases - we depend on
        Page::isInWindow being accurate to decide whether WebPage::setIsInWindow is actually
        a state change or not.
        (WebKit::WebPage::setIsInWindow):
        * WebProcess/WebProcess.cpp: Inform WebProcess when we go on/off screen.
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::pageDidMoveOnscreen): Keep track of the number of on-screen pages in this process.
        (WebKit::WebProcess::pageWillMoveOffscreen): If the number of on-screen pages drops to zero,  clean up unused rendering resources.
        * WebProcess/WebProcess.h:

2013-03-26  Dean Jackson  <dino@apple.com>

        When a primary plugin is restarted, also start similar plugins
        https://bugs.webkit.org/show_bug.cgi?id=113265

        Reviewed by Tim Horton.

        Remember the origin of the primary plugin, so that we can
        autostart anything that is similar.

        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::WebPlugInClient): Keep a pointer to the WebPage.
        (WebKit::WebPlugInClient::shouldAutoStartFromOrigin): Pass the page onto the process.
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        (WebPlugInClient): New member variable for the WebPage we were created with.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn): Remember the origin information
            for the primary plugin.
        (WebKit::WebPage::matchesPrimaryPlugIn): Returns true if we're seeing something that
            looks like the primary plugin.
        * WebProcess/WebPage/WebPage.h: New method matchesPrimaryPlugIn.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::shouldPlugInAutoStartFromOrigin): Check if the page thinks this is
            the primary plugin.
        * WebProcess/WebProcess.h: Accept a reference to the page in shouldPlugInAutoStartFromOrigin.

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

        Follow-up to:
        <rdar://problem/13194263> Crashes in NetworkProcess due to threading issues
        https://bugs.webkit.org/show_bug.cgi?id=113256

        Reviewed by Mark Rowe.

        * NetworkProcess/NetworkResourceLoader.h: Added some forgotten OVERRIDEs.

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

        <rdar://problem/13194263> Crashes in NetworkProcess due to threading issues
        https://bugs.webkit.org/show_bug.cgi?id=113256

        Reviewed by Brady Eidson.

        Use asynchronous version of ResourceHandle/ResourceHandleClient in NetworkProcess.
        We now run WebCore code on main thread, so we can't block it.

        * DerivedSources.make:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
        * NetworkProcess/NetworkResourceLoader.messages.in: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        Made NetworkResourceLoader a message receiver. Messages that used to be sync are
        now async, and responses need to be sent to the loader.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRequestAsync): This now happens on main
        thread, and thus cannot be sync.
        (WebKit::NetworkResourceLoader::continueWillSendRequest): Notify the resource
        handle once a response is ready.
        (WebKit::NetworkResourceLoader::didSendData): Removed unnecessary WebCore prefixes.
        (WebKit::NetworkResourceLoader::didReceiveCachedMetadata): Ditto.
        (WebKit::NetworkResourceLoader::wasBlocked):  Ditto.
        (WebKit::NetworkResourceLoader::cannotShowURL): Ditto.
        (WebKit::NetworkResourceLoader::shouldUseCredentialStorageAsync): This function
        doesn't call through to WebProcess, so we can keep it synchronous. But we still
        need to implement the async version, since that's what ResourceHandle calls.
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        Made async.
        (WebKit::NetworkResourceLoader::continueCanAuthenticateAgainstProtectionSpace):
        Notify ResourceHandle when response is ready.
        (WebKit::NetworkResourceLoader::didReceiveDataArray): Removed unnecessary WebCore prefixes.
        (WebKit::NetworkResourceLoader::willCacheResponseAsync): This matches default
        implementation, but we are overriding everything to make it clearer what's missing.
        (WebKit::NetworkResourceLoader::willStopBufferingData): Removed unnecessary WebCore prefixes.

        * NetworkProcess/NetworkResourceLoader.h: Updated to use async client methods.
        Keep ResourceRequest around while handling willSendRequest, as we need the original
        to recombine the request. Removed CFNet version of willCacheResponse for now,
        as we are not using it yet.

        * Shared/Authentication/AuthenticationManager.cpp: Assert that methods touching
        a global HashMap all run on main thread. Changed generateAuthenticationChallengeID()
        to use regular increment, as there is no need to run it from a secondary thread.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage): We no longer have any
        sync messages.

        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::canAuthenticateAgainstProtectionSpace):
        * WebProcess/Network/WebResourceLoader.messages.in:
        Changed to use async messages.

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

        [wk2] Don't send intrinsic content size updates more than once per runloop
        https://bugs.webkit.org/show_bug.cgi?id=113258
        <rdar://problem/13492038>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        Only start the zero-delay timer if it's not already active.

2013-03-26  Tony Chang  <tony@chromium.org>

        Autogenerate the scrollAnimatorEnabled setting in Settings.in
        https://bugs.webkit.org/show_bug.cgi?id=113253

        Reviewed by James Robinson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout): Update call to WebCore to use setScrollAnimatorEnabled(bool).
        (WebKit::WebPage::updatePreferences): Update call to WebCore to use setScrollAnimatorEnabled(bool).

2013-03-26  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fails to start QtWebProcess.exe if installed in a path containing spaces
        https://bugs.webkit.org/show_bug.cgi?id=113328

        Reviewed by Jocelyn Turcotte.

        Downstream bugreport: https://bugreports.qt-project.org/browse/QTBUG-30249

        We use QProcess::start() with a commandline string to start the web process
        and the string is treated by QProcess as a whitespace delimeted list of the
        command and the arguments, thus we have to escape the path to the process
        binaries so that if the path contains spaces we still run the appropriate
        command.

        * UIProcess/Launcher/qt/ProcessLauncherQt.cpp:
        (WebKit::ProcessLauncher::launchProcess):

2013-03-26  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] QML WebView asserts when double clicking a link
        https://bugs.webkit.org/show_bug.cgi?id=113329

        Reviewed by Jocelyn Turcotte.

        Downstream bugreport: https://bugreports.qt-project.org/browse/QTBUG-30288

        Remove an erroneous assert which is no longer valid if
        mouse gestures are enabled.

        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleInputEvent):

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

        [wk2] Don't send intrinsic content size updates more than once per runloop
        https://bugs.webkit.org/show_bug.cgi?id=113258
        <rdar://problem/13492038>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        Add a zero-delay timer for intrinsic content size updates.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        Add a zero-delay timer for intrinsic content size updates.
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        Start our new one-shot zero-delay timer.
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired):
        Inform the WebPage that the intrinsic content size has changed.

2013-03-26  Simon Cooper  <scooper@apple.com>

        bundle-ids need to be sanitized before using them in filesystem paths
        https://bugs.webkit.org/show_bug.cgi?id=113030
        <rdar://problem/13300254>

        Reviewed by Alexey Proskuryakov.

        When choosing / looking for a specialized Sandbox for a Plugin the
        bundle-id needs to be sanitized before using it to construct a
        filesystem name to look up. The “/“ character should not be allowed
        and transformed into something else, in this case a “:”

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::loadSandboxProfile):

2013-03-26  Zeno Albisser  <zeno@webkit.org>

        [Qt] UIProcess should initialize WebCoreSystemInterface.
        https://bugs.webkit.org/show_bug.cgi?id=113300

        The WebCoreSystemInterface is necessary to detect supported
        mime types on Mac OS. In particular it is needed for download
        support.
        This patch fixes in particular the previously failing
        Qt API qmltest WebViewDownload::test_downloadRequest.
        The test was crashing when using QTKit, because functions
        in WebCoreSystemInterface could not be resolved on the UIProcess side.

        Reviewed by Jocelyn Turcotte.

        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):

2013-03-25  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_INPUT_TYPE_DATETIME
        https://bugs.webkit.org/show_bug.cgi?id=113254

        Reviewed by Kentaro Hara.

        Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
        Actually I'd like to remove the code, but we shouldn't remove it yet
        because we shipped products with it on some platforms.

        * Configurations/FeatureDefines.xcconfig:

2013-03-25  Dean Jackson  <dino@apple.com>

        Cleanup plugin snapshotting autostart decision making
        https://bugs.webkit.org/show_bug.cgi?id=113231

        Reviewed by Tim Horton.

        Two major changes to the way snapshotting plugins may autostart.

        The first is that previously WebCore was keeping a hash that
        represented the combination of page origin, plugin origin and
        mime type. WebKit was responsible for deciding if that particular
        hash should autostart. Now, WebKit keeps the hash, and WebCore
        just asks us whether the combination of origins and mimetype
        should start immediately. You can see this change the in WebPluginClient
        and WebProcess APIs.

        The second change is that we now keep two types of structures
        around to decide whether a plugin should autostart. One is the
        existing page + plugin origin combination. The other is simply
        the plugin origin, which allows plugins from major providers
        to autostart no matter what page they were embedded on.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode): Encode the new parameter.
        (WebKit::WebProcessCreationParameters::decode): Decode the new parameter.
        * Shared/WebProcessCreationParameters.h: Also keep a list of strings around.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetPlugInAutoStartOrigins): The C API to send the list of plugin
            origins over to the context.
        * UIProcess/API/C/WKContext.h:

        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::addAutoStartOriginHash): Renamed from addAutoStartOrigin.
            No functional change other than new names for members.
        (WebKit::PlugInAutoStartProvider::autoStartOriginHashesCopy): Ditto.
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy): Ditto.
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTable): Ditto.
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsArray): New method that converts the
            incoming ImmutableArray into a Vector of Strings.
        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction): Rename for new members.
        * UIProcess/Plugins/PlugInAutoStartProvider.h: Renaming member variables. Adding
            some typedefs to clean up code.
        (WebKit::PlugInAutoStartProvider::autoStartOrigins): New accessor.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess): Renaming, and copy the new parameter into the process creation.
        (WebKit::WebContext::addPlugInAutoStartOriginHash): Renaming.
        (WebKit::WebContext::setPlugInAutoStartOriginHashes): Renaming.
        (WebKit::WebContext::setPlugInAutoStartOrigins): New method.
        * UIProcess/WebContext.h: Adds the new setPlugInAutoStartOrigin method.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin): Drive-by fix that was attempting to restart plugins
            that were in the process of restarting.
        (WebKit::PluginView::pluginDidReceiveUserInteraction): Temporarily suspend update of
            expiration time if the user interacts with a plugin.

        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::shouldAutoStartFromOrigin): Renaming.
        (WebKit::WebPlugInClient::didStartFromOrigin): Ditto.
        * WebProcess/WebCoreSupport/WebPlugInClient.h: Renaming.

        * WebProcess/WebProcess.cpp: Drive-by - noticed that we forgot to count seconds in
            a timeout threshold.
        (WebKit::WebProcess::initializeWebProcess): Also add the list of origins when we initialize.
        (WebKit::addCaseFoldedCharacters): Copied from WebCore - adds a String to a hash input.
        (WebKit::hashForPlugInOrigin): Copied from WebCore - hashing function.
        (WebKit::WebProcess::isPlugInAutoStartOriginHash): Renaming.
        (WebKit::WebProcess::shouldPlugInAutoStartFromOrigin): Check the list of pure origins first. If
            that fails, fall back to the hash list of pairs.
        (WebKit::WebProcess::plugInDidStartFromOrigin): Renaming.
        (WebKit::WebProcess::didAddPlugInAutoStartOriginHash): Ditto.
        (WebKit::WebProcess::resetPlugInAutoStartOriginHashes): Ditto.
        (WebKit::WebProcess::plugInDidReceiveUserInteraction): Ditto.
        * WebProcess/WebProcess.h: Renaming some methods, but also adding the input of the new
            origin-only list.

        * WebProcess/WebProcess.messages.in: Renaming a message.

2013-03-25  Maxim Ermilov  <maxim.ermilov@canonical.com>

        [Qt] Qml WebKit needs preferences to change security knobs
        https://bugs.webkit.org/show_bug.cgi?id=111979

        Reviewed by Jocelyn Turcotte.

        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferences::universalAccessFromFileURLsAllowed):
        (QWebPreferences::setUniversalAccessFromFileURLsAllowed):
        (QWebPreferences::fileAccessFromFileURLsAllowed):
        (QWebPreferences::setFileAccessFromFileURLsAllowed):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

2013-03-23  Geoffrey Garen  <ggaren@apple.com>

        Added a setting for whether JavaScript markup is enabled
        https://bugs.webkit.org/show_bug.cgi?id=112999

        Rolled out a line from r146664 that was left over from before I adopted
        the Settings.in way of adding a new setting.

        Reviewed by Ryosuke Niwa.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): No need
        to initialize / override -- Settings.in settings do this automatically.

        Also, dydx noticed that this line of code had a typo, and was totaly wrong.

2013-03-21  Kiran Muppala  <cmuppala@apple.com>

        Add runtime setting for hidden page DOM timer throttling and CSS animation suspension
        https://bugs.webkit.org/show_bug.cgi?id=112308

        Reviewed by Gavin Barraclough.

        Add private preference for enabling/disabling hidden page DOM timer
        throttling and CSS animation suspension.  The preference should be
        enabled by default only on Mac, where WebKit2 is a private API and
        hence compatibility is less of a issue.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetHiddenPageDOMTimerThrottlingEnabled):
        (WKPreferencesGetHiddenPageDOMTimerThrottlingEnabled):
        (WKPreferencesSetHiddenPageCSSAnimationSuspensionEnabled):
        (WKPreferencesGetHiddenPageCSSAnimationSuspensionEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Allow
        WebKitTestRunner to override hiddenPageDOMTimerThrottlingEnabled.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        Plugin Snapshotting: Auto-start dominant plugins
        https://bugs.webkit.org/show_bug.cgi?id=113111
        <rdar://problem/13475726>

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin):
        (WebKit::PluginView::paint):
        (WebKit::PluginView::invalidateRect):
        (WebKit::PluginView::isAcceleratedCompositingEnabled):
        Acknowledge the new "Restarting" DisplayState.

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

        After switching to another space and back, video races to catch up with audio
        https://bugs.webkit.org/show_bug.cgi?id=113006

        Reviewed by Anders Carlsson.

        Add an observer for the NSWorkspaceActiveSpaceDidChangeNotification notification, and trigger
        a visibility update when that notification is observed.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView dealloc]): Unregister the observer.
        (-[WKView _activeSpaceDidChange:]): Notify the view that its visibility may have changed.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Add the observer.

2013-03-21  Geoffrey Garen  <ggaren@apple.com>

        Added a setting for whether JavaScript markup is enabled
        https://bugs.webkit.org/show_bug.cgi?id=112999

        Reviewed by Maciej Stachowiak.

        This setting is useful for clients that want protection from script
        injection attacks.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesGetJavaScriptMarkupEnabled):
        (WKPreferencesSetJavaScriptMarkupEnabled):
        (WKPreferencesGetJavaScriptEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup allowsJavaScriptMarkup]):
        (-[WKBrowsingContextGroup setAllowsJavaScriptMarkup:]):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Plumbed through to API.

2013-03-22  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Include the right GL header for GLES2
        https://bugs.webkit.org/show_bug.cgi?id=113034

        Reviewed by Martin Robinson.

        Include GLES2/gl2.h when using GLES2.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:

2013-03-22  Timothy Hatcher  <timothy@apple.com>

        Fix an assert when opening the Web Inspector window for the first time.

        rdar://problem/13471765
        https://webkit.org/b/113053

        Reviewed by Eric Carlson.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow): Assign m_inspectorWindow
        earlier so it is ready for when center is called and windowDidMove: gets called.

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

        [wk2] Page Overlays: Don't create backing store until the client asks us to paint
        https://bugs.webkit.org/show_bug.cgi?id=112989
        <rdar://problem/13355759>

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        Invalidate the entire overlay on installation, to maintain existing behavior
        on platforms where the fade-in animation is not performed by invalidating the overlay.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::installPageOverlay):
        Don't invalidate the overlay upon installation.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
        Create backing store for the page overlay layer the first time it is painted into.
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        Don't update the size of the page overlay layer unless we intend for it to have backing store.
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        Don't create backing store when we create the page overlay layer.

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

        If a previously loaded resource is later stored to the disk cache, replace the buffer with MMAP'ed memory.
        <rdar://problem/13414154> and https://bugs.webkit.org/show_bug.cgi?id=112943

        Reviewed by Geoff Garen.

        Add a timer that will try to look up the disk cached buffer for the resource a few seconds after the load
        completes and - if the resource is disk backed - send it to the WebProcess for sharing:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::diskCacheTimerFired):
        (WebKit::NetworkResourceLoader::didReceiveResponse):
        (WebKit::NetworkResourceLoader::didReceiveData):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        * NetworkProcess/NetworkResourceLoader.h:

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleForResource):

        Refactor SharedMemory to remove the unnecessary vm_copy and only vm_allocate when an appropriate buffer
        doesn't already exist:
        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::createFromVMBuffer):
        (WebKit::SharedMemory::~SharedMemory):

        Give ShareableResource the ability to create a CFDataRef that wraps "this", and return it in a SharedBuffer:
        * Shared/ShareableResource.cpp:
        (WebKit::shareableResourceDeallocate):
        (WebKit::createShareableResourceDeallocator):
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer):
        * Shared/ShareableResource.h:

        * Shared/WebCoreArgumentCoders.cpp: Encode/decode the cache partition for ResourceRequest.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveMessage):
        (WebKit::NetworkProcessConnection::didCacheResource): Lookup the CachedResource in the WebCore memory cache
          and try to replace its encoded data with the shared mmap'ed buffer.
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource):

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

        Unreviewed build fix, forgot to stage one file.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didChangeScrollOffsetForAnyFrame):
        (DrawingArea):

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

        [wk2] Page overlays shouldn't dirty the entire layer when flushing if the main frame can't scroll
        https://bugs.webkit.org/show_bug.cgi?id=111662
        <rdar://problem/13355808>

        Reviewed by Dean Jackson.

        Instead of setNeedsDisplay()ing the whole page overlay layer every time through
        TCADA::flushLayers, do it at scroll time instead. Repainting on scroll is
        necessary to keep things painted in the right place when we scroll (the overlay
        is fixed to the size of the view), but is quite wasteful in apps that don’t scroll.

        This works with threaded scrolling because overlay installation forces us
        into main-thread scrolling mode.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        Plumb scroll offset changes through to the drawing area, so it can invalidate the page overlay.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        Add didChangeScrollOffsetForAnyFrame, for WebFrameLoaderClient to call us back when any frame scrolls.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::didChangeScrollOffsetForAnyFrame):
        Invalidate the page overlay when any frame scrolls, so that find indicators in subframes are kept in the right place.
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        Stop unconditionally invalidating the page overlay when we flush layers.

2013-03-21  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Move NSOperationQueue out of NetworkingContext
        https://bugs.webkit.org/show_bug.cgi?id=112970

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/mac/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        Tell ResourceHandle to use an operation queue in the new way.

2013-03-21  Timothy Hatcher  <timothy@apple.com>

        Support connecting the Web Inspector without showing it.

        This allows you to get the debugger attached in the background. When a breakpoint is hit
        the Inspector will open. This change also reduces some WebProcess messaging by removing
        the DidLoadInspectorPage message and stops sending the SetAttachedWindow message on close.

        https://bugs.webkit.org/show_bug.cgi?id=112445

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKInspector.cpp:
        (WKInspectorIsConnected): Added.
        (WKInspectorConnect): Added.
        (WKInspectorHide): Added.

        * UIProcess/API/C/WKInspector.h:
        Added new APIs.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::WebInspectorProxy):
        Initialize new state booleans.

        (WebKit::WebInspectorProxy::invalidate):
        Don't set state booleans that didClose already resets.

        (WebKit::WebInspectorProxy::connect): Added.
        (WebKit::WebInspectorProxy::show):
        Open if we are already connected. Call connect().

        (WebKit::WebInspectorProxy::hide): Added.

        (WebKit::WebInspectorProxy::close):
        Call didClose we can detach or close the window immediately instead of waiting for a
        message from the WebProcess.

        (WebKit::WebInspectorProxy::attach):
        (WebKit::WebInspectorProxy::detach):
        Check for !m_page to match other functions.

        (WebKit::WebInspectorProxy::createInspectorPage):
        (WebKit::WebInspectorProxy::didLoadInspectorPage):
        Removed. Moved logic to open().

        (WebKit::WebInspectorProxy::open): Added.

        (WebKit::WebInspectorProxy::didClose):
        Clear new state booleans. Don't perform work again if already closed. Use platformDetach()
        instead of detach() to avoid sending the SetAttachedWindow message.

        (WebKit::WebInspectorProxy::bringToFront):
        Call open() if we are not visible yet, otherwise platformBringToFront.

        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::isConnected): Added.

        * UIProcess/WebInspectorProxy.messages.in: Removed DidLoadInspectorPage.

        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformHide): Added stub.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::platformHide): Added.

        * UIProcess/qt/WebInspectorProxyQt.cpp:
        (WebKit::WebInspectorProxy::platformHide): Added stub.

        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        Removed frontendLoaded().

        * WebProcess/WebPage/WebInspector.cpp:
        * WebProcess/WebPage/WebInspector.h:
        Removed didLoadInspectorPage().

2013-03-21  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm: Include CurrentTime.h, as needed
        to call currentTime().

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

        Tiled page overlay layers don't create tiles until the first flush after they switch to being tiled
        https://bugs.webkit.org/show_bug.cgi?id=112860
        <rdar://problem/13468400>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea): Add storage for m_clipsToExposedRect.
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        The page overlay layer will never have children, so we can use flushCompositingState instead of the ForThisLayerOnly variant.
        Pass the visible rect of the page overlay layer (computed by intersecting its bounds with the exposed
        rect that comes from the WKView) to flushCompositingState; don't bother setting the visible rect manually.
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged):
        Store m_clipsToExposedRect so we can use it in flushLayers.

2013-03-20  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Remove VIEW_MODE_CSS_MEDIA from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=112849

        Reviewed by Sam Weinig.

        The code was added in r137148 for the sole purpose of testing,
        and it is not even being properly tested.

        Remove the code until someone actually implement the feature in WebKit2.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCanShowMIMEType):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

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

        [GTK] Build ANGLE sources into a separate library from libWebCore.la
        https://bugs.webkit.org/show_bug.cgi?id=112778

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add libLevelDB.la to the libwebkit2gtk library if using the OpenGL accelerated backend.

2013-03-20  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Clean up sanity checks related to gesture recognition
        https://bugs.webkit.org/show_bug.cgi?id=112679

        Reviewed by Jocelyn Turcotte.

        The only callers of the panGestureActive and pinchGestureActive member
        functions of the page viewport controller client are event delivery
        related sanity check assers, thus they can be replaced by checking
        for the corresponding internal states and therefore the superfluous
        members can be removed.
        Also update other asserts in the page viewport controller client to
        be more accurate about the expected states.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::touchBegin):
        (WebKit::PageViewportControllerClientQt::panGestureStarted):
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (PageViewportControllerClientQt):
        * UIProcess/qt/QtWebPageEventHandler.cpp:
        (WebKit::QtWebPageEventHandler::handleInputEvent):

2013-03-20  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Refactor handling of content suspension to properly cover corner cases
        https://bugs.webkit.org/show_bug.cgi?id=111751

        Reviewed by Jocelyn Turcotte.

        The current suspend / resume infrastructure turned out to be insufficient to cover
        all corner cases during transitions between gestures of complex gesture chains.

        The requirements for robust suspend / resume handling are:
            - Keep the content suspended while the user is continuously interacting,
        eg. does not lift the finger between transition from a pan to a pinch gesture
        and vice versa.
            - The content should not be suspended unnecessarily (like for a tap gesture),
        only during panning and scroll animation (flick), as well as pinch zoom and scale
        animation (also includes double-tap-to-zoom).
            - The content should never end up stuck in suspended state after long gesture
        chains and continuous interaction.

        This patch reintroduces reference counting based suspension in form of a new
        ViewportInteractionTracker member class to make it possible to reliably control the
        suspend / resume cycles during scrolling and scaling.
        During continuous gestures, while the user is interacting, the reference count is
        increased without actually suspending the content to prevent resuming unnecessarily
        during continuous interaction. At the same time this also assures that the page is
        not suspended for simple tap gestures, which was a side-effect of the previous
        approach based on update deferrers.
        The newly added functionality replaces boolean members that tried to achive the
        above requirements.
        Additionally this patch also removes the redundant m_hasSuspendedContent member
        from the PageViewportController since WebPageProxy already keeps this information.

        * UIProcess/PageViewportController.cpp:
        (WebKit::PageViewportController::PageViewportController):
        (WebKit::PageViewportController::pageDidRequestScroll):
        (WebKit::PageViewportController::updateMinimumScaleToFit):
        * UIProcess/PageViewportController.h:
        (PageViewportController):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::areActiveDOMObjectsAndAnimationsSuspended):
        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::PageViewportControllerClientQt):
        (WebKit::PageViewportControllerClientQt::ViewportInteractionTracker::begin):
        (WebKit):
        (WebKit::PageViewportControllerClientQt::ViewportInteractionTracker::end):
        (WebKit::PageViewportControllerClientQt::animateContentRectVisible):
        (WebKit::PageViewportControllerClientQt::flickMoveStarted):
        (WebKit::PageViewportControllerClientQt::flickMoveEnded):
        (WebKit::PageViewportControllerClientQt::pageItemPositionChanged):
        (WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):
        (WebKit::PageViewportControllerClientQt::touchBegin):
        (WebKit::PageViewportControllerClientQt::touchEnd):
        (WebKit::PageViewportControllerClientQt::zoomToAreaGestureEnded):
        (WebKit::PageViewportControllerClientQt::pinchGestureStarted):
        (WebKit::PageViewportControllerClientQt::pinchGestureRequestUpdate):
        (WebKit::PageViewportControllerClientQt::pinchGestureEnded):
        (WebKit::PageViewportControllerClientQt::pinchGestureCancelled):
        (WebKit::PageViewportControllerClientQt::didChangeContentsSize):
        * UIProcess/qt/PageViewportControllerClientQt.h:
        (ViewportInteractionTracker):
        (WebKit::PageViewportControllerClientQt::ViewportInteractionTracker::ViewportInteractionTracker):
        (WebKit::PageViewportControllerClientQt::ViewportInteractionTracker::inProgress):
        (PageViewportControllerClientQt):

2013-03-19  Kenneth Rohde Christiansen  <kenneth@webkit.org> and Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [EFL][WK2] Separate WebView further from EwkView
        https://bugs.webkit.org/show_bug.cgi?id=111591

        Reviewed by Caio Marcelo de Oliveira Filho.

        Main points are:
        - WKView API has no dependency on EFL types
        - WebView class does not store the Evas_Object

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

            WKView creation does not require any EFL objects to be passed.

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

            WKViewRef is passed to EwkView constructor from outside rather than
            created inside.

        (EwkView::webView):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        (EwkView::wkView):
        (EwkView::page):

            EwkView keeps WKViewRef rather than pointer to WebView class.

        * UIProcess/API/efl/ewk_view_private.h: Added.
        (EWKViewCreate):
        (EWKViewGetWKView):

            Added private API to create ewk view evas object and return its WKViewRef.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewkCreateEvasObject):
        (ewk_view_smart_add):
        (ewk_view_add):
        (ewk_view_add_with_context):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

            Updated accordingly to the new APIs.

        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::WebView):
        (WebKit::WebView::create):
        (WebKit):
        (WebKit::WebView::setEwkView):
        (WebKit::WebView::isViewFocused):
        (WebKit::WebView::isViewVisible):
        * UIProcess/efl/WebView.h:
        (WebView):

            Implementation of updated WKView API.

2013-03-19  Dean Jackson  <dino@apple.com>

        Allow PlugIn Snapshotting to be tested
        https://bugs.webkit.org/show_bug.cgi?id=98696

        Reviewed by Tim Horton.

        Use the new maximumPlugInSnapshotAttempts setting rather than a hardcoded
        value. At the same time, if this value is 0, then snapshot immediately
        (don't wait to get a snapshot and test it).

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin): Snapshot immediately if maximum attempts are 0.
        (WebKit::PluginView::pluginSnapshotTimerFired): Use setting rather than file local variable.

2013-03-19  Dean Jackson  <dino@apple.com>

        Restarting a snapshotted plugin should restart all plugins from the same domain on the page
        https://bugs.webkit.org/show_bug.cgi?id=112725

        Reviewed by Tim Horton.

        When we add a plugin domain hash to the list of sites that autostart, we
        send a message to our owning process. That message might not return before
        another plugin queries if it is in the list. So, before we send the message,
        add the current hash to the list with a very small timeout. That way the
        response will be to either extend the timeout, or not add the hash (in which
        case it will expire soon).

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

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

        [GTK] Fix WebKit2 builds after r146193
        https://bugs.webkit.org/show_bug.cgi?id=112700

        Reviewed by Martin Robinson.

        Apply changes to the LayerTreeHostGtk class that are analogous to changes made in r146193
        to the LayerTreeHostMac class, namely introducing a PageOverlayLayersMap and using that as
        the source of GraphicsLayer objects that should be operated on, making it possible to
        support multiple page overlays.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::invalidate):
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostGtk::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHostGtk::sizeDidChange):
        (WebKit::LayerTreeHostGtk::didInstallPageOverlay):
        (WebKit::LayerTreeHostGtk::didUninstallPageOverlay):
        (WebKit::LayerTreeHostGtk::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostGtk::paintContents):
        (WebKit::LayerTreeHostGtk::flushPendingLayerChanges):
        (WebKit::LayerTreeHostGtk::createPageOverlayLayer):
        (WebKit::LayerTreeHostGtk::destroyPageOverlayLayer):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:
        (LayerTreeHostGtk):

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

        [wk2] Should support multiple page overlays, like the API suggests
        https://bugs.webkit.org/show_bug.cgi?id=112505
        <rdar://problem/13424796>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didInstallPageOverlay):
        (WebKit::DrawingArea::didUninstallPageOverlay):
        (WebKit::DrawingArea::setPageOverlayNeedsDisplay):
        (WebKit::DrawingArea::setPageOverlayOpacity):
        Add PageOverlay argument.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didInstallPageOverlay):
        (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
        (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
        (WebKit::DrawingAreaImpl::setPageOverlayOpacity):
        Add PageOverlay argument, forward it to LayerTreeHost.
        (WebKit::DrawingAreaImpl::display):
        Paint all of the PageOverlays that WebPage knows about.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        Pass the relevant PageOverlay into the DrawingArea methods that now take it.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawPageOverlay):
        Take the PageOverlay to draw as an argument.
        (WebKit::WebPage::installPageOverlay):
        (WebKit::WebPage::uninstallPageOverlay):
        Allow (un)installation of multiple PageOverlays.
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::mouseEventSyncForTesting):
        Hit-test PageOverlays in reverse order of installation (most recently installed should be topmost).

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::drawPageOverlay): Take the PageOverlay to draw as an argument.
        (WebKit::WebPage::hasPageOverlay): Return true if we have any number of overlays.
        (WebKit::WebPage::pageOverlays): Return the whole vector of overlays.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        Add PageOverlay argument to a few methods.
        Add storage for a map of PageOverlay->GraphicsLayers.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHostMac::sizeDidChange):
        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        Operate on all installed PageOverlays, not just the most recently installed one.

        (WebKit::LayerTreeHostMac::didInstallPageOverlay):
        (WebKit::LayerTreeHostMac::didUninstallPageOverlay):
        Forward the passed-in PageOverlay on to createPageOverlayLayer/destroyPageOverlayLayer.

        (WebKit::LayerTreeHostMac::setPageOverlayNeedsDisplay):
        Look up the GraphicsLayer for the PageOverlay we need to dirty, and dirty it.

        (WebKit::LayerTreeHostMac::paintContents):
        Find the PageOverlay corresponding to the GraphicsLayer that we're painting, and ask WebPage to paint it.
        While not ideal (crawling the map), the vast majority of the time there will only be one entry.

        (WebKit::LayerTreeHostMac::initialize):
        Create layers for all of WebPage's active PageOverlays.
        
        (WebKit::LayerTreeHostMac::createPageOverlayLayer):
        Stick the newly-created GraphicsLayer into the m_pageOverlays map.
        Also, drive-by add support for accelerated overlays and debug borders/repaint counters in overlays.

        (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):
        Remove the relevant overlay from the m_pageOverlays map and tear it down.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        Add PageOverlay argument to a few methods.
        Add storage for a map of PageOverlay->GraphicsLayers.
        Add storage for a map of GraphicsLayer->CALayers.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
        Pass PageOverlay argument on to createPageOverlayLayer.
        
        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
        Pass PageOverlay argument on to destroyPageOverlayLayer.
        Refrain from re-enabling threaded scrolling if there are still more overlays installed.
        
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
        Look up the GraphicsLayer for the PageOverlay we need to dirty, and dirty it.

        (WebKit::TiledCoreAnimationDrawingArea::paintContents):
        Find the PageOverlay corresponding to the GraphicsLayer that we're painting, and ask WebPage to paint it.
        While not ideal (crawling the map), the vast majority of the time there will only be one entry.

        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        Operate on all installed PageOverlays, not just the most recently installed one.

        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        Stick the newly-created GraphicsLayer into the m_pageOverlays map.
        Also, add its platformLayer to our m_pageOverlayPlatformLayers map.

        (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):
        Remove the relevant overlay from the m_pageOverlays and m_pageOverlayPlatformLayers maps and tear it down.

        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer):
        When we commit changes for the layer, if the GraphicsLayer's backing platform CALayer
        has changed out from under us (we have a reference to the previous one in the m_pageOverlayPlatformLayers map),
        the GraphicsLayer has probably switched to/from a tiled layer, and we need to swap out the
        layer we have inserted into the root layer. We need to keep the layer ordering consistent with
        installation order, as well.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didInstallPageOverlay):
        Assert if we try to install more than one page overlay into a CoordinatedLayerTreeHost,
        as this patch does not implement multiple overlay support for Coordinated Graphics.
        Keep track of the current PageOverlay so that paintContents can hand WebPage the right one.
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay): Remove our reference to the PageOverlay.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayNeedsDisplay): Add unused PageOverlay argument.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayOpacity): Add unused PageOverlay argument.
        (WebKit::CoordinatedLayerTreeHost::paintContents): Hand WebPage the PageOverlay we're currently displaying.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost): Add PageOverlay* argument to relevant functions, and storage for m_pageOverlay.

2013-03-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r146183.
        http://trac.webkit.org/changeset/146183
        https://bugs.webkit.org/show_bug.cgi?id=112673

        Caused a few dozens of editing tests to fail on Mac WK2
        (Requested by rniwa on #webkit).

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didInstallPageOverlay):
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay):
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayNeedsDisplay):
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayOpacity):
        (WebKit::CoordinatedLayerTreeHost::paintContents):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit):
        (WebKit::DrawingArea::didInstallPageOverlay):
        (WebKit::DrawingArea::didUninstallPageOverlay):
        (WebKit::DrawingArea::setPageOverlayNeedsDisplay):
        (WebKit::DrawingArea::setPageOverlayOpacity):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didInstallPageOverlay):
        (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
        (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
        (WebKit::DrawingAreaImpl::setPageOverlayOpacity):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:
        (DrawingAreaImpl):
        * WebProcess/WebPage/LayerTreeHost.h:
        (LayerTreeHost):
        (WebKit::LayerTreeHost::setPageOverlayOpacity):
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawPageOverlay):
        (WebKit::WebPage::installPageOverlay):
        (WebKit::WebPage::uninstallPageOverlay):
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::mouseEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        (WebKit):
        (WebPage):
        (WebKit::WebPage::hasPageOverlay):
        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        (WebKit):
        (LayerTreeHostMac):
        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHostMac::sizeDidChange):
        (WebKit::LayerTreeHostMac::didInstallPageOverlay):
        (WebKit::LayerTreeHostMac::didUninstallPageOverlay):
        (WebKit::LayerTreeHostMac::setPageOverlayNeedsDisplay):
        (WebKit::LayerTreeHostMac::paintContents):
        (WebKit::LayerTreeHostMac::initialize):
        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        (WebKit::LayerTreeHostMac::createPageOverlayLayer):
        (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::paintContents):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):
        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer):

2013-03-18  Tim Horton  <timothy_horton@apple.com>

        [wk2] Should support multiple page overlays, like the API suggests
        https://bugs.webkit.org/show_bug.cgi?id=112505
        <rdar://problem/13424796>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/DrawingAreaImpl.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::didInstallPageOverlay):
        (WebKit::DrawingArea::didUninstallPageOverlay):
        (WebKit::DrawingArea::setPageOverlayNeedsDisplay):
        (WebKit::DrawingArea::setPageOverlayOpacity):
        Add PageOverlay argument.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::didInstallPageOverlay):
        (WebKit::DrawingAreaImpl::didUninstallPageOverlay):
        (WebKit::DrawingAreaImpl::setPageOverlayNeedsDisplay):
        (WebKit::DrawingAreaImpl::setPageOverlayOpacity):
        Add PageOverlay argument, forward it to LayerTreeHost.
        (WebKit::DrawingAreaImpl::display):
        Paint all of the PageOverlays that WebPage knows about.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        Pass the relevant PageOverlay into the DrawingArea methods that now take it.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::drawPageOverlay):
        Take the PageOverlay to draw as an argument.
        (WebKit::WebPage::installPageOverlay):
        (WebKit::WebPage::uninstallPageOverlay):
        Allow (un)installation of multiple PageOverlays.
        (WebKit::WebPage::mouseEvent):
        (WebKit::WebPage::mouseEventSyncForTesting):
        Hit-test PageOverlays in reverse order of installation (most recently installed should be topmost).

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::drawPageOverlay): Take the PageOverlay to draw as an argument.
        (WebKit::WebPage::hasPageOverlay): Return true if we have any number of overlays.
        (WebKit::WebPage::pageOverlays): Return the whole vector of overlays.

        * WebProcess/WebPage/mac/LayerTreeHostMac.h:
        Add PageOverlay argument to a few methods.
        Add storage for a map of PageOverlay->GraphicsLayers.

        * WebProcess/WebPage/mac/LayerTreeHostMac.mm:
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplay):
        (WebKit::LayerTreeHostMac::setNonCompositedContentsNeedDisplayInRect):
        (WebKit::LayerTreeHostMac::sizeDidChange):
        (WebKit::LayerTreeHostMac::flushPendingLayerChanges):
        Operate on all installed PageOverlays, not just the most recently installed one.

        (WebKit::LayerTreeHostMac::didInstallPageOverlay):
        (WebKit::LayerTreeHostMac::didUninstallPageOverlay):
        Forward the passed-in PageOverlay on to createPageOverlayLayer/destroyPageOverlayLayer.

        (WebKit::LayerTreeHostMac::setPageOverlayNeedsDisplay):
        Look up the GraphicsLayer for the PageOverlay we need to dirty, and dirty it.

        (WebKit::LayerTreeHostMac::paintContents):
        Find the PageOverlay corresponding to the GraphicsLayer that we're painting, and ask WebPage to paint it.
        While not ideal (crawling the map), the vast majority of the time there will only be one entry.

        (WebKit::LayerTreeHostMac::initialize):
        Create layers for all of WebPage's active PageOverlays.
        
        (WebKit::LayerTreeHostMac::createPageOverlayLayer):
        Stick the newly-created GraphicsLayer into the m_pageOverlayLayers map.
        Also, drive-by add support for accelerated overlays and debug borders/repaint counters in overlays.

        (WebKit::LayerTreeHostMac::destroyPageOverlayLayer):
        Remove the relevant overlay from the m_pageOverlayLayers map and tear it down.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        (TiledCoreAnimationDrawingArea):
        Add PageOverlay argument to a few methods.
        Add storage for a map of PageOverlay->GraphicsLayers.
        Add storage for a map of GraphicsLayer->CALayers.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
        Pass PageOverlay argument on to createPageOverlayLayer.
        
        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
        Pass PageOverlay argument on to destroyPageOverlayLayer.
        Refrain from re-enabling threaded scrolling if there are still more overlays installed.
        
        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
        Look up the GraphicsLayer for the PageOverlay we need to dirty, and dirty it.

        (WebKit::TiledCoreAnimationDrawingArea::paintContents):
        Find the PageOverlay corresponding to the GraphicsLayer that we're painting, and ask WebPage to paint it.
        While not ideal (crawling the map), the vast majority of the time there will only be one entry.

        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::setExposedRect):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        Operate on all installed PageOverlays, not just the most recently installed one.

        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        Stick the newly-created GraphicsLayer into the m_pageOverlayLayers map.
        Also, add its platformLayer to our m_pageOverlayPlatformLayers map.

        (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):
        Remove the relevant overlay from the m_pageOverlayLayers and m_pageOverlayPlatformLayers maps and tear it down.

        (WebKit::TiledCoreAnimationDrawingArea::didCommitChangesForLayer):
        When we commit changes for the layer, if the GraphicsLayer's backing platform CALayer
        has changed out from under us (we have a reference to the previous one in the m_pageOverlayPlatformLayers map),
        the GraphicsLayer has probably switched to/from a tiled layer, and we need to swap out the
        layer we have inserted into the root layer. We need to keep the layer ordering consistent with
        installation order, as well.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::didInstallPageOverlay):
        Assert if we try to install more than one page overlay into a CoordinatedLayerTreeHost,
        as this patch does not implement multiple overlay support for Coordinated Graphics.
        Keep track of the current PageOverlay so that paintContents can hand WebPage the right one.
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay): Remove our reference to the PageOverlay.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayNeedsDisplay): Add unused PageOverlay argument.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayOpacity): Add unused PageOverlay argument.
        (WebKit::CoordinatedLayerTreeHost::paintContents): Hand WebPage the PageOverlay we're currently displaying.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost): Add PageOverlay* argument to relevant functions, and storage for m_pageOverlay.

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

        Need a bundle SPI to generate a snapshot of a specific DOM node (like [DOMNode renderedImage])
        <rdar://problem/13148631>
        https://bugs.webkit.org/show_bug.cgi?id=110034

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp:
        (WKBundleNodeHandleCopySnapshotWithOptions):
        * WebProcess/InjectedBundle/API/c/WKBundleNodeHandlePrivate.h:
        Add WKBundleNodeHandleCopySnapshotWithOptions function.

        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
        * WebProcess/InjectedBundle/API/mac/WKDOMNodePrivate.h:
        Fix conversion method between WKDOMNode and WKBundleNodeHandleRef to have the same
        name in the header and implementation.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::imageForRect):
        (WebKit):
        (WebKit::InjectedBundleNodeHandle::renderedImage):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:
        Add implementation of WKBundleNodeHandleCopySnapshotWithOptions.

        * Shared/ImageOptions.h:
        (WebKit::snapshotOptionsToImageOptions):
        * WebProcess/WebPage/WebPage.cpp:
        Move snapshotOptionsToImageOptions conversion function to a location where
        it can be shared.

2013-03-18  Andreas Kling  <akling@apple.com>

        [WK2][Mac] Don't consider empty window frames cacheable.
        <http://webkit.org/b/112631>
        <rdar://problem/13384894>

        Reviewed by Anders Carlsson.

        If the UI client overrides getWindowFrame() and returns an empty rect, send that over
        to the web process and mark it as uncached. This forces the next ChromeClient::windowRect()
        call to synchronously retrieve the window frame from the other side.

        Fixes an issue with the Mac Web Inspector which uses empty rects to signify that there is
        no known window frame yet. In this case, we should not be falling back to the native frame.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::windowAndViewFramesChanged):

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

        Mac build fix after http://trac.webkit.org/changeset/146088

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::platformDidReceiveResponse):

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

        NetworkProcess should send vm_copied, mmap'ed memory to WebProcesses when a 
        resource is already in the disk cache.
        <rdar://problem/13414153> and https://bugs.webkit.org/show_bug.cgi?id=112387

        Reviewed by Geoff Garen.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        (WebKit::NetworkResourceLoader::didReceiveResponse): After notifying about the response,
          call platformDidReceiveResponse.
        * NetworkProcess/NetworkResourceLoader.h:

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm: Added.
        (WebKit::NetworkResourceLoader::platformDidReceiveResponse): Attempt to pull a filesystem
          mmap'ed buffer from the CFNetwork cache and - if it exists - abort the traditional load
          and send that to the WebProcess instead.
        (WebKit::NetworkResourceLoader:: fileBackedResourceMinimumSize): For now, use the VM page size.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Set the threshold for what
          should be backed by a file on disk instead of stored in the database.

        Change SharedMemory to do a vm_copy if a previously existing buffer is being passed in:
        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::create):
        (WebKit::SharedMemory::createWithVMCopy):

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::shareableResourceDeallocate):
        (WebKit::createShareableResourceDeallocator):
        (WebKit::WebResourceLoader::didReceiveResource): Create a special CFDataRef whose buffer is
          backed by a ShareableResource to send to the ResourceLoader in one chunk.

        * Shared/ShareableResource.h: Fix some comments.

        * WebKit2.xcodeproj/project.pbxproj:

2013-03-18  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Fix code wrapping WKPageGroupRef
        https://bugs.webkit.org/show_bug.cgi?id=112364

        Reviewed by Alexey Proskuryakov.

        The patch fixes following problems in EWK2 WKPageGroupRef wrapping
        code: firstly it makes sure that there is only one EwkPageGroup
        instance per WKPageGroup instance, secondly it allows web page to
        to use the default page group (which is implicitly created inside
        web context).

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

            Now may pass '0' page group as a WebView creation argument so
            that the default page group is used.

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

            Web view should be created before page group, so they are rearranged
            inside class declaration.

        * UIProcess/API/efl/ewk_page_group.cpp:
        (pageGroupMap):

            A map to track corresponding EwkPageGroup and WKPageGroup
            instances.

        (EwkPageGroup::findOrCreateWrapper):

            Returns the same EwkPageGroup instance for the same WKPageGroup
            instance.

        (EwkPageGroup::create):
        (EwkPageGroup::EwkPageGroup):

            Now there is only one constructor accepting WKPageGroupRef.

        (EwkPageGroup::~EwkPageGroup):
        * UIProcess/API/efl/ewk_page_group_private.h:
        (EwkPageGroup):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2013-03-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Invalid charset encoding using when substituting a misspelled word in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=112517

        Reviewed by Alexey Proskuryakov.

        The problem is that we are creating the WebContextMenuItemData
        with the GtkAction label as UTF-8.

        * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
        (WebKit::contextMenuItemActivatedCallback): Use String::fromUTF8()
        to convert the GtkAction label to UTF-16.

2013-03-16  Pratik Solanki  <psolanki@apple.com>

        Disable High DPI Canvas on iOS
        https://bugs.webkit.org/show_bug.cgi?id=112511

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

2013-03-15  Timothy Hatcher  <timothy@apple.com>

        Disable suppressesIncrementalRendering for the Web Inspector.

        This ends up causing the Inspector to show blank for a couple seconds before
        it does its first paint. During that time the bare window chrome is showing
        when the Inspector's background and other simple elements count be painting.
        This causes the Inspector to look like it is loading slower than reality.

        https://bugs.webkit.org/show_bug.cgi?id=112300
        rdar://problem/13412219

        Reviewed by Geoff Garen.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::createInspectorPageGroup): Disable suppressesIncrementalRendering.

2013-03-13  Timothy Hatcher  <timothy@apple.com>

        Delay creating the Inspector window so we don't cause a CoreIPC deadlock.

        Other changes include:
        * Create the Inspector WKView at the correct size so it does not need to
          resize later when added to the window.
        * Update the minimum and initial window sizes to better match the new UI.
        * Store the Inspector window frame in WebKit preferences so each page group
          can have different saved window frames. Handy for inspecting the Inspector.

        https://bugs.webkit.org/show_bug.cgi?id=112300
        rdar://problem/13412219

        Reviewed by Geoff Garen.

        * Shared/WebPreferencesStore.cpp:
        (WebKit::defaultValueForKey):
        Added FOR_EACH_WEBKIT_STRING_PREFERENCE_NOT_IN_WEBCORE.

        * Shared/WebPreferencesStore.h:
        (FOR_EACH_WEBKIT_STRING_PREFERENCE_NOT_IN_WEBCORE):
        Added. Needed to keep WebPage::updatePreferences for trying to set WebCore::Settings.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::minimumWindowWidth):
        (WebKit::WebInspectorProxy::initialWindowWidth):
        Bumped the values to work better with the new UI.

        * UIProcess/WebInspectorProxy.h:
        (WebKit::WebInspectorProxy::windowFrameDidChange):
        Added.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorProxyObjCAdapter windowDidMove:]):
        (-[WKWebInspectorProxyObjCAdapter windowDidResize:]):
        Call WebInspectorProxy::windowFrameDidChange.

        (WebKit::WebInspectorProxy::createInspectorWindow):
        Use the preferences for the page group to get the window frame.

        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Stop calling platformAttach or createInspectorWindow, do it in platformOpen.

        (WebKit::WebInspectorProxy::platformOpen):
        Call platformAttach or createInspectorWindow here instead.

        (WebKit::WebInspectorProxy::windowFrameDidChange):
        Added. Store the frame in the page group's preferences.

        (WebKit::WebInspectorProxy::platformAttach):
        (WebKit::WebInspectorProxy::platformDetach):
        Remove code that called setHidden:. We don't need to do that anymore.

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

        [GTK] Enforce the C++11 standard when compiling WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=112169

        Reviewed by Gustavo Noronha Silva.

        With a limited set of supported compilers the WebKit2 source code can now
        be built with the C++11 language standard enforced.

        * GNUmakefile.am:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (injectedBundleDirectory): Adjust the string literals concatenation, moving away from empty strings
        (which C++11 refuses to handle as concatenation operators) and using whitespace instead.
        * UIProcess/InspectorServer/gtk/WebInspectorServerGtk.cpp:
        (WebKit::WebInspectorServer::platformResourceForPath): Ditto.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::inspectorFilesBasePath): Ditto.

2013-03-15  Nate Chapin  <japhet@chromium.org>

        Hide MainResourceLoader from the outside world
        https://bugs.webkit.org/show_bug.cgi?id=109971

        Reviewed by Adam Barth.

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

2013-03-15  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112401

        Reviewed by Stephen Chenney.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * Shared/WebRenderObject.cpp:
        (WebKit::WebRenderObject::WebRenderObject):

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

        [WK2][EFL] Get rid of WebPageProxy::viewWidget() method
        https://bugs.webkit.org/show_bug.cgi?id=112289

        Reviewed by Alexey Proskuryakov.

        Web page should not be aware of platform-specific view.

        * UIProcess/API/efl/EwkView.cpp:
        (wkPageToEvasObjectMap):
        (EwkView::EwkView):
        (EwkView::~EwkView):
        (EwkView::toEvasObject):

            EwkView::toEvasObject() relies on static map rather than on
            removed WebPageProxy::viewWidget() method.

        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_text_checker.cpp:
        (uniqueSpellDocumentTag):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):

            Now uses EwkView::toEvasObject().

        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/efl/WebPageProxyEfl.cpp:

            Removed WebPageProxy::viewWidget() method.

2013-03-14  Andreas Kling  <akling@apple.com>

        REGRESSION(r145169): [Mac][WK2] http/tests/security/cross-frame-access-put.html fails.
        <http://webkit.org/b/111815>
        <rdar://problem/13380145>

        Reviewed by Anders Carlsson.

        Call getWindowFrame() to see if the UI client wants to override the window frame before sending
        a WindowAndViewFramesChanged message to the web process.
        This fixes a glitch in WTR and the Web Inspector where incorrect window frames were being used.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):

2013-03-14  Andy Estes  <aestes@apple.com>

        [WebKit2] Only preprocess sandbox profiles if we're building for the OS X SDK
        https://bugs.webkit.org/show_bug.cgi?id=112330

        Reviewed by David Kilzer.

        We shouldn't preprocess sandbox profiles just because the computer
        we're building on is a Mac. We should only do it if we're actually
        building for the OS X SDK.

        * DerivedSources.make: Check if $PLATFORM_NAME is macosx rather than if
        $OS is MACOS.

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

        Support private browsing on a per-page basis
        <rdar://problem/11969491>

        Reviewed by Timothy Horton.

        Adds WKPageSetOverridePrivateBrowsingEnabled and WKPageGetOverridePrivateBrowsingEnabled.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetOverridePrivateBrowsingEnabled):
        (WKPageGetOverridePrivateBrowsingEnabled):
        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setOverridePrivateBrowsingEnabled):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::overridePrivateBrowsingEnabled):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::updatePreferences):
        (WebKit::WebPage::setOverridePrivateBrowsingEnabled):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Pipe through.

2013-03-14  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112296

        Reviewed by Kentaro Hara.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::elementBounds):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::containsAnyFormElements):

2013-03-14  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Add an API for adding and removing user style sheets from a page group
        https://bugs.webkit.org/show_bug.cgi?id=110728

        Reviewed by Gyuyoung Kim.

        This patch implements EwkPageGroup API to provide the interface of WKPageGroup. Using the EwkPageGroup,
        applications may create the views with a page group for the specific identifier. Also, this patch
        encapsulates the APIs WKPageGroupAddUserStyleSheet and WKPageGroupRemoveAllUserStyleSheets behind
        the EwkPageGroup class for adding and removing user style sheets from a page group. WKArrayCreateWithEinaList()
        is added as a generic WKArray creation API from Eina_List.

        * PlatformEfl.cmake:
        * UIProcess/API/C/efl/WKView.cpp:
        (createWKView):
        * UIProcess/API/efl/EWebKit2.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        (EwkView::createEvasObject):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::ewkPageGroup):
        (EwkView):
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_smart_add):
        (ewk_view_page_group_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        (EWK2UnitTest::EWK2UnitTestBase::setWebView):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

2013-03-14  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Improve the handling of mock geolocation, device orientation and motion clients

        Reviewed by Tor Arne Vestbø.

        The mock versions of these web facing features should be instantiated when
        running in DumpRenderTree only. In order for them to work, no extra Qt modules
        such as QtLocation are actually needed.

        This patch decouples enabling device orientation/motion and geolocation from
        the underlying Qt modules and makes them available in developer builds
        (!production_build) and backed by mock backends when running in drt.

        So if the Qt 5 modules are available, they'll be used (unless drtRun). For
        developers the web facing features are always enabled (although requests will
        time out) and the mock backends are enabled inside DRT, allowing for the layout
        tests to run with less dependencies.

        In addition this also enables the mock device motion client, which was
        previously never instantiated.

        * Target.pri:
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInitializeWebProcess):
        * UIProcess/qt/WebGeolocationProviderQt.cpp:
        * WebKit2.pri:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2013-03-14  Alice Liu  <alice.liu@apple.com>

        Add to HistoryItem a way to know if its underlying CachedPage has expired.
        https://bugs.webkit.org/show_bug.cgi?id=110652

        Reviewed by Brady Eidson.

        Hook up hasCachedPageExpired in InjectedBundle's BackForwardListItem.
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp:
        (WKBundleBackForwardListItemHasCachedPageExpired):
        * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardListItem.h:
        (WebKit::InjectedBundleBackForwardListItem::hasCachedPageExpired):

2013-03-13  Rik Cabanier  <cabanier@adobe.com>

        create runtime flags for CSS Compositing
        https://bugs.webkit.org/show_bug.cgi?id=111818

        Reviewed by Ryosuke Niwa.

        Added a preference to enable CSS compositing.

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

2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
        https://bugs.webkit.org/show_bug.cgi?id=112277

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

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

        Small ResourceLoader cleanups.
        https://bugs.webkit.org/show_bug.cgi?id=112279

        Reviewed by Geoff Garen.

        Replace the "bool allAtOnce" flag with a descriptive enum to make reading code easier.

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

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didReceiveResource):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in: Get rid of the "allAtOnce" flag since it was always false.

2013-03-13  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* functions for document types.
        https://bugs.webkit.org/show_bug.cgi?id=112225

        Reviewed by Ryosuke Niwa.

        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.mm: Remove the redundant helper.

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

        [GTK] Build fixes after 145552
        https://bugs.webkit.org/show_bug.cgi?id=112267

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Narrow down the dependency CFLAGS list to only ones that are actually needed
        to build the platformgtk_sources into libPlatformGtk2.la. At the moment this means only
        GTK+-2.0 CFLAGS are used.

2013-03-13  Antoine Quint  <graouts@apple.com>

        Calling WebInspectorClient::highlight() during a fade-out animation of the PageOverlay won't stop its animation
        https://bugs.webkit.org/show_bug.cgi?id=112271

        Reviewed by Tim Horton.

        Add a new stopFadeOutAnimation() on PageOverlay that we call when
        WebInspectorClient::highlight() is called and a page overlay
        is already available. This ensures that any fade-out animation
        is cleared before proceeding with showing the page overlay
        for the new highlight.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::stopFadeOutAnimation):
        (WebKit):
        * WebProcess/WebPage/PageOverlay.h:
        (PageOverlay):

2013-03-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of hiddenPanels filter
        https://bugs.webkit.org/show_bug.cgi?id=112252

        Reviewed by Vsevolod Vlasov.

        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.h:
        (WebInspectorFrontendClient):

2013-03-13  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [WK2][Qt] Regression(145517) WebProcess asserts in debug build on WebKitTestRunner start
        https://bugs.webkit.org/show_bug.cgi?id=112223

        Reviewed by Simon Hausmann.

        We need to only enable the cookie jar and the disk cache conditionally
        in the web process since we removed default paths and WKTR doesn't provide
        them.

        * WebProcess/qt/WebProcessQt.cpp:
        (WebKit::WebProcess::platformSetCacheModel):
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        [EFL][WK2] ewk_popup_menu_close() does not work as intended
        https://bugs.webkit.org/show_bug.cgi?id=110209

        Reviewed by Laszlo Gombos.

        ewk_popup_menu_close() is called by the browser to notify WebKit that
        the popup menu was closed. However, the implementation was calling
        EwkView::closePopupMenu() which was asking the browser to close the
        popup menu via an Evas smart function. This patch fixes the behavior
        and ewk_popup_menu_close() now calls WKPopupMenuListenerSetSelection()
        C API so that the WebProcess is notified that the popup menu was
        hidden.

        * UIProcess/API/efl/ewk_popup_menu.cpp:
        (EwkPopupMenu::close):

2013-03-12  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Remove CoordinatedGraphicsLayer::setRootLayer().
        https://bugs.webkit.org/show_bug.cgi?id=111835

        Reviewed by Luiz Agostini.

        Amend CoordinatedLayerTreeHost because
        CoordinatedGraphicsLayer::setRootLayer() is removed.

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

2013-03-12  Dean Jackson  <dino@apple.com>

        Primary plugin hit detection needs to run after plugin creation
        https://bugs.webkit.org/show_bug.cgi?id=112206

        Reviewed by Tim Horton.

        On some pages, the plugins are created after the page has loaded, and
        thus our heuristic to determine the primary plugin fails. Run this
        heuristic more often: after each PluginView is created. It already exits
        early if it has found a primary. But we also need to make sure that it
        doesn't run before load.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addPluginView): Run detection when view is added.
        (WebKit::WebPage::didFinishLoad): Remember that we have loaded.
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn): Look at the PluginViews to see if we have a plugin.
        (WebKit::WebPage::resetPrimarySnapshottedPlugIn): Reset both flags.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): New member variable, m_readyToFindPrimarySnapshottedPlugin.

2013-03-12  Beth Dakin  <bdakin@apple.com>

        WKView -printOperationWithPrintInfo:forFrame: doesn’t use the print info that is 
        passed in
        https://bugs.webkit.org/show_bug.cgi?id=112212
        -and corresponding-
        <rdar://problem/12994883>

        Reviewed by Anders Carlsson.

        We should call [NSPrintOperation printOperationWithView: printInfo:] to use the 
        printInfo parameter instead of [NSPrintOperation printOperationWithView:] which 
        will just use the sharedPrintInfo.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView printOperationWithPrintInfo:forFrame:]):

2013-03-12  Geoffrey Garen  <ggaren@apple.com>

        Moved RunLoopTimer and SchedulePair to WTF
        https://bugs.webkit.org/show_bug.cgi?id=112171

        Reviewed by Oliver Hunt.

        This will allow us to use timers in lower level primitives without
        duplicating all the code.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext):

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

        [GTK] Remove HILDON_CPPFLAGS and HILDON_CFLAGS references from GNUmakefiles
        https://bugs.webkit.org/show_bug.cgi?id=112163

        Reviewed by Martin Robinson.

        * GNUmakefile.am: The Hildon dependency doesn't exist anymore so there's no need for
        references to HILDON_CPPFLAGS and HILDON_CFLAGS.

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

        [GTK] Set up the libPlatformGtk.la library
        https://bugs.webkit.org/show_bug.cgi?id=111738

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Reference platformgtk_cppflags variable, libPlatformGtk.la along with webcoregtk_cppflags variable, libWebCoreGtk.la.
        Adjust the path to GtkVersioning.c, the file has moved under Source/Platform.

2013-03-12  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Fix EwkContext class API
        https://bugs.webkit.org/show_bug.cgi?id=111706

        Reviewed by Alexey Proskuryakov.

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

            Renamed from create() as it returns the same instance of EwkContext
            for the given WKContextRef if present.

        (EwkContext::create):
        (EwkContext::defaultContext):

            Returns raw pointer rather than PassRefPtr<EwkContext> as ownership
            is not transferred.

        (ewk_context_default_get):
        * UIProcess/API/efl/ewk_context_private.h:
        (EwkContext):
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):

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

        [GTK] Enable Web Audio in development builds
        https://bugs.webkit.org/show_bug.cgi?id=111831

        Reviewed by Philippe Normand.

        * GNUmakefile.am: Link the plugin process against libWebCoreModules.la as well.

2013-03-11  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] Layer QtDownloadManager on the C API
        https://bugs.webkit.org/show_bug.cgi?id=109562

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

        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        (WebKit::adoptToQString):
        (WebKit):
        (WebKit::adoptToQUrl):
        * UIProcess/API/cpp/qt/WKURLQt.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::handleDownloadRequest):
        * UIProcess/qt/QtDownloadManager.cpp:
        (WebKit::toQtDownloadManager):
        (WebKit):
        (WebKit::QtDownloadManager::QtDownloadManager):
        (WebKit::QtDownloadManager::addDownload):
        (WebKit::QtDownloadManager::didReceiveResponse):
        (WebKit::QtDownloadManager::didCreateDestination):
        (WebKit::QtDownloadManager::didFinishDownload):
        (WebKit::QtDownloadManager::didFailDownload):
        (WebKit::QtDownloadManager::didReceiveDataForDownload):
        * UIProcess/qt/QtDownloadManager.h:
        (WebKit):
        (QtDownloadManager):
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::QtWebContext::QtWebContext):
        * UIProcess/qt/QtWebError.cpp:
        (WebKit::QtWebError::url):
        (WebKit::QtWebError::description):

2013-03-11  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] Layer QtWebIconDatabaseClient on the C API
        https://bugs.webkit.org/show_bug.cgi?id=109564

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

        * Target.pri:
        * UIProcess/API/C/qt/WKIconDatabaseQt.cpp: Added.
        (WKIconDatabaseTryGetQImageForURL):
          - New API added to get a QImage from the IconDatabase.
            Based on WKIconDatabaseCG.h/cpp
        * UIProcess/API/C/qt/WKIconDatabaseQt.h: Added.
        * UIProcess/API/cpp/qt/WKURLQt.cpp:
        (WKURLCreateWithQString):
        (WKURLCopyQString):
        (WKURLCreateWithQUrl):
        (WKURLCopyQUrl):
          - The WKUrlRef behind the scene is a WTF::String and encoding it back and forth to
            a QUrl can slightly change its string representation. Allow converting a WKUrlRef
            to and from a QString to ensure this.
        * UIProcess/API/cpp/qt/WKURLQt.h:
        * UIProcess/API/qt/qwebiconimageprovider.cpp:
        (QWebIconImageProvider::iconURLForPageURLInContext):
          - The icon URL isn't accessible form the C API and shouldn't need to be.
            Use an ID incremented on each update to trigger an update of the QML Image component.
        (QWebIconImageProvider::requestImage):
          - The IconDatabase was previously assumed to resize the image to the requested size,
            but this parameter is ignored, as stated in a comment in WebIconDatabase::imageForPageURL.
            Explicitely do the resize after fetching the original icon to also be able to report
            the original size properly to QtQuick.
        * UIProcess/API/qt/qwebiconimageprovider_p.h:
        * UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml:
          - Set the image to load asynchronously to further test the possibility of threading issues
            in QtWebIconDatabaseClient::iconImageForPageURL
          - Add a few barriers to fix some issues where the load succeeded signal would be wrongly
            catched by init() before the next test.
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::QtWebContext::QtWebContext):
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit):
        (WebKit::QtWebIconDatabaseClient::QtWebIconDatabaseClient):
        (WebKit::QtWebIconDatabaseClient::~QtWebIconDatabaseClient):
        (WebKit::QtWebIconDatabaseClient::updateID):
        (WebKit::QtWebIconDatabaseClient::didChangeIconForPageURL):
        (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
          - Remove the Mutex. This mutex was useless given that it would only
            be locked from a single thread. Since the IconDatabase runs in its own thread,
            it already is thread-safe to access.
        (WebKit::QtWebIconDatabaseClient::retainIconForPageURL):
        (WebKit::QtWebIconDatabaseClient::releaseIconForPageURL):
        * UIProcess/qt/QtWebIconDatabaseClient.h:
        (QtWebIconDatabaseClient):
        * WebKit2.pri:

2013-03-11  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] Specify storage paths through the C API
        https://bugs.webkit.org/show_bug.cgi?id=111435

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

        The WKIconDatabase should be opened through a call to
        WKContextSetIconDatabasePath. To avoid having some paths
        returned through WebContext::platformDefault* and some others
        through the C API, make sure that all those paths are set
        through the C API.

        * Shared/qt/QtDefaultDataLocation.cpp: Removed.
        * Shared/qt/QtDefaultDataLocation.h: Removed.
        * Target.pri:
        * UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:
        (WebKit::cacheFile):
          - This part is left alone behind the C API.
            Since PluginProcessProxy have no knowledge of the WebContext
            it is rather difficult to fetch a configured directory that
            could be used for this purpose (like the disk cache storage).
            Hard-code a compatible logic to keep the current behavior.
        (WebKit::removeCacheFile):
        (WebKit):
        (WebKit::readMetaDataFromCacheFile):
        (WebKit::writeToCacheFile):
        (WebKit::tryReadPluginMetaDataFromCacheFile):
          - Update the code to better handle an empty cache file path.
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::QtWebContext::defaultContext):
        (WebKit::defaultLocation):
        (WebKit):
        (WebKit::QtWebContext::preparedStoragePath):
        * UIProcess/qt/QtWebContext.h:
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::QtWebIconDatabaseClient):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::applicationCacheDirectory):
        (WebKit::WebContext::platformDefaultDatabaseDirectory):
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):

2013-02-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Properly layer QtWebContext on top of the C API
        https://bugs.webkit.org/show_bug.cgi?id=108475

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

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::initializeContextInjectedBundleClient):
        (WebKit::QtWebContext::QtWebContext):
        (WebKit::QtWebContext::create):
        (WebKit::QtWebContext::defaultContext):
        * UIProcess/qt/QtWebContext.h:
        (WebKit):
        (QtWebContext):
        (WebKit::QtWebContext::context):

2013-02-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] Allow QtWebContext to call directly to QQuickWebView with a WKPageRef
        https://bugs.webkit.org/show_bug.cgi?id=109829

        Reviewed by Allan Sandfeld Jensen.
        Signed off for WebKit2 by Benjamin Poulain.

        Instead of going through WebPageProxy and PageClient to forward
        injected bundle messages received by the context, maintain a static map
        of WKPageRef to QQuickWebViewPrivate.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::get):
        (QQuickWebViewPrivate::~QQuickWebViewPrivate):
        (QQuickWebViewPrivate::initialize):
        (QQuickWebViewPrivate::didReceiveMessageFromNavigatorQtObject):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/raw/qrawwebview.cpp:
        * UIProcess/API/qt/raw/qrawwebview_p_p.h:
        * UIProcess/PageClient.h:
        (PageClient):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/qt/QtPageClient.cpp:
        * UIProcess/qt/QtPageClient.h:
        (QtPageClient):
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit::didReceiveMessageFromInjectedBundle):
        * UIProcess/qt/WebPageProxyQt.cpp:

2013-02-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] Keep the WebContext alive during the whole application's lifetime
        https://bugs.webkit.org/show_bug.cgi?id=109827

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

        The lifetime of the WebContext is difficult to manage because of a circular
        reference kept with the WebProcessProxy until it shuts itself down, 60
        seconds after the last page is closed. There was some notification
        in place to handle this in the upper layer, but having to go through the
        C API (done in a following patch) makes this quite awkward.

        Keeping the WebContext alive also includes the icon database which is
        quite heavy, in the future we should only enable it once the
        QQuickWebView::icon property is read.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::QQuickWebViewPrivate):
        (QQuickWebViewPrivate::handleDownloadRequest):
        (QQuickWebViewPrivate::updateIcon):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/qwebiconimageprovider.cpp:
        (QWebIconImageProvider::requestImage):
        * UIProcess/qt/QtWebContext.cpp:
        (WebKit):
        (WebKit::QtWebContext::QtWebContext):
        (WebKit::QtWebContext::~QtWebContext):
        (WebKit::QtWebContext::create):
        (WebKit::QtWebContext::defaultContext):
        * UIProcess/qt/QtWebContext.h:
        (QtWebContext):
        (WebKit::QtWebContext::downloadManager):
        (WebKit::QtWebContext::iconDatabase):
        * UIProcess/qt/WebContextQt.cpp:
        (WebKit::WebContext::platformInvalidateContext):

2013-02-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt][WK2] Favor QUrl and QString over WTF::String in the Qt API layer
        https://bugs.webkit.org/show_bug.cgi?id=109468

        Reviewed by Allan Sandfeld Jensen.
        Signed off for WebKit2 by Benjamin Poulain.

        In preparation for patches using the C API types in some areas, remove the
        usage of WTF::String on the affected line.

        Use a QUrl for icon URL to avoid unnecessary conversion.
        Use a QString for the page URL to keep it compatible with WebPageProxy and
        WebIconDatabase and avoid QUrl parsing.

        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::_q_onIconChangedForPageURL):
        (QQuickWebViewPrivate::updateIcon):
        (QQuickWebView::emitUrlChangeIfNeeded):
        (QQuickWebView::icon):
        * UIProcess/API/qt/qquickwebview_p_p.h:
        (QQuickWebViewPrivate):
        * UIProcess/API/qt/qwebiconimageprovider.cpp:
        (QWebIconImageProvider::iconURLForPageURLInContext):
        * UIProcess/API/qt/qwebiconimageprovider_p.h:
        * UIProcess/qt/QtWebIconDatabaseClient.cpp:
        (WebKit::QtWebIconDatabaseClient::iconForPageURL):
        (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
        (WebKit::QtWebIconDatabaseClient::retainIconForPageURL):
        (WebKit::QtWebIconDatabaseClient::releaseIconForPageURL):
        * UIProcess/qt/QtWebIconDatabaseClient.h:
        (QtWebIconDatabaseClient):

2013-03-12  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK][WK2] REGRESSION(r145081): Unit tests not working if locale is not English
        https://bugs.webkit.org/show_bug.cgi?id=111973

        Reviewed by Carlos Garcia Campos.

        The problem is that the UIProcess locale is reseted to C in
        gtk_test_init, however the WebProcess does not inherit the locale set in
        the UIProcess and it uses the system one (that could be different to
        English). So, there were problems in some tests that are comparing
        strings from both processes like WebKit2APITests/TestPrinting and
        WebKit2APITests/TestWebKitWebContext. The solution is to set the locale
        environment variable LC_ALL to C in order to reset WebProcess locale
        too.

        * UIProcess/API/gtk/tests/TestMain.cpp:
        (main): Set environment variable LC_ALL to C.

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

        Loads are never canceled in the NetworkProcess
        <rdar://problem/12890500> and https://bugs.webkit.org/show_bug.cgi?id=112103

        Reviewed by Alexey Proskuryakov.

        If a connection to a WebProcess is closed (gracefully or by crashing) then:
        - All scheduled loads for that connection should be forgotten.
        - All in-progress loads for that connection should be aborted asap.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::requestsToCleanupMutex): The "request to stop" mechanism is now called "request to cleanup"
        (WebKit::requestsToCleanup):
        (WebKit::NetworkResourceLoader::scheduleCleanupOnMainThread):
        (WebKit::NetworkResourceLoader::performCleanups):
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        (WebKit::NetworkResourceLoader::didFail):

        (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose): If there is a resource handle, let
          the loading thread notice the connection is invalid. Otherwise request to cleanup the loader.
        (WebKit::NetworkResourceLoader::sendAbortingOnFailure):
        (WebKit::NetworkResourceLoader::sendSyncAbortingOnFailure):
        (WebKit::NetworkResourceLoader::abortInProgressLoad): Cancel the resource handle and schedule main thread cleanup.
        (WebKit::NetworkResourceLoader::didReceiveResponse): Use sendAbortingOnFailure instead of send.
        (WebKit::NetworkResourceLoader::didReceiveData): Ditto.

        (WebKit::NetworkResourceLoader::willSendRequest): Call abortInProgressLoad if the sync message failed.
        (WebKit::NetworkResourceLoader::canAuthenticateAgainstProtectionSpace): Ditto.
        * NetworkProcess/NetworkResourceLoader.h:

        Make connectionToWebProcessDidClose() pure virtual, moving its implementation to the subclasses:
        * NetworkProcess/SchedulableLoader.cpp:
        * NetworkProcess/SchedulableLoader.h:

        * NetworkProcess/SyncNetworkResourceLoader.cpp:
        (WebKit::SyncNetworkResourceLoader::start): Call cleanup().
        (WebKit::SyncNetworkResourceLoader::connectionToWebProcessDidClose): Call cleanup().
        (WebKit::SyncNetworkResourceLoader::cleanup): Factor out the sync loader cleanup code.
        * NetworkProcess/SyncNetworkResourceLoader.h:

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

        PDFPlugin: Return PDFKit's data instead of the original resource data for save/etc.
        https://bugs.webkit.org/show_bug.cgi?id=111956
        <rdar://problem/13352282>

        Reviewed by Alexey Proskuryakov.

        If we return the original resource data, we lose changes made to annotations.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::pdfDocumentDidLoad): Adopt the renamed rawData().
        (WebKit::PDFPlugin::saveToPDF): Use liveData so that "Save to PDF" persists changes to annotations.
        (WebKit::PDFPlugin::openWithNativeApplication): Use liveData so that "Open With [native application]" persists changes to annotations.

        * WebProcess/Plugins/PDF/PDFPluginAnnotation.h:
        * WebProcess/Plugins/PDF/PDFPluginAnnotation.mm:
        (WebKit::PDFPluginAnnotation::commit): Added, inform PDFPlugin that we're mutating the document.
        * WebProcess/Plugins/PDF/PDFPluginChoiceAnnotation.mm:
        (WebKit::PDFPluginChoiceAnnotation::commit): Let PDFPluginAnnotation do what it needs to inform PDFPlugin that we're going to mutate the document.
        * WebProcess/Plugins/PDF/PDFPluginTextAnnotation.mm:
        (WebKit::PDFPluginTextAnnotation::commit): Let PDFPluginAnnotation do what it needs to inform PDFPlugin that we're going to mutate the document.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        (WebKit::SimplePDFPlugin::didMutatePDFDocument): Added.
        (WebKit::SimplePDFPlugin::liveData): Added.
        (WebKit::SimplePDFPlugin::rawData): Renamed from data(). Return NSData for consistency.
        (WebKit::SimplePDFPlugin::pdfDocumentWasMutated): Added.
        * WebProcess/Plugins/PDF/SimplePDFPlugin.mm:
        (WebKit::SimplePDFPlugin::liveData): Return PDFKit's data if the user has mutated the
        document, otherwise the raw data. This way, PDFs that PDFKit can't process will still
        be downloadable as long as the user doesn't interact with annotations.
        (WebKit::SimplePDFPlugin::liveResourceData): Return a SharedData wrapping the PDFDocument's data.
        
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::getMainResourceDataOfFrame):
        Use a SharedData instead of raw data for getResourceData, and rename it liveResourceData().

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

        [wk2] WebProcess and WebContentService don't respect system localization
        https://bugs.webkit.org/show_bug.cgi?id=112091
        <rdar://problem/13233590>

        Reviewed by Dan Bernstein.

        Allow CFBundle to use localizations that don't exist in the main bundle,
        so that, for example, injected bundles can load and use strings from localized frameworks.

        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:

2013-03-11  Jochen Eisinger  <jochen@chromium.org>

        Rename DefinitelyProcessingUserGesture to DefinitelyProcessingNewUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=111959

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Notifications/WebNotificationManager.cpp:
        (WebKit::WebNotificationManager::didClickNotification):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::evaluate):
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle):

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

        PDFPlugin: Make scrolling between pages in non-continuous modes work
        https://bugs.webkit.org/show_bug.cgi?id=111415
        <rdar://problem/12555320>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        Add some more PDFLayerController SPI.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Override handleWheelEvent.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::handleWheelEvent):
        If PDFLayerController is in non-continuous mode, allow scrolling between
        pages by intercepting scroll events, and checking whether we're at the
        top or bottom of a page. If we are, and a single event exceeds the threshold
        of 20px (0px for legacy scroll wheels), we jump to the next or previous
        page and scroll to the right place. Do not allow momentum scrolling to
        switch pages.

2013-03-11  Mark Lam  <mark.lam@apple.com>

        Fix some WebDatabaseManagerProxy methods to only send to one WebProcsess
        instead of broadcasting to all WebProcesses.
        https://bugs.webkit.org/show_bug.cgi?id=112074.

        Reviewed by Alexey Proskuryakov.

        The reason for this is because the intent of these messages is to act on
        the tracker database that is shared between all WebProcesses. It is
        redundant and inefficient for multiple WebProcesses to service the same
        request/message. And because of multi-process contention on accessing
        the tracker database, the results returned to the UIProcess may also be
        erroneous.

        For example, if getDatabaseOrigins() is broadcasted to all WebProcesses,
        they will contend to open the tracker database at the same time. If one
        of these processes fails because the database is already in use, then
        it may return with an empty list when it should not be empty.

        With this fix, only one WebProcess gets the message and will perform the
        requested query/action on behalf of all WebProcesses.

        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToOneProcess):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteAllDatabases):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):

2013-03-11  Jeffrey Pfau  <jpfau@apple.com>

        List cache partitions as units instead of as their contents
        https://bugs.webkit.org/show_bug.cgi?id=111909

        Reviewed by Maciej Stachowiak.

        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::WebResourceCacheManager::cfURLCacheHostNames): Attempt to enumerate cache partitions based on information we have

2013-01-30  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.

        Allow the user to close the full screen window with Cmd-w by making the full screen window
        closable, and by intercepting performClose:.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController init]): Create a closable full screen window.
        (-[WKFullScreenWindowController performClose:]): When we receive a close request in full screen mode,
            animate out of full screen.

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

        [GTK] WebKit2-only build fails
        https://bugs.webkit.org/show_bug.cgi?id=112033

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Introduce the artifical dependency of libwebkit2gtk on libwebkitgtk only
        if building WebKit1 as well. Similarly with the WebKitPluginProcess, depend on libwebkitgtk
        only if building WebKit1, the dependency is otherwise not necessary.

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

        [wk2] Search With [your search provider here] should use NSPerformService in WebKit2/Mac
        https://bugs.webkit.org/show_bug.cgi?id=111995
        <rdar://problem/12975669>

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.h:
        (WebPageProxy): Add searchTheWeb().
        * UIProcess/WebPageProxy.messages.in: Add SearchTheWeb message.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::searchTheWeb): Added. Call out to NSPerformService to search with the system default
        search provider, in the browser.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin): Add performWebSearch().
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate performWebSearch:]): Added, forward the delegate callback to PDFPlugin.
        (WebKit::PDFPlugin::performWebSearch): Added, forward the search string to WebPageProxy.
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        (WebKit::WebContextMenuClient::searchWithGoogle): Don't build the old load-Google-in-the-main-frame code on Mac.
        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
        (WebKit::WebContextMenuClient::searchWithGoogle): Instead, send the search string to WebPageProxy.

2013-03-11  Helder Correia  <helder.correia@nokia.com>

        [WK2] Add C API preference: accelerated compositing for overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=111916

        Reviewed by Simon Fraser.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAcceleratedCompositingForOverflowScrollEnabled):
        (WKPreferencesGetAcceleratedCompositingForOverflowScrollEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:

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

        CoreIPC crash in NetworkProcess after WebProcess crash.
        <rdar://problem/13124146> and https://bugs.webkit.org/show_bug.cgi?id=112046

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::connectionToWebProcessDidClose): Don't null out the connection backpointer on crash.

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

        Make it possible to reuse sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=111883

        Reviewed by Anders Carlsson.

        This allows for properly keeping extensions in NetworkBlobRegistry for as long as
        they are needed.

        The patch also fixes a bug where extensions would leak when navigating between
        file:// pages.

        * NetworkProcess/SchedulableLoader.cpp:
        Revoke the extensions, but don't invalidate - we may need them later.

        * Shared/Downloads/Download.cpp:
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        Replaced invalidate() with revoke() and clearing out. SandboxExtension destructor
        now requires revocations wto be balanced, as otherwise understanding dual reference
        counting in SandboxExtension would be too difficult.

        * Shared/SandboxExtension.h: We now keep track of how many times the extension
        was consumed. Eventually, we should refactor the class to not have such duplicate
        reference counting.
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::SandboxExtension): Initialize use count.
        (WebKit::SandboxExtension::~SandboxExtension): We now require consume/revoke calls
        to be balanced. This is not hard to do in existing usage, and makes the design much
        more reliable.
        (WebKit::SandboxExtension::revoke): Don't permanently destroy the extension when
        invalidatid, we may need it in the future.
        (WebKit::SandboxExtension::consume): Added use counting.

        * Shared/WebMemorySampler.cpp: (WebKit::WebMemorySampler::stop): This extension
        is not going to be reused.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction): Pending extensions are not consumed,
        so there is no need to revoke.
        (WebKit::WebPage::SandboxExtensionTracker::invalidate): Pending extension is not
        consumed, and the other two always are.
        (WebKit::WebPage::SandboxExtensionTracker::setPendingProvisionalSandboxExtension):
        Pending extension is never consumed in place, no need to revoke.
        (WebKit::WebPage::SandboxExtensionTracker::didStartProvisionalLoad): Do not unset
        reused committed extension yet - we may need it later if provisional load fails.
        Thanks to use counting, we can now consume the same extension as both committed
        and provisional.
        (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad): Now the
        committed extension can be revoked and replaced.
        (WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad): Just revoke
        provisional extension, committed one is still in place.

2013-03-11  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Build fix after r143192 when SPELLCHECK is off

        Unreviewed build fix when SPELLCHECK macro is off.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit):

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

        WebPage::scaledSnapshotWithOptions returns a corrupt snapshot if you request a rect larger than the FrameView’s size
        https://bugs.webkit.org/show_bug.cgi?id=111820
        <rdar://problem/13375785>

        Reviewed by Simon Fraser.

        We have to clear the image - there could be area that won’t be painted by the FrameView,
        or the FrameView could have a transparent background.

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

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

        Fix a typo in http://trac.webkit.org/changeset/145332.

        Unreviewed.

        ENABLE() doesn't use the WTF_ prefix.

        * WebProcess/WebPage/WebPage.h:

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

        Add bundle API to get the current selection as a WKDOMRange
        https://bugs.webkit.org/show_bug.cgi?id=111947
        <rdar://problem/13205460>

        Reviewed by Gavin Barraclough.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController selectedRange]):
        Add new selectedRange property.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::frameWithSelection):
        (WebKit::WebPage::currentSelectionAsRange):
        * WebProcess/WebPage/WebPage.h:
        Get the range by finding the frame that has a selection, and then normalizing it.

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

        Add a heuristic to determine the “primary” snapshotted plugin
        https://bugs.webkit.org/show_bug.cgi?id=111932
        <rdar://problem/13270208>

        Reviewed by Dean Jackson.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        Forward didCommitLoad to WebPage. Move existing code that manipulated WebPage
        itself during didCommitLoad into WebPage, where it belongs.
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoad): Forward didFinishLoad to WebPage.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_didFindPrimarySnapshottedPlugin to false.
        (WebKit::WebPage::didCommitLoad): Move code from WebPageFrameLoaderClient.
        Reset the flag that says we've already found a snapshotted plugin.
        (WebKit::WebPage::didFinishLoad):
        Call determinePrimarySnapshottedPlugIn when any frame finishes loading. We call this for subframes,
        not just the main frame, in case the main frame loads with no "primary" plugins, but a subframe later loads with one.
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        Attempt to find the primary snapshotted plugin on the page, by hit-testing a grid of points spaced 200px apart.
        A plugin is considered if it is snapshotted and > 450x300. We scan vertically and left-to-right, only discarding
        a previous candidate if another candidate is at least 110% the size of the previous candidate.
        This tends to select plugins near the top left of the page, unless there is a significantly larger plugin elsewhere.
        (WebKit::WebPage::resetPrimarySnapshottedPlugIn):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):

2013-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145039 and r145096.
        http://trac.webkit.org/changeset/145039
        http://trac.webkit.org/changeset/145096
        https://bugs.webkit.org/show_bug.cgi?id=111945

        broke find indicator updates with scrolling subframes
        (Requested by thorton on #webkit).

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scroll):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2013-03-10  Andreas Kling  <akling@apple.com>

        WebPluginSiteDataManager should use OwnPtr.
        <http://webkit.org/b/111940>

        Reviewed by Anders Carlsson.

        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::invalidate):
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        (WebKit::WebPluginSiteDataManager::didGetSitesWithDataForAllPlugins):
        (WebKit::WebPluginSiteDataManager::didClearSiteDataForAllPlugins):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        (WebPluginSiteDataManager):

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

        [GTK][WK2] Fix compilation warning missing-field-initializers in webkit-2.0 stable branch
        https://bugs.webkit.org/show_bug.cgi?id=111863

        Reviewed by Benjamin Poulain.

        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (attachUIClientToView): Include missing initializer for pluginLoadPolicy.

2013-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145254, r145264, and r145288.
        http://trac.webkit.org/changeset/145254
        http://trac.webkit.org/changeset/145264
        http://trac.webkit.org/changeset/145288
        https://bugs.webkit.org/show_bug.cgi?id=111917

        Test breakage hints at conceptual unsoundness (Requested by ap
        on #webkit).

        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::invalidateSandboxExtensions):
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * Shared/SandboxExtension.h:
        (SandboxExtension):
        (WebKit::SandboxExtension::invalidate):
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::stop):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::SandboxExtension):
        (WebKit::SandboxExtension::invalidate):
        (WebKit::SandboxExtension::consume):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::SandboxExtensionTracker::invalidate):
        (WebKit::WebPage::SandboxExtensionTracker::setPendingProvisionalSandboxExtension):
        (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad):
        (WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad):

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

        Don't snapshot Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=111899

        Reviewed by Tim Horton.

        If the plugin is Java, return true from shouldAlwaysAutoStart.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::shouldAlwaysAutoStart): Check the mimetype for Java.

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

        <rdar://problem/13338743> Fix sandbox profile preprocessor flags for compatibility with new clang.

        Reviewed by Alexey Proskuryakov.
        Patch by Bob Wilson.

        * DerivedSources.make: Only use -traditional when we have to work around old
        behavior of -std=c89.

2013-03-08  Joone Hur  <joone.hur@intel.com>

        Unreviewed build fix for EFL, GTK and Qt after r145254.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::revoke):

2013-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        non-Mac ports build fix after r145235.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::createInspectorPageGroup):

2013-03-08  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Add a feature flag for 'view-mode' Media Feature, disable it on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111297

        Reviewed by Kenneth Rohde Christiansen.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:

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

        Make it possible to reuse sandbox extensions
        https://bugs.webkit.org/show_bug.cgi?id=111883

        Reviewed by Anders Carlsson.

        Replaced invalidate() with revoke().

        We now count how many times consume() was called, and keep the extension active
        for as long as revoke() hasn't been called as many times. Also, we only permanently
        destroy the extension in destructor.

        This allows for properly keeping extensions in NetworkBlobRegistry for as long as
        they are needed.

        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::invalidateSandboxExtensions):
        * Shared/Downloads/Download.cpp:
        (WebKit::Download::didFinish):
        (WebKit::Download::didFail):
        (WebKit::Download::didCancel):
        * Shared/SandboxExtension.h:
        (SandboxExtension):
        * Shared/WebMemorySampler.cpp:
        (WebKit::WebMemorySampler::stop):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::SandboxExtension):
        (WebKit::SandboxExtension::revoke):
        (WebKit::SandboxExtension::consume):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):
        (WebKit::WebPage::SandboxExtensionTracker::invalidate):
        (WebKit::WebPage::SandboxExtensionTracker::setPendingProvisionalSandboxExtension):
        (WebKit::WebPage::SandboxExtensionTracker::didCommitProvisionalLoad):
        (WebKit::WebPage::SandboxExtensionTracker::didFailProvisionalLoad):

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

        [WK2][GTK] Invalid request returned by webkit_download_get_request if called before download starts
        https://bugs.webkit.org/show_bug.cgi?id=111574

        Reviewed by Alexey Proskuryakov.

        webkit_download_get_request() creates the WebKitURIRequest object
        on demand using the ResourceRequest from the DownloadProxy. The
        ResourceRequest of the DownloadProxy is set in
        DownloadProxy::didStart(), so if we call
        webkit_download_get_request() before didStart we return an invalid
        WebKitURIRequest created from a NULL ResourceRequest. This is not
        a problem for downloads started in the web process, because we
        create the WebKitDownload after DownloadProxy::didStart(). For
        downloads started manually with webkit_web_context_download_uri()
        we need to create download object with the ResourceRequest passed
        to the DownloadProxy.

        * UIProcess/API/gtk/WebKitDownload.cpp:
        (webkitDownloadCreateForRequest): New helper function for
        downloads started manually to created them with a given
        ResourceRequest.
        * UIProcess/API/gtk/WebKitDownloadPrivate.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextStartDownload): Use
        webkitDownloadCreateForRequest().
        * UIProcess/API/gtk/tests/TestDownloads.cpp:
        (testDownloadLocalFile):
        (testDownloadLocalFileError):
        (testDownloadRemoteFile):
        (testDownloadRemoteFileError):
        (testPolicyResponseDownload):

2013-03-07  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13363499> Blobs are not cleaned up when WebProcess terminates
        https://bugs.webkit.org/show_bug.cgi?id=111803

        Reviewed by Brady Eidson.

        Track which blobs were created for each connection, and unregister them when
        the connection closes.

        Normally, this happens when a document is destroyed through PublicURLManager
        in WebProcess. But we don't get there when the web process crashes, or is terminated
        without waiting for document destruction.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):
        (WebKit::NetworkBlobRegistry::connectionToWebProcessDidClose):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):

2013-03-08  Timothy Hatcher  <timothy@apple.com>

        Make the WebKit2 Web Inspector use tiled drawing and accelerated drawing.

        <rdar://problem/12676223>

        Reviewed by David Kilzer.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::createInspectorPageGroup): Call setAcceleratedDrawingEnabled with true on 10.8+.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (-[WKWebInspectorWKView _shouldUseTiledDrawingArea]): Added. Return YES on 10.8+.

2013-03-08  Huang Dongsung  <luxtella@company100.net>

        Coordinated Graphics: Handle scrolling correctly.
        https://bugs.webkit.org/show_bug.cgi?id=111406

        Reviewed by Simon Fraser.

        Coordinated Graphics deals with fast scrolling and slow scrolling in the same
        routine, so WebChromeClient::invalidateContentsForSlowScroll() should call
        DrawingArea:scroll().

        When CoordinatedLayerTreeHost::scrollNonCompositedContents() is called, we
        should call scheduleLayerFlush() to notify to UI Process. In addition, when we
        don't use fixed layout, we should call setNonCompositedContentsNeedDisplay() to
        update non composited contents.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::invalidateContentsForSlowScroll):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::scrollNonCompositedContents):

2013-03-08  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Remove EwkView::setImageData()
        https://bugs.webkit.org/show_bug.cgi?id=111849

        Reviewed by Andreas Kling.

        EwkView::setImageData() removed as it is not used at the moment 
        (it used to be part of eliminated non coord graphics code path). 

        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::BackingStore::incorporateUpdate):

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

        [GTK] Memory leak in webkit_web_view_load_request() in WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=111160

        Reviewed by Benjamin Poulain.

        leakRef() is used for the returned PassRefPtr without taking the
        ownership of the leaked ref.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_request): Use RefPtr local variable.

2013-03-07  Huang Dongsung  <luxtella@company100.net>

        [EFL] EwkView should keep css position instead of scroll position in device pixel.
        https://bugs.webkit.org/show_bug.cgi?id=110847

        Reviewed by Kenneth Rohde Christiansen.

        Signed off for WebKit2 by Benjamin Poulain.

        There are bugs that some code expect that EwkView::pagePosition() returns css
        position while others expect that it returns scroll position in device pixel.
        In addition, some code call EwkView::setPagePosition() with css position while
        others call it with scroll position in device pixel.

        This patch makes all code use setPagePosition() and pagePosition() with
        UI pixels (a.k.a Density Independent Pixel).

        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::paintToCairoSurface):
        (WebKit::WebView::updateViewportSize):
        (WebKit::WebView::transformToScene):
        (WebKit::WebView::pageDidRequestScroll):

2013-03-07  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=111801
        https://bugs.webkit.org/show_bug.cgi?id=111801

        Reviewed by Geoff Garen.

        Move unnecessary includes out of headers.

        * NetworkProcess/HostRecord.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkResourceLoadScheduler.cpp:
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/SchedulableLoader.cpp:
        * NetworkProcess/SchedulableLoader.h:
        * NetworkProcess/SyncNetworkResourceLoader.cpp:

2013-03-07  Andreas Kling  <akling@apple.com>

        Resizing Cappuccino is very laggy on WebKit since Safari 5.1
        <http://webkit.org/b/71354>
        <rdar://problem/10565998>

        Reviewed by Anders Carlsson.

        On Mac, we already cache the window rect through the WindowAndViewFramesChanged
        message, so simply return that in WebChromeClient::windowRect() instead of
        sending a synchronous query to the UIProcess.

        If a programmatic resize is requested, we bypass the cache until we've received
        a new WindowAndViewFramesChanged message. This compromise allows us to return
        cached rects in the common case, and handles creating a new window and immediately
        resizing it gracefully.

        Changed WindowAndViewFramesChanged to pass FloatRect/FloatPoint rather than
        IntRect/IntPoint to match the ChromeClient::windowRect() return type.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateWindowAndViewFrames]):
        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::windowAndViewFramesChanged):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::windowAndViewFramesChanged):
        * WebProcess/Plugins/PluginView.h:
        (PluginView):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::setWindowRect):
        (WebKit::WebChromeClient::windowRect):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::sendSetWindowFrame):
        (WebKit::WebPage::windowAndViewFramesChanged):
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        (WebKit::WebPage::windowFrameInScreenCoordinates):
        (WebKit::WebPage::viewFrameInWindowCoordinates):
        (WebKit::WebPage::hasCachedWindowFrame):
        (WebKit::WebPage::accessibilityPosition):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):

2013-03-07  Alexey Proskuryakov  <ap@apple.com>

        Don't try to create a sandbox extension when path is empty
        https://bugs.webkit.org/show_bug.cgi?id=111788

        Reviewed by Anders Carlsson.

        * Shared/FileAPI/BlobRegistrationData.cpp:
        (WebKit::BlobRegistrationData::BlobRegistrationData): Skip File objects with empty
        paths to avoid logging an error to console.

2013-03-07  Mark Lam  <mark.lam@apple.com>

        WebPageProxy::exceededDatabaseQuota() needs to be serialized.
        https://bugs.webkit.org/show_bug.cgi?id=111631.

        Reviewed by Geoffrey Garen.

        Previously, WebPageProxy::exceededDatabaseQuota() is called synchronously
        with script execution in the WebProcess. Hence, it is never called in a
        recursive manner.

        In webkit2, we can have multiple WebProcesses concurrently triggering a
        call to this function. While the function is waiting on feedback from a
        UI dialog, the wait loop may re-enter the function to service a second
        request to call this function from another WebProcess. This results in
        problems where some of the WebProcesses will not get a proper reply, and
        therefore hangs perpetually waiting for a non-forthcoming reply.

        This changeset changes the function to queue the requests and ensure
        that we do not recursively callback to the UI client.

        * Platform/CoreIPC/HandleMessage.h:
        (CoreIPC::callMemberFunction):
        * UIProcess/WebPageProxy.cpp:
        (ExceededDatabaseQuotaRecords):
        (Record):
        (WebKit::ExceededDatabaseQuotaRecords::areBeingProcessed):
        (WebKit::ExceededDatabaseQuotaRecords::ExceededDatabaseQuotaRecords):
        (WebKit::ExceededDatabaseQuotaRecords::~ExceededDatabaseQuotaRecords):
        (WebKit::ExceededDatabaseQuotaRecords::shared):
        (WebKit::ExceededDatabaseQuotaRecords::createRecord):
        (WebKit::ExceededDatabaseQuotaRecords::add):
        (WebKit::ExceededDatabaseQuotaRecords::next):
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

2013-03-07  Jeffrey Pfau  <jpfau@apple.com>

        CFNetwork cache partitioning does not work properly on subdomains
        https://bugs.webkit.org/show_bug.cgi?id=111772

        Reviewed by David Kilzer.

        Ensure that the CFString is UTF-8 so that WKCFURLCacheCopyAllHostNamesInPersistentStoreForPartition will always work.

        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::partitionName): Create a UTF-8 CFString explicitly

2013-03-07  Beth Dakin  <bdakin@apple.com>

        Need API to draw custom overhang area
        https://bugs.webkit.org/show_bug.cgi?id=111679
        -and corresponding-
        <rdar://problem/13291415>

        Reviewed by Simon Fraser.

        The new API is WKBundlePageSetTopOverhangImage() and 
        WKBundlePageSetBottomOverhangImage(). When the API is called, WebPage will get 
        GraphicsLayers for the appropriate area from FrameView, and then set the image as 
        the contents of the layer.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetTopOverhangImage):
        (WKBundlePageSetBottomOverhangImage):
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/WebPage/WebPage.h:
        (WebPage):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setTopOverhangImage):
        (WebKit):
        (WebKit::WebPage::setBottomOverhangImage):

2013-03-07  Gavin Barraclough  <barraclough@apple.com>

        Reduce page cache size on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111795

        Rubber stamped by Geoff Garen

        5 entries is unnecessarily large; research show 3 should suffice.
        On a low memory warning we should clear this completely.

        * Shared/CacheModel.cpp:
        (WebKit::calculateCacheSizes):
            - reduce maximum to 3.

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

        Add a didFocusTextField callback to the injected bundle form client
        https://bugs.webkit.org/show_bug.cgi?id=111771

        Reviewed by Andreas Kling.

        Add a new client callback that's invoked whenever a text input field is focused.

        * Shared/APIClientTraits.cpp:
        (WebKit):
        * Shared/APIClientTraits.h:
        * WebProcess/InjectedBundle/API/c/WKBundlePage.h:
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::didFocusTextField):
        (WebKit):
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:
        (InjectedBundlePageFormClient):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedNodeChanged):

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

        Null-check the page overlay before trying to use it.

        Reviewed by Simon Fraser.

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

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

        [GTK] Limit the supported compilers to GCC >= 4.7 and Clang >= 3.0
        https://bugs.webkit.org/show_bug.cgi?id=109932

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Replace references to SYMBOL_VISIBILITY_INLINES and SYMBOL_VISIBILITY variables with the actual flags.
        They are now available by default due to the limited set of supported compilers.

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

        [GTK] Enable translations for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=111398

        Reviewed by Martin Robinson.

        * GNUmakefile.am: define PACKAGE_LOCALE_DIR when building WebProcess's main module.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainGtk): register the i18n domain name, and prefer UTF-8, since
        we're GTK+; at the moment we're just using the same name as WebKitGTK+, pro: the
        translation module can be reused, con: you can't have different versions of
        WebKitGTK+ and WebKit2GTK+ installed, because the module would not be fit for reuse
        in that case.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::childSetupFunction): do not set LC_ALL environment variable explicitly,
        the child process will already inherit the environment of the parent, which should
        have all the variables set properly.

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

        SandboxExtension::createHandle raises an uncaught Objective-C exception if path is empty
        https://bugs.webkit.org/show_bug.cgi?id=111689

        Reviewed by Filip Pizlo.

        * Shared/mac/SandboxExtensionMac.mm: (WebKit::SandboxExtension::createHandle):
        Use a function from WebCore platform layer instead of Foundation one equivalent.
        We already do this elsewhere in this file.

2013-03-06  Tim Horton  <timothy_horton@apple.com>

        [wk2] Page overlays shouldn't dirty the entire layer when flushing if the main frame can't scroll
        https://bugs.webkit.org/show_bug.cgi?id=111662
        <rdar://problem/13355808>

        Reviewed by Simon Fraser.

        Instead of setNeedsDisplay()ing the whole page overlay layer every time through
        TCADA::flushLayers, do it at scroll time instead. Repainting on scroll is
        necessary to keep things painted in the right place when we scroll (the overlay
        is fixed to the size of the view), but is quite wasteful in apps that don’t scroll.

        This works with threaded scrolling because overlay installation forces us
        into main-thread scrolling mode.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scroll):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):

2013-03-06  Tim Horton  <timothy_horton@apple.com>

        [wk2] Page overlays should use the accelerated drawing setting instead of hardcoding it on
        https://bugs.webkit.org/show_bug.cgi?id=111654
        <rdar://problem/13364085>

        Reviewed by Simon Fraser.

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

2013-03-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Enable interactive form validation for email and url input type validation
        https://bugs.webkit.org/show_bug.cgi?id=111026

        Reviewed by Laszlo Gombos.

        WebKit EFL can check if input value is valid by enabling this feature.

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

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

        [Mac] Synthetic ResourceResponses cannot be sent over IPC without losing most information
        https://bugs.webkit.org/show_bug.cgi?id=111623

        Reviewed by Brady Eidson.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        (CoreIPC::::encode): Made the decision on whether to serialize WebCore data in
        ResourceResponse dynamic. If the platform data is out of date, we need both
        (because some platforms use encodePlatformData() to pass additional information).
        (CoreIPC::::decode): Decode platform data first, because this overwrites the ResourceResponse.

        * Shared/mac/WebCoreArgumentCodersMac.mm: (CoreIPC::::encodePlatformData): Don't
        encode NSURLResponse if it's out of date. We may have a bad NSURLResponse with 0
        status code given to client, but it was almost certainly the same on sending side.
        WebCore doesn't mutate real responses - it either keeps them as is, or builds
        entirely synthetic ones.

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

        Default mouse cursor behavior should be auto-hide for full screen video with custom controls
        https://bugs.webkit.org/show_bug.cgi?id=107601

        Reviewed by Beth Dakin.

        Enable the CURSOR_VISIBILITY feature.

        * Configurations/FeatureDefines.xcconfig:

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

        [GTK][WK2] Implement WebInspector::localizedStringsURL() to return the file URL of localizedStrings.js
        https://bugs.webkit.org/show_bug.cgi?id=111448

        Reviewed by Alexey Proskuryakov.

        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.

        * WebProcess/WebPage/gtk/WebInspectorGtk.cpp:
        (WebKit::WebInspector::localizedStringsURL):

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

        [EFL][WK2] REGRESSION(r143582): API test EWK2UnitTestBase.ewk_view_contents_size_changed failing
        https://bugs.webkit.org/show_bug.cgi?id=110608

        Reviewed by Kenneth Rohde Christiansen.

        Test was expecting ContentsSizeChanged signal from ViewClientEfl, but
        WebView was not calling client callback if useFixedLayout() is true.

        This patch prevent early return if useFixedLayout() is true and call
        client callback didChangeContentsSize(), which will emit the signal.

        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didChangeContentsSize):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::didChangeContentsSize):

2013-03-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [WK2][GTK] Fix unit test WebKit2APITests/WebKitWebView/mouse-target
        https://bugs.webkit.org/show_bug.cgi?id=82866

        Reviewed by Martin Robinson.

        Test was failing because of new media controls needs more space to be
        painted than just 10x10 pixels. This is similar to r144070.

        * UIProcess/API/gtk/tests/TestWebKitWebView.cpp:
        (testWebViewMouseTarget): Modified HTML in order to give more space to the media controls.

2013-03-06  Tim Horton  <timothy_horton@apple.com>

        [wk2] Page Overlays: Hook up the layer border/repaint counter setting to the overlay layer
        https://bugs.webkit.org/show_bug.cgi?id=111547
        <rdar://problem/13355801>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
        Keep the page overlay layer's debug border and repaint counter settings updated.

2013-03-06  Geoffrey Garen  <ggaren@apple.com>

        Joing the adoptNS/adoptCF/adoptRef club.
        https://bugs.webkit.org/show_bug.cgi?id=111467

        Reviewed by Darin Adler.

        Responding to review comments by Darin Adler.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess): Tighten up this code
        by reducing extraneous local variables.

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

        Track sandbox extensions for blobs in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=111484

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj:
        * NetworkProcess/FileAPI: Added.
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp: Added.
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h: Added.
        Added a registry that wraps normal in-process "BlobRegistryImpl", and also tracks
        sandbox extensions for blobs. It will also track process connections, so that
        blobs could be removed when a process crashes.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        Use NetworkBlobRegistry.

        * NetworkProcess/SchedulableLoader.h:
        * NetworkProcess/SchedulableLoader.cpp:
        (WebKit::SchedulableLoader::SchedulableLoader): Add extensions for blobs, both in
        request URL and in request data.
        (WebKit::SchedulableLoader::consumeSandboxExtensions): Request may now have multiple
        extensions.
        (WebKit::SchedulableLoader::invalidateSandboxExtensions): Ditto.

        * Shared/FileAPI/BlobRegistrationData.cpp: Fixed extension creation - actually
        store the result.

2013-03-06  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix the Mac build after r144787
        https://bugs.webkit.org/show_bug.cgi?id=111569

        Reviewed by Csaba Osztrogonác.

        Use uint_64 explicitly instead of size_t.

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

2013-03-05  Kent Tamura  <tkent@chromium.org>

        Rename WebCore/editing/visible_units.* to VisibleUnits.*
        https://bugs.webkit.org/show_bug.cgi?id=111426

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebPage/mac/WebPageMac.mm:

2013-03-06  Zeno Albisser  <zeno@webkit.org>

        DataReference::vector() should be const.
        https://bugs.webkit.org/show_bug.cgi?id=109928

        Reviewed by Anders Carlsson.

        * Platform/CoreIPC/DataReference.h:
        (CoreIPC::DataReference::vector):

2013-03-06  Luiz Agostini  <luiz.agostini@nokia.com>

        Accelerated overflow scrolling for Coordinated Graphics.
        https://bugs.webkit.org/show_bug.cgi?id=110323

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

        A scroll offset is applied to individual layers on UI process and the
        web process is notified assynchronously.
        The new API WKCoordinatedScene may be used to scroll layers in the UI process.

        * CMakeLists.txt:

        Encoding and decoding the new members of CoordinatedGraphicsLayerState.

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

        Adding acceleratedCompositingForOverflowScrollEnabled to WebPreferencesStore.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

        New API WKCoordinatedScene is used to scroll layers on UI side.

        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.cpp:
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.h:
        * UIProcess/CoordinatedGraphics/WKCoordinatedSceneAPICast.h:

        A new message is used to send scroll commit messages to web process.

        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::commitScrollOffset):
        (WebKit):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (CoordinatedLayerTreeHostProxy):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::~CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::detachLayer):
        (WebKit::CoordinatedLayerTreeHost::createGraphicsLayer):
        (WebKit::CoordinatedLayerTreeHost::setVisibleContentsRect):
        (WebKit::CoordinatedLayerTreeHost::purgeBackingStores):
        (WebKit::CoordinatedLayerTreeHost::commitScrollOffset):
        (WebKit):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.messages.in:

2013-03-06  Huang Dongsung  <luxtella@company100.net>

        [EFL][WK2] Convert from device view size to UI view size only in EwkView.
        https://bugs.webkit.org/show_bug.cgi?id=110197

        Reviewed by Kenneth Rohde Christiansen.

        Signed off for WebKit2 by Benjamin Poulain.

        Device scale factor is a property of the physical display, so only EwkView
        should deal with converting device view size to UI (a.k.a Density Independent Pixel)
        view size. It increases readability because we can regard a view size in
        other classes (e.g. WebView, PageViewportController, WebPage) except for
        EwkView as UI size.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setDeviceScaleFactor):
        (EwkView::setDeviceSize):
        (EwkView::size):
        (EwkView::deviceSize):
        (EwkView::scheduleUpdateDisplay):
        (EwkView::createGLSurface):
        (EwkView::handleEvasObjectCalculate):
        * UIProcess/API/efl/EwkView.h:
        (EwkView):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::paintToCurrentGLContext):
        (WebKit::WebView::updateViewportSize):

2013-03-06  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [EFL][WK2] Use Vector::reserveInitialCapacity() in WebEventFactory::createWebTouchEvent()
        https://bugs.webkit.org/show_bug.cgi?id=111530

        Reviewed by Benjamin Poulain.

        In WebEventFactory::createWebTouchEvent(), when constructing the vector of touch points,
        we already know in advance the total number of touch points. Therefore, we should
        leverage WTF::Vector::reserveInitialCapacity() and WTF::Vector::uncheckedAppend() to save
        some capacity checks.

        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebTouchEvent):

2013-03-05  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2][EFL] Enable asynchronous spell checking by default
        https://bugs.webkit.org/show_bug.cgi?id=111295

        Reviewed by Benjamin Poulain.

        Asynchronous spell checking feature is disabled by default for wk2 platforms.
        It means all requests of spell checking are sent synchronously.

        WebKit-EFL implements requestCheckingOfString method which allows
        to check spelling asynchronously.

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

2013-03-05  Kondapally Kalyan  <kalyan.kondapally@intel.com>

        [EFL] Ensure right format is used in SnapshotImageGL.
        https://bugs.webkit.org/show_bug.cgi?id=111333

        Reviewed by Benjamin Poulain.

        GL_BGRA format is not standard for glReadPixels with GLES.
        This patch ensures that GL_RGBA is used in SnapshotImageGL
        while using GLES.

        * UIProcess/API/efl/SnapshotImageGL.cpp:
        (getImageSurfaceFromFrameBuffer):

2013-03-05  Geoffrey Garen  <ggaren@apple.com>

        Each web process truncates the disk cache to zero on launch
        https://bugs.webkit.org/show_bug.cgi?id=111467

        Reviewed by Darin Adler.

        Let's not do that.

        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        Reset the values if there is a quota error
        https://bugs.webkit.org/show_bug.cgi?id=111500

        Reviewed by Beth Dakin.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::didSetItem):
        (WebKit::StorageAreaProxy::resetValues):
        (WebKit):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):

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

        Keep track of pending value changes in StorageAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=111496

        Reviewed by Beth Dakin.

        Add a HashCountedSet to keep track of the number of pending value
        changes for a given key. If we get incoming storage events from other
        processes while we have pending value changes, ignore the events.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::setItem):
        (WebKit::StorageAreaProxy::didSetItem):
        (WebKit::StorageAreaProxy::dispatchStorageEvent):
        (WebKit::StorageAreaProxy::shouldApplyChangesForKey):
        (WebKit):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):

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

        [EFL] Build break with latest EFL libraries
        https://bugs.webkit.org/show_bug.cgi?id=111028

        Reviewed by Dirk Pranke.

        * PlatformEfl.cmake: Added ECORE_XXX_INCLUDE_DIRS.

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

        Use a named parameter for whether a quota error ocurred or not
        https://bugs.webkit.org/show_bug.cgi?id=111490

        Reviewed by Beth Dakin.

        This is clearer than setItem returning true on error.
        Also, actually set the item in the storage map.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::StorageArea::setItem):
        (WebKit::StorageManager::setItem):

2013-03-05  Kiran Muppala  <cmuppala@apple.com>

        Use new assertion API for process suppression on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111387

        Reviewed by Alexey Proskuryakov.

        * Shared/ChildProcess.h:
        (WebKit::ChildProcess::processSuppressionEnabled): Rename
        m_processVisibleAssertion to m_processSuppressionAssertion.
        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::setProcessSuppressionEnabled): Ditto. And,
        replace calls to WKNSProcessInfoProcessAssertionWithTypes() with call to
        -[NSProcessInfo beginSuspensionOfSystemBehaviors:].

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

        Move storageType() to StorageAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=111488

        Reviewed by Andreas Kling.

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

2013-03-05  Jeffrey Pfau  <jpfau@apple.com>

        Clear associated cache partitions when deleting origins' cache
        https://bugs.webkit.org/show_bug.cgi?id=111383

        Reviewed by Maciej Stachowiak.

        Clear the cache partitions associated with the origin being cleared.

        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit):
        (WebKit::partitionName):
        (WebKit::WebResourceCacheManager::clearCFURLCacheForHostNames):

2013-03-05  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] WebPageProxy::setThemePath() should check that the page is valid
        https://bugs.webkit.org/show_bug.cgi?id=109917

        Reviewed by Alexey Proskuryakov.

        WebPageProxy::setThemePath() should check that the page is valid before
        sending IPC message.

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

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

        <rdar://problem/13269245> Crashes creating WebKit processes in WKSandboxExtensionConsume
        https://bugs.webkit.org/show_bug.cgi?id=111456

        Reviewed by Anders Carlsson.

        It's too late to be draconian about this condition here, crashing doesn't help
        diagnose what went wrong when creating a sandbox extension.

        Other SandboxExtension functions already have null checks for WKSandboxExtensionRef,
        and so should consumePermanently().

        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandle): For now, added logging when extension
        creation fails. If that proves insufficiently helpful in practice, we can change
        to a CRASH() later.
        (WebKit::SandboxExtension::createHandleForTemporaryFile): Ditto.
        (WebKit::SandboxExtension::consumePermanently): Gracefully fail if there is no extension
        to consume.

2013-03-05  Gwang Yoon Hwang  <ryumiel@company100.net>

        Coordinated Graphics: CoordinatedGraphicsLayer makes CoordinatedGraphicsScene perform via CoordinatedGraphicsState.
        https://bugs.webkit.org/show_bug.cgi?id=108294

        Reviewed by Anders Carlsson.

        There are two changes in WK2.
        1. Change CoordinatedLayerTreeHostProxy to use CoordinatedGraphicsState.
        2. Add encode/decode of CoordinatedGraphicsState in CoordinatedGraphicsArgumentCoders.

        This patch is based on Dongsung Huang, and Noam's work in
        https://bugs.webkit.org/show_bug.cgi?id=108294

        No new tests, covered by existing tests.

        * Scripts/webkit2/messages.py:
        (headers_for_type):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (CoreIPC::::encode):
            Encoding UpdateImageBacking and CreateUpdateAtlas can fail when
            encoding WebCoordinatedSurface::Handle fails, but we don't
            recover in the case.
        (CoreIPC::::decode):
        (CoreIPC):
        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:
        (WebCore):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:
        (WebKit::CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsState):
        (WebKit):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h:
        (WebCore):
        (CoordinatedLayerTreeHostProxy):
        (WebKit::CoordinatedLayerTreeHostProxy::coordinatedGraphicsScene):
        * UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::flushPendingLayerChanges):
        (WebKit::CoordinatedLayerTreeHost::initializeRootCompositingLayerIfNeeded):
        (WebKit::CoordinatedLayerTreeHost::syncLayerState):
        (WebKit::CoordinatedLayerTreeHost::prepareCustomFilterProxiesIfNeeded):
        (WebKit):
        (WebKit::CoordinatedLayerTreeHost::updateImageBacking):
        (WebKit::CoordinatedLayerTreeHost::setBackgroundColor):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        (CoordinatedLayerTreeHost):

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

        Follow up to https://bugs.webkit.org/show_bug.cgi?id=111453, forgot to mark the files as Private.

        * WebKit2.xcodeproj/project.pbxproj:

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

        Elevate accessors of C-SPI API variants to Objective-C SPI
        https://bugs.webkit.org/show_bug.cgi?id=111453
        <rdar://problem/13340357>

        Reviewed by Alexey Proskuryakov.

        * Shared/mac/ObjCObjectGraphCoders.mm:
        * UIProcess/API/mac/WKBrowsingContextControllerInternal.h:
        * UIProcess/API/mac/WKBrowsingContextControllerPrivate.h:
        * UIProcess/API/mac/WKBrowsingContextGroup.mm:
        * UIProcess/API/mac/WKBrowsingContextGroupPrivate.h: Renamed from Source/WebKit2/UIProcess/API/mac/WKBrowsingContextGroupInternal.h.
        * UIProcess/API/mac/WKProcessGroup.mm:
        * UIProcess/API/mac/WKProcessGroupPrivate.h: Copied from Source/WebKit2/UIProcess/API/mac/WKProcessGroupInternal.h.
        * UIProcess/API/mac/WKView.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (-[WKWebProcessPlugInController _bundleRef]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInPrivate.h: Renamed from Source/WebKit2/UIProcess/API/mac/WKProcessGroupInternal.h.
        Add access to C-SPI WebKit types as Objective-C SPI.

2013-03-04  Alexey Proskuryakov  <ap@apple.com>

        Make AsyncFileReader work without ScriptExecutionContext
        https://bugs.webkit.org/show_bug.cgi?id=111376

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        * NetworkProcess/NetworkResourceLoader.h:
        Removed a dummy implementation of createAsyncFileStream, which is no longer needed.

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

        <rdar://problem/13345116> REGRESSION: Child processes get access to user cache
        and temporary directories instead of private ones

        Reviewed by Sam Weinig.

        * Shared/mac/ChildProcessMac.mm: (WebKit::ChildProcess::initializeSandbox):
        Restore the correct order of calls, so sandbox parameters respect WebKit pseudo
        containers.

2013-03-05  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r144698): Only enable SPEECH_SYNTHESIS for Mac
        <http://webkit.org/b/106742>

        Fixes the following build failures:

            Undefined symbols for architecture i386:
              "__ZTVN7WebCore25PlatformSpeechSynthesizerE", referenced from:
                  __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
              NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
              "__ZN7WebCore25PlatformSpeechSynthesizer19initializeVoiceListEv", referenced from:
                  __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
            ld: symbol(s) not found for architecture i386

        * Configurations/FeatureDefines.xcconfig:
        - Only set ENABLE_SPEECH_SYNTHESIS for the macosx platform.

2013-03-05  Tim Horton  <timothy_horton@apple.com>, Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [WK2] WTR needs an implementation of setAsynchronousSpellCheckingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=81042

        Reviewed by Enrica Casucci.

        Expose WK2 setting to enable/disabled asynchronous spell checking.
        It's used by WebKitTestRunner to reset the setting at the beginning
        of the test.
        WebKit2 ports might be interested in this setting if they are going
        to enable this feature.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetAsynchronousSpellCheckingEnabled):
        (WKPreferencesGetAsynchronousSpellCheckingEnabled):
        * UIProcess/API/C/WKPreferences.h:
        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetAsynchronousSpellCheckingEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setAsynchronousSpellCheckingEnabled):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        [WK2][EFL] Add requestCheckingOfString implementation.
        https://bugs.webkit.org/show_bug.cgi?id=108172

        Reviewed by Hajime Morrita.

        Provide implementation of 'requestCheckingOfString' for WK2-EFL.
        It uses the unified text checker feature.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::requestCheckingOfString):

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        Support WebSpeech - Speech Synthesis
        https://bugs.webkit.org/show_bug.cgi?id=106742

        Reviewed by Simon Fraser.

        Enable speech synthesis for the Mac.

        * Configurations/FeatureDefines.xcconfig:

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

        UI process storage areas should hold on to storage maps
        https://bugs.webkit.org/show_bug.cgi?id=111374

        Reviewed by Beth Dakin.

        Pass the session storage quota size through to the storage area constructor and
        create a StorageMap with the given quota size.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::StorageArea::create):
        (WebKit::StorageManager::StorageArea::StorageArea):
        (StorageManager::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        (WebKit::StorageManager::createSessionStorageNamespace):
        (WebKit::StorageManager::createSessionStorageNamespaceInternal):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):

2013-03-04  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        Unreviewed build fix after r144675.

        Work around picky/old C++ compilers by separating the '>>' in
        nested templates with a space.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):

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

        More work on UI side storage
        https://bugs.webkit.org/show_bug.cgi?id=111370

        Reviewed by Andreas Kling.

        Add a DispatchStorageEvent message and begin hooking it up.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        (WebKit::StorageManager::StorageArea::setItem):
        (WebKit):
        (WebKit::StorageManager::StorageArea::dispatchEvents):
        (WebKit::StorageManager::setItem):
        (WebKit::StorageManager::findStorageArea):
        * UIProcess/Storage/StorageManager.h:
        (StorageManager):
        * UIProcess/Storage/StorageManager.messages.in:
        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::setItem):
        (WebKit::StorageAreaProxy::dispatchStorageEvent):
        (WebKit):
        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):
        * WebProcess/Storage/StorageAreaProxy.messages.in:

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

        Unreviewed build fix: wrap references to PluginInfoStore with 
        guards for platforms which do not enable NETSCAPE_PLUGIN_AP.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::~WebContext):
        * UIProcess/WebContext.h:

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

        Create and destroy storage areas in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=111361

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::StorageArea):
        Keep track of listener connection and storage area ID pairs.
        
        (WebKit::StorageManager::StorageArea::~StorageArea):
        Assert that we don't have any listeners left.

        (WebKit::StorageManager::StorageArea::addListener):
        Add the pair to the set of listeners.
        
        (WebKit::StorageManager::StorageArea::removeListener):
        Remove the pair from the set of listeners.
        
        (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea):
        Given an origin, look up or create the storage area.

        (WebKit::StorageManager::createStorageArea):
        Create the storage area if it doesn't already exist.

        (WebKit::StorageManager::destroyStorageArea):
        Look up the storage area and destroy it.

        * UIProcess/Storage/StorageManager.h:
        Add a map of open storage areas.

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

        Add API to allow WK2 clients to query the list of installed plug-ins.
        https://bugs.webkit.org/show_bug.cgi?id=111245

        Reviewed by Alexey Proskuryakov.

        Add API in WKContext, implemented by WebContext, that allows callers to register a callback 
        retrieve an array containing installed plugin information. This API is exposed through WebContext 
        because it owns the PluginInfoStore used to fulfill the request.

        Bump the WKContextClient API by 1:
        * Shared/APIClientTraits.cpp:
        * Shared/APIClientTraits.h:
        * UIProcess/API/C/WKContext.h:

        Add a client protocol to PluginInfoStore to notify the client when plugIn information has been
        successfully loaded:
        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::PluginInfoStore): Initialize m_client to 0.
        (WebKit::PluginInfoStore::loadPluginsIfNecessary): If the client is present, notify after loading the plugin store.
        * UIProcess/Plugins/PluginInfoStore.h:
        (WebKit::PluginInfoStoreClient::~PluginInfoStoreClient): Default destructor.
        (WebKit::PluginInfoStoreClient::PluginInfoStoreClient): Default constructor.
        (WebKit::PluginInfoStore::setClient): Simple setter.
        (WebKit::PluginInfoStore::client): Simple getter.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Set self as the client of PluginInfoStore.
        (WebKit::WebContext::~WebContext): Clear the client of PluginInfoStore.
        (WebKit::WebContext::pluginInfoStoreDidLoadPlugins): Pass the callback to own client.
        * UIProcess/WebContext.h:
        * UIProcess/WebContextClient.cpp:
        (WebKit::WebContextClient::plugInInformationBecameAvailable): Pass the callback to the registered WK callback, if present.
        * UIProcess/WebContextClient.h:

2013-03-04  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Hook up Services
        https://bugs.webkit.org/show_bug.cgi?id=111246
        <rdar://problem/13062672>

        Reviewed by Alexey Proskuryakov.

        Make the Application->Services menu work when the focused selection is a PDFPlugin.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        (EditorState):
        Add isInPlugin property to EditorState.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validRequestorForSendType:returnType:]):
        If the selection is currently in a Plugin, we only currently have the ability
        to retrieve the selection as a plain-text string, so restrict sendType to NSStringPboardType.

        * WebProcess/Plugins/PDF/SimplePDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        Add getStringSelection.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        Add pdfLayerController:didChangeSelection: delegate method.

        * WebProcess/Plugins/PDF/PDFPlugin.h:
        (PDFPlugin):
        Add getStringSelection and notifySelectionChanged.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate pdfLayerController:didChangeSelection:]):
        Forward selection change notifications to our PDFPlugin.

        (WebKit::PDFPlugin::notifySelectionChanged):
        Forward selection change notifications to our WebPage.

        (WebKit::PDFPlugin::getStringSelection):
        Retrieve PDFLayerController's selection as a plain text string.
        
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::countFindMatches):
        (WebKit::PluginView::findString):
        Drive-bys, check for existance and initialization of the plugin before using it.

        (WebKit::PluginView::getStringSelection): Added.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::respondToChangedSelection):
        Use didChangeSelection instead of sending the EditorStateChanged message directly.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        If a plugin is focused and has a selection, return a EditorState that reflects that.
        Since PDFs aren't editable (when editing annotations, the plugin doesn't have focus),
        I'm not adding support for the editing-related properties when a plugin has focus.

        (WebKit::WebPage::focusedPluginViewForFrame):
        (WebKit::WebPage::pluginViewForFrame):
        Make these class methods instead of static functions so we can use them from
        WebPageMac too, instead of duplicating code there.

        (WebKit::WebPage::didChangeSelection): Added.

        * WebProcess/WebPage/WebPage.h:
        Add didChangeSelection and [focused]PluginViewForFrame.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getStringSelectionForPasteboard):
        Defer to the focused plugin (if it exists) when retrieving the plain-text selection.

2013-03-04  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        [WK2][EFL] Add callbacks to the WKViewClient to handle Web Process crash and relaunch
        https://bugs.webkit.org/show_bug.cgi?id=109828

        Reviewed by Kenneth Rohde Christiansen.

        Providing WKViewClient with Web Process crash and Web Process relaunch
        callbacks brings better design as WebView should not be aware of
        EFL-specific code handling the corresponding events.

        The implementation of the mentioned Web Process callbacks was also added.

        * UIProcess/API/C/efl/WKView.cpp:
        (WKViewSetThemePath):
        * UIProcess/API/C/efl/WKView.h:
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::webProcessCrashed):
        (WebKit):
        (WebKit::ViewClientEfl::webProcessDidRelaunch):
        (WebKit::ViewClientEfl::ViewClientEfl):
        * UIProcess/efl/ViewClientEfl.h:
        (ViewClientEfl):
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::setThemePath):

            Accepts WTF::String instead of WKStringRef as it is
            more appropriate for C++ API implementation class.

        (WebKit::WebView::processDidCrash):
        (WebKit::WebView::didRelaunchProcess):
        * UIProcess/efl/WebView.h:
        (WebView):
        * UIProcess/efl/WebViewClient.cpp:
        (WebKit::WebViewClient::webProcessCrashed):
        (WebKit):
        (WebKit::WebViewClient::webProcessDidRelaunch):
        * UIProcess/efl/WebViewClient.h:

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

        Complete the plug-in URL string before sending it to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=111355
        <rdar://problem/13326713>

        Reviewed by Andreas Kling.

        If the URL is not absolute, we won't be able to find it by path extension in the plug-in info store.

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

2013-03-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Some WebKit2 GTK+ unit tests are failing in 32 bits bot
        https://bugs.webkit.org/show_bug.cgi?id=111346

        Reviewed by Martin Robinson.

        The problem is the use of a temporary CString object in the macro
        g_assert_cmpstr. It's a common mistake because we usually forget
        that g_assert_cmpstr is not a function but a macro, that expands
        to multiple lines. This patch adds a new macro ASSERT_CMP_CSTRING
        with the same implementation that g_assert_cmpstr, but using
        CStrings instead of const char*. It fixes all the cases where a
        temporary CString was used in g_assert_cmpstr, and uses the new
        macro also for the cases where we were caching the CString just
        for g_assert_cmpstr.

        * UIProcess/API/gtk/tests/TestDownloads.cpp:
        (testDownloadRemoteFile):
        * UIProcess/API/gtk/tests/TestInspectorServer.cpp:
        (testInspectorServerPageList):
        * UIProcess/API/gtk/tests/TestLoaderClient.cpp:
        * UIProcess/API/gtk/tests/TestMain.h:
        * UIProcess/API/gtk/tests/TestResources.cpp:
        * UIProcess/API/gtk/tests/TestWebKitFaviconDatabase.cpp:
        (testGetFaviconURI):
        * UIProcess/API/gtk/tests/TestWebKitSettings.cpp:
        (assertThatUserAgentIsSentInHeaders):
        (testWebKitSettingsUserAgent):

2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Add build flag for FontLoader
        https://bugs.webkit.org/show_bug.cgi?id=111289

        Reviewed by Benjamin Poulain.

        Add ENABLE_FONT_LOAD_EVENTS build flag (disabled by default).

        * Configurations/FeatureDefines.xcconfig:

2013-03-03  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Rename delegate method from openWithPreview to openWithNativeApplication
        https://bugs.webkit.org/show_bug.cgi?id=111258

        Reviewed by Alexey Proskuryakov.

        * WebProcess/Plugins/PDF/PDFLayerControllerDetails.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFLayerControllerDelegate openWithNativeApplication]):
        Rename from openWithPreview to openWithNativeApplication to match PDFKit.

2013-03-03  Huang Dongsung  <luxtella@company100.net>

        [EFL][QT][WK2] Turn on ApplyDeviceScaleFactorInCompositor always.
        https://bugs.webkit.org/show_bug.cgi?id=110298

        Reviewed by Kenneth Rohde Christiansen.

        Currently, EFL and Qt turn on ApplyDeviceScaleFactorInCompositor when using
        fixed layout, but ApplyDeviceScaleFactorInCompositor is not related to fixed
        layout. It is confusing that a platform WebView deals with device view size or
        DIP view size case by case. So this patch always turns on
        ApplyDeviceScaleFactorInCompositor.

        In addition, move the code that turns on ScrollingCoordinatorEnabled to
        CoordinatedLayerTreeHost.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::setDeviceScaleFactor):
            We should make WebPage know new DIP size.
        (EwkView::setSize):
            When we set ApplyDeviceScaleFactorInCompositor to true, make WebPage
            know the DIP size as a view size.
        * UIProcess/efl/WebView.cpp:
        (WebKit::WebView::updateViewportSize):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setUseFixedLayout):
            WebPage sends the DIP size to Web Process even when we don't use fixed layout.

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

        Shared Web Workers have an incorrect visible process name
        https://bugs.webkit.org/show_bug.cgi?id=111277

        Reviewed by Dan Bernstein.

        * SharedWorkerProcess/SharedWorkerProcess.cpp:
        (WebKit::SharedWorkerProcess::initializeSharedWorkerProcess):
        * SharedWorkerProcess/SharedWorkerProcess.h:
        (SharedWorkerProcess):
        * SharedWorkerProcess/mac/SharedWorkerProcessMac.mm:
        (WebKit::SharedWorkerProcess::initializeProcessName):
        The SharedWorkerProcess is not an internet plug-in!

2013-03-03  Adam Barth  <abarth@webkit.org>

        Unreviewed attempted build fix. Adds back some includes removed in
        http://trac.webkit.org/changeset/144565.

        * Shared/WebRenderLayer.cpp:
        * Shared/WebRenderObject.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:

2013-03-03  Adam Barth  <abarth@webkit.org>

        Unreviewed rollout of http://trac.webkit.org/r144530
        As described in https://bugs.webkit.org/show_bug.cgi?id=111167 and
        https://bugs.webkit.org/show_bug.cgi?id=111035, this patch caused a
        large number of ASSERTs in chromium-win.

        * NetworkProcess/HostRecord.h:
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * NetworkProcess/NetworkResourceLoader.h:
        (WebCore):
        * Shared/WebRenderLayer.cpp:
        * Shared/WebRenderObject.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:

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

        WebKit2 is missing the setShowsURLsInToolTips preference
        https://bugs.webkit.org/show_bug.cgi?id=111259
        <rdar://problem/12991891>

        Reviewed by Maciej Stachowiak.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetShowsURLsInToolTipsEnabled):
        (WKPreferencesGetShowsURLsInToolTipsEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Pipe it through.

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

        Move computedStyleIncludingVisitedInfo from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109772

        Reviewed by Andreas Kling.

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

2013-03-01  Kiran Muppala  <cmuppala@apple.com>

        Remove call to set task priority of WebKit2 processes on Mac
        https://bugs.webkit.org/show_bug.cgi?id=111239

        Reviewed by Darin Adler.

        Remove call to set task prioirty of WebKit2 processes on Mac as it
        is no longer necessary.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize): Remove call to setpriority().

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

        Reduce amount of rebuilding when touching networking headers
        https://bugs.webkit.org/show_bug.cgi?id=111035

        Reviewed by Eric Seidel.

        Adding includes that are now necessary because WebCore headers don't have them
        any more.

        * NetworkProcess/HostRecord.h:
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/WebRenderLayer.cpp:
        * Shared/WebRenderObject.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:

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

        Make in-memory blobs work in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=111132

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLFromURL):
        (WebKit::NetworkConnectionToWebProcess::unregisterBlobURL):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        Implement BlobRegistry interface by using BlobRegistryImpl (same one as used in
        WebProcess in non-PPT mode).

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Added three messages
        needed for BlobRegistry.

        * NetworkProcess/NetworkProcess.cpp:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp: Added.
        * NetworkProcess/NetworkProcessPlatformStrategies.h: Added.
        Added a mostly empty platform strategy, just for FormData to talk to BlobRegistry.
        Perhaps we'll find a way to avoid this WebCore code path in NetworkProcess, because
        we obviously know which registry implementation is in use in this process.

        * Shared/FileAPI: Added.
        * Shared/FileAPI/BlobRegistrationData.cpp: Added.
        * Shared/FileAPI/BlobRegistrationData.h: Added.
        Added a class for passing BlobData and extension handles over IPC.
        This uses a trick with mutable a member to avoid copying decoded BlobStorageData.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/FileAPI: Added.
        * WebProcess/FileAPI/BlobRegistryProxy.cpp: Added.
        * WebProcess/FileAPI/BlobRegistryProxy.h: Added.
        A proxy implementation of BlobRegistry that just sends requests over IPC. We only
        need async ones.

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createBlobRegistry):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        Create an appropriate BlobRegistry.

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

        Uncomment ENABLE_SVG guards to avoid having WebKitPluginProcess link
        against libWebCoreSVG.la when SVG is disabled.

        Rubber-stamped by Gustavo Noronha.

        * GNUmakefile.am:

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

        Add SPI for marking a WebView as doing things on behalf of another process
        https://bugs.webkit.org/show_bug.cgi?id=111125

        Reviewed by Alexey Proskuryakov.

        * NetworkProcess/mac/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        Stub out sourceApplicationAuditData() client function.

2013-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144422 and r144424.
        http://trac.webkit.org/changeset/144422
        http://trac.webkit.org/changeset/144424
        https://bugs.webkit.org/show_bug.cgi?id=111167

        Caused over 20 tests to fail assertion on Chromium Win port as
        ASSERTION FAILED: m_platformRequestUpdated (Requested by
        toyoshim on #webkit).

        * NetworkProcess/HostRecord.h:
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * NetworkProcess/NetworkResourceLoader.h:
        (WebCore):
        * Shared/WebRenderLayer.cpp:
        * Shared/WebRenderObject.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:

2013-03-01  Andras Becsi  <andras.becsi@digia.com>

        [Qt][WK2] Fix failing API tests after r143935
        https://bugs.webkit.org/show_bug.cgi?id=111086

        Reviewed by Jocelyn Turcotte.

        Convert a leftorver resume call to the new resumeAndUpdateContent() call
        in PageViewportControllerClientQt so that the notifications about zoom
        animation state changes reach the API tests.

        * UIProcess/qt/PageViewportControllerClientQt.cpp:
        (WebKit::PageViewportControllerClientQt::scaleAnimationStateChanged):

2013-03-01  Grzegorz Czajkowski  <g.czajkowski@samsung.com>, Mariusz Grzegorczyk <mariusz.g@samsung.com>

        [WK2] Asynchronous spell checking implementation
        https://bugs.webkit.org/show_bug.cgi?id=109577

        Reviewed by Enrica Casucci.

        Associate the abstract 'WebCore::TextCheckingRequest' object with the unique identifier
        on WebProcess side. The request data from the 'TextCheckingRequest' are retrieved and
        passed to the UIProcess. The WK2 client (TextChecker{Gtk/Mac/Efl/Qt}.cpp) gets
        the 'TextCheckerCompletion' object with the request data and possibility to notify
        the WebProcess about the spelling results.
        Finally, the WebPage object calls on the proper 'TextCheckingRequest' object
        didSuccess/didCancel method to notify the WebCore about the spelling result.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        Add 'TextCheckerCompletion.{h/cpp}' to the WebKit2 cmake based and
        WK2-Gtk+ builds.

        * Scripts/webkit2/messages.py:
        (headers_for_type):
        Add exception for 'TextCheckingRequestData' class to properly find header
        file for it.

        * Shared/WebCoreArgumentCoders.cpp:
        * Shared/WebCoreArgumentCoders.h:
        Teach 'ArgumentCoder' how to encode/decode 'TextCheckingRequestData' class.

        * Target.pri:
        Add 'TextCheckerCompletion.{h/cpp}' to the WK2-Qt build.

        * UIProcess/TextChecker.h:
        Add 'requestCheckingOfString' method to the TextChecker's interface.

        * UIProcess/TextCheckerCompletion.cpp: Added.
        (WebKit::TextCheckerCompletion::create):
        (WebKit::TextCheckerCompletion::TextCheckerCompletion):

        (WebKit::TextCheckerCompletion::spellDocumentTag):
        Return the WebPageProxy's spellDocumentTag as the client might be
        interested in from which page the request came.

        (WebKit::TextCheckerCompletion::textCheckingRequestData):
        Allow to retrieve 'TextCheckingRequestData' object.

        (WebKit::TextCheckerCompletion::didFinishCheckingText):
        (WebKit::TextCheckerCompletion::didCancelCheckingText):
        Notify the 'WebPageProxy' object that the given request has been
        handled or canceled.

        * UIProcess/TextCheckerCompletion.h: Added.
        Introduce a new class for WK2 to retrieve the request data and
        call didFinishCheckingText/didCancelCheckingText.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestCheckingOfString):
        Create 'TextCheckerCompletion' object and pass it
        to the 'TextChecker::requestCheckingOfString' method.

        (WebKit::WebPageProxy::didFinishCheckingText):
        (WebKit::WebPageProxy::didCancelCheckingText):
        Send the messages to WebProcess that the given request has been
        handled or canceled.

        * UIProcess/WebPageProxy.h:
        (WebPageProxy):
        Add public declarations for 'didFinishCheckingText', 'didCancelCheckingText'.
        Add private declarations for 'requestCheckingOfString'.
        Move the 'spellDocumentTag()' method to to the public section to be
        accessible from 'TextCheckerCompletion' class.

        * UIProcess/WebPageProxy.messages.in:
        A new entry for 'RequestCheckingOfString'.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit):
        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit):
        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit):
        * UIProcess/qt/TextCheckerQt.cpp:
        (WebKit::TextChecker::requestCheckingOfString):
        (WebKit):
        Add dummy implementations for 'requestCheckingOfString'.

        * WebKit2.xcodeproj/project.pbxproj:
        Add 'TextCheckerCompletion.{h/cpp} to Mac build.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::generateTextCheckingRequestID):
        Helper function to generate the unique identifier for the abstract
        'TextCheckingRequest' object.

        (WebKit::WebEditorClient::requestCheckingOfString):
        Associate 'TextCheckingRequest' with the unique identifier and add them
        to the map object.
        Get the request data and send it to the UIProcess.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addTextCheckingRequest):
        Add the identifier and the request to the map object.

        (WebKit::WebPage::didFinishCheckingText):
        (WebKit::WebPage::didCancelCheckingText):
        Call didSucceed/didCancel on the 'TextCheckingRequest' to notify the WebCore
        about spellcheking results.
        Remove the request from the map object.

        * WebProcess/WebPage/WebPage.h:
        Add declarations for 'addTextCheckingRequest', 'didFinishCheckingText' and
        'didCancelCheckingText.'

        * WebProcess/WebPage/WebPage.messages.in:
        Add a new entry for DidFinishCheckingText, DidCancelCheckingText.

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

        Reduce amount of rebuilding when touching networking headers
        https://bugs.webkit.org/show_bug.cgi?id=111035

        Reviewed by Eric Seidel.

        Adding includes that are now necessary because WebCore headers don't have them
        any more.

        * NetworkProcess/HostRecord.h:
        * NetworkProcess/NetworkResourceLoadScheduler.h:
        * NetworkProcess/NetworkResourceLoader.h:
        * Shared/WebRenderLayer.cpp:
        * Shared/WebRenderObject.cpp:
        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/Plugins/PluginView.cpp:
        * WebProcess/WebCoreSupport/WebContextMenuClient.cpp:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/WebProcess.cpp:
        * WebProcess/soup/WebProcessSoup.cpp:

2013-02-28  Seokju Kwon  <seokju.kwon@gmail.com>

        [WK2] Refactoring : Fix indentation and braces in WebInspectorClient.h|cpp
        https://bugs.webkit.org/show_bug.cgi?id=109925

        Reviewed by Benjamin Poulain.

        The contents of an outermost namespace block should not be indented.
        And One-line control clauses should not use braces.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::closeInspectorFrontend):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        (WebCore):

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

        Add a pre-bootstrap message for NetworkProcess XPC service
        https://bugs.webkit.org/show_bug.cgi?id=111127

        Reviewed by Sam Weinig.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (WebKit::XPCServiceEventHandler): Hold on to the pre-bootstrap message.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler): Ditto.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService): Send a pre-bootstrap message for NetworkProcess
        XPC service.

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

        Need API to control page underlay color
        https://bugs.webkit.org/show_bug.cgi?id=110918

        Reviewed by Simon Fraser.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        Encode underlayColor.
        (WebKit::WebPageCreationParameters::decode):
        Decode underlayColor.

        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters):
        Add underlayColor member.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView underlayColor]):
        Accessor; retrieves the WebCore::Color from the WebPageProxy and converts it to an NSColor.
        (-[WKView setUnderlayColor:]):
        Mutator; converts the NSColor to a WebCore::Color and passes it to the WebPageProxy.

        * UIProcess/API/mac/WKViewPrivate.h:
        Add underlayColor @property.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setUnderlayColor):
        Mutator; dispatches SetUnderlayColor to WebPage.
        (WebKit::WebPageProxy::creationParameters):
        Set the parameters' underlayColor member appropriately.

        * UIProcess/WebPageProxy.h:
        Declare new member functions and variable.
        (WebKit::WebPageProxy::underlayColor):
        Accessor.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::underlayColor):
        Return the associated WebPage's underlayColor.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        Declare underlayColor().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Apply any underlayColor that was supplied as part of the WebPageCreationParameters.

        * WebProcess/WebPage/WebPage.h:
        Declare new member functions and variable.
        (WebKit::WebPage::underlayColor):
        Accessor.

        * WebProcess/WebPage/WebPage.messages.in:
        Add SetUnderlayColor message.

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

        Add the notion of an allowed connection to SessionStorageNamespace
        https://bugs.webkit.org/show_bug.cgi?id=111122

        Reviewed by Sam Weinig.

        Group together each session storage namespace with an allowed connection.
        This will help ensure that rouge web processes will not be able to access session storage
        from pages in other processes.
        
        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::allowedConnection):
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::setAllowedConnection):
        Add an m_allowedConnection member variable, as well as setters and getters.

        (WebKit::StorageManager::createSessionStorageNamespace):
        Take an optional allowed connection. (It can be null if the process has not finished launching).

        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
        New function to set the allowed connection for a session storage namespace.

        (WebKit::StorageManager::createStorageArea):
        Add another FIXME.

        (WebKit::StorageManager::createSessionStorageNamespaceInternal):
        Pass the connection to the SessionStorageNamespace constructor.

        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnectionInternal):
        Set the allowed connection.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Pass the connection to createSessionStorageNamespace.

        (WebKit::WebPageProxy::connectionWillOpen):
        Call setAllowedSessionStorageNamespaceConnection.
        
        (WebKit::WebPageProxy::connectionWillClose):
        Call setAllowedSessionStorageNamespaceConnection with a null connection.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        Call connectionWillOpen on all pages.

        (WebKit::WebProcessProxy::connectionWillClose):
        Call connectionWillClose on all pages.

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

        Add private API to disable WKView window occlusion detection
        https://bugs.webkit.org/show_bug.cgi?id=111107

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _enableWindowOcclusionNotifications]): Check if occlusion
        detection is enabled before enabling notifications.
        (windowBecameOccluded): Ditto before changing window occlusion state.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        Initialize occlusion detection enabled flag to "YES".
        (-[WKView windowOcclusionDetectionEnabled]):
        (-[WKView setWindowOcclusionDetectionEnabled:]):
        * UIProcess/API/mac/WKViewPrivate.h:

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

        Add the notion of an allowed connection to SessionStorageNamespace
        https://bugs.webkit.org/show_bug.cgi?id=111122

        Reviewed by Sam Weinig.

        Group together each session storage namespace with an allowed connection.
        This will help ensure that rouge web processes will not be able to access session storage
        from pages in other processes.
        
        * UIProcess/Storage/StorageManager.cpp:
        (StorageManager::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::allowedConnection):
        (WebKit::StorageManager::SessionStorageNamespace::create):
        (WebKit::StorageManager::SessionStorageNamespace::SessionStorageNamespace):
        (WebKit::StorageManager::SessionStorageNamespace::setAllowedConnection):
        Add an m_allowedConnection member variable, as well as setters and getters.

        (WebKit::StorageManager::createSessionStorageNamespace):
        Take an optional allowed connection. (It can be null if the process has not finished launching).

        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnection):
        New function to set the allowed connection for a session storage namespace.

        (WebKit::StorageManager::createStorageArea):
        Add another FIXME.

        (WebKit::StorageManager::createSessionStorageNamespaceInternal):
        Pass the connection to the SessionStorageNamespace constructor.

        (WebKit::StorageManager::setAllowedSessionStorageNamespaceConnectionInternal):
        Set the allowed connection.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Pass the connection to createSessionStorageNamespace.

        (WebKit::WebPageProxy::connectionWillOpen):
        Call setAllowedSessionStorageNamespaceConnection.
        
        (WebKit::WebPageProxy::connectionWillClose):
        Call setAllowedSessionStorageNamespaceConnection with a null connection.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::connectionWillOpen):
        Call connectionWillOpen on all pages.

        (WebKit::WebProcessProxy::connectionWillClose):
        Call connectionWillClose on all pages.

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

        Implement more StorageAreaProxy member functions
        https://bugs.webkit.org/show_bug.cgi?id=111103

        Reviewed by Sam Weinig.

        * Shared/SecurityOriginData.cpp:
        (WebKit::SecurityOriginData::securityOrigin):
        * Shared/SecurityOriginData.h:
        Add helper to create a WebCore::SecurityOrigin from a SecurityOriginData object.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::key):
        Fill the storage map and call through to StorageMap::key.

        (WebKit::StorageAreaProxy::contains):
        Fill the storage map and call through to StorageMap::contains.

        (WebKit::StorageAreaProxy::memoryBytesUsedByCache):
        Return 0; this matches StorageAreaImpl.

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

        PDFPlugin: PDF orientation isn't respected when printing or print-previewing
        https://bugs.webkit.org/show_bug.cgi?id=110925
        <rdar://problem/13008621>

        Reviewed by Alexey Proskuryakov.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::drawPDFPage): Teach drawPDFPage about PDFPage's rotation property, and use it
        to swap the PDF's cropbox. Painting now matches PDFViewController's historical behavior.

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

        Don't install unused XPCServices on Lion
        <rdar://problem/13264712>

        Rubber-stamped by Anders Carlsson

        * Configurations/BaseXPCService.xcconfig:

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

        BUILD FIX (r144221): SetSmartInsertDeleteEnabled should be wrapped in PLATFORM(MAC)

        * WebProcess/WebPage/WebPage.messages.in: Move
        SetSmartInsertDeleteEnabled from USE(APPKIT) to PLATFORM(MAC).

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

        [WK2] One more unreviewed buildfix for EFL, GTK and Qt after r144218.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebProcess/Storage/StorageNamespaceProxy.cpp:
        (WebKit::StorageNamespaceProxy::copy):

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

        Unreviewed (speculative) build fixes for EFL, GTK and Qt after r144218.

        * CMakeLists.txt:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:

2013-02-27  John Bauman  <jbauman@chromium.org>

        Plugin in iframe may not display
        https://bugs.webkit.org/show_bug.cgi?id=109879

        Reviewed by Simon Fraser.

        Update geometry when cliprect changes.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::clipRectChanged):
        * WebProcess/Plugins/PluginView.h:

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

        REGRESSION (48533): Full-frame plugins stopped working (download instead of loading the plugin)
        https://bugs.webkit.org/show_bug.cgi?id=111003

        Reviewed by Anders Carlsson.

        Also query the Page's pluginData when determining whether a given MIME type can be shown.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageCanShowMIMEType):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canShowMIMEType):
        * WebProcess/WebPage/WebPage.h:

2013-02-27  Manuel Rego Casasnovas  <rego@igalia.com>

        Add smartInsertDeleteEnabled setting to WebCore::Page
        https://bugs.webkit.org/show_bug.cgi?id=107840

        Reviewed by Ryosuke Niwa.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode): Remove code related to
        isSmartInsertDeleteEnabled.
        * Shared/WebPageCreationParameters.h:
        (WebPageCreationParameters): Remove isSmartInsertDeleteEnabled.
        * Shared/WebPreferencesStore.h:
        (WebKit): Add macro for smartInsertDeleteEnabled setting.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSmartInsertDeleteEnabled):
        (WKPreferencesGetSmartInsertDeleteEnabled): Implement methods using the
        new setting.
        * UIProcess/API/C/WKPreferencesPrivate.h: Add new methods headers.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage): Set smartInsertDeleteEnabled
        setting using m_isSmartInsertDeleteEnabled to keep initial value on Mac.
        (WebKit::WebPageProxy::creationParameters): Remove usage of
        parameters.isSmartInsertDeleteEnabled.
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::smartInsertDeleteEnabled): Enable method for
        all platforms.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Remove m_isSmartInsertDeleteEnabled
        initialization.
        (WebKit::WebPage::updatePreferences): Set smartInsertDeleteEnabled
        setting.
        (WebKit::WebPage::isSmartInsertDeleteEnabled): Implement method using
        settings.
        (WebKit):
        (WebKit::WebPage::setSmartInsertDeleteEnabled): Implement method using
        settings.
        * WebProcess/WebPage/WebPage.h:
        (WebPage): Enable methods dealing with smartInsertDeleteEnabled for all
        platforms and remove m_isSmartInsertDeleteEnabled as it will be a
        setting.


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

        More storage scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=110997

        Reviewed by Andreas Kling.

        * DerivedSources.make:
        Add StorageAreaProxy.
        
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::setItem):
        Send back a DidSetItem message.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Add generated files.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::StorageAreaProxy):
        Add the message receiver.
        
        (WebKit::StorageAreaProxy::~StorageAreaProxy):
        Remove the message receiver.
        
        (WebKit::StorageAreaProxy::didSetItem):
        add stub.

        * WebProcess/Storage/StorageAreaProxy.h:
        (StorageAreaProxy):
        * WebProcess/Storage/StorageAreaProxy.messages.in: Added.

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

        REGRESSION: Loading flash switches to discrete graphics, 100 MB on membuster
        <rdar://problem/13229828>

        Reviewed by Dan Bernstein.

        Due the change in CFBundleIdentifier, the WebProcess and PluginProcess were
        unnecessarily muxing (they used to be whitelisted by OpenGL) to the discrete
        GPU.

        * PluginProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * PluginProcess/EntryPoint/mac/XPCService/PluginService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/LegacyProcess/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info.plist:
        Add NSSupportsAutomaticGraphicsSwitching YES.

        * WebKit2.xcodeproj/project.pbxproj:
        Re-add the PluginService.32-64.Info.plist plist to the project file.

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

        Don't add a body to platform request until necessary
        https://bugs.webkit.org/show_bug.cgi?id=110900

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::willSendRequest): Restore body after IPC. There
        is no way for the client to change it.

        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        Pass UpdateHTTPBody when passing a request to NSURLConnection.

        * Shared/mac/WebCoreArgumentCodersMac.mm: (CoreIPC::::encodePlatformData):
        Never serialize the request body. It's slow, and sometimes impossible, so just
        keeping things consistent.

        * Shared/mac/WebURLRequestMac.mm: (WebKit::WebURLRequest::platformRequest):
        Pass DoNotUpdateHTTPBody, as we can't update it outside NetworkProcess.

        * UIProcess/Network/CustomProtocols/mac/CustomProtocolManagerProxyMac.mm:
        (WebKit::CustomProtocolManagerProxy::startLoading): Ditto.

        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame):
        Restore existing body after a client call..

        * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::platformCanHandleRequest):
        Pass DoNotUpdateHTTPBody, as we can't update it outside NetworkProcess.

2013-02-27  Glenn Adams  <glenn@skynav.com>

        Add ENABLE_CSS3_TEXT_LINE_BREAK flag.
        https://bugs.webkit.org/show_bug.cgi?id=110944

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

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

        [Qt][WK2] Replace use of WebPreferences with use of WKPrefences C API
        https://bugs.webkit.org/show_bug.cgi?id=108952

        Reviewed by Simon Hausmann.

        Signed off for WebKit2 by Benjamin Poulain.

        This patch moves the view classes and preferences in the Qt API
        to use the C API for accessing and manipulating preferences as
        part of the cleanup and move towards using the C API as base for
        the Qt WebKit2 API.

        Adds the function WebKit::adoptToQString for convenience when
        dealing with QString and copied String objects.

        Removes the ScrollAnimatorEnabled options from QWebPreferences.

        * UIProcess/API/cpp/qt/WKStringQt.cpp:
        (WebKit::adoptToQString):
        * UIProcess/API/cpp/qt/WKStringQt.h:
        (WebKit):
        * UIProcess/API/qt/qquickwebview.cpp:
        (QQuickWebViewPrivate::initialize):
        * UIProcess/API/qt/qwebpreferences.cpp:
        (QWebPreferencesPrivate::testAttribute):
        (QWebPreferencesPrivate::setAttribute):
        (QWebPreferencesPrivate::setFontFamily):
        (QWebPreferencesPrivate::fontFamily):
        (QWebPreferencesPrivate::setFontSize):
        (QWebPreferencesPrivate::fontSize):
        * UIProcess/API/qt/qwebpreferences_p.h:
        * UIProcess/API/qt/qwebpreferences_p_p.h:

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

        Implement StorageAreaProxy::getItem and StorageAreaProxy::setItem
        https://bugs.webkit.org/show_bug.cgi?id=110927

        Reviewed by Sam Weinig.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::setItem):
        * UIProcess/Storage/StorageManager.h:
        Add empty stub.
        
        * UIProcess/Storage/StorageManager.messages.in:
        Add SetItem message.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::getItem):
        Fill the storage map and get the item from it.

        (WebKit::StorageAreaProxy::setItem):
        Update the storage map and send a SetItem message to the UI process.

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

        StorageAreaProxy should hold on to a StorageMap and not a HashMap
        https://bugs.webkit.org/show_bug.cgi?id=110919

        Reviewed by Jessie Berlin.

        Create a storage map instead of a hash map.

        * WebProcess/Storage/StorageAreaProxy.cpp:
        (WebKit::StorageAreaProxy::length):
        (WebKit::StorageAreaProxy::loadValuesIfNeeded):
        * WebProcess/Storage/StorageAreaProxy.h:
        (WebCore):
        (StorageAreaProxy):

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

        Fix a copy/paste error in WebLoaderClient::didBlockInsecurePluginVersion
        https://bugs.webkit.org/show_bug.cgi?id=110914
        <rdar://problem/13297581>

        Reviewed by Beth Dakin.

        Pass kWKErrorCodeInsecurePlugInVersion to the pluginDidFail callback.

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

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

        Unreviewed build fix; use correct macro for platform name in FeatureDefines.xcconfig.

        * Configurations/FeatureDefines.xcconfig:

2013-02-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [WK2][GTK] REGRESSION (r143463): unit test failure in WebKit2APITests/TestContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=110869

        Reviewed by Martin Robinson.

        Test was failing because of new media controls needs more space to be
        painted than just 10x10 pixels.

        * UIProcess/API/gtk/tests/TestContextMenu.cpp:
        (testContextMenuDefaultMenu): Modified test in order to give more space
        to the media controls.

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

        Draw intermediate snapshots if possible
        https://bugs.webkit.org/show_bug.cgi?id=110811

        Reviewed by Simon Fraser.

        After http://webkit.org/b/110495 we delayed snapshotting until we've
        received a nice image, but this made the page look like it is broken.
        We should draw any intermediate snapshots that we find, which might
        include content such as progress bars/spinners.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit): Reinstate 60 attempts at snapshots before giving up.
        (WebKit::PluginView::isAcceleratedCompositingEnabled): We do not
        want accelerated compositing enabled when we are trying to capture
        snapshots.

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

        Remove nonexistent StringPairVector.h from Target.pri after r142839

        Unreviewed gardening.

        * Target.pri:

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

        Unreviewed trivial !ENABLE(NETSCAPE_PLUGIN_API) build fix

        Add an intermediate pluginName string variable instead of
        accessing plugin.info outside the feature #ifdef.

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

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

        Coordinated Graphics: remove redundant update of non compositing layer.
        https://bugs.webkit.org/show_bug.cgi?id=110444

        Reviewed by Noam Rosenthal.

        Currently, we update non compositing layer when the page scrolled. However, it
        is not needed, because TiledBackingStore can scroll without tile update.

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

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

        REGRESSION(r143981): Crash in WebFrameLoaderClient::dispatchDidStartProvisionalLoad()
        https://bugs.webkit.org/show_bug.cgi?id=110848

        Reviewed by Ryosuke Niwa.

        NULL-check the result of document->documentElement().

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

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 ==
