2014-08-12  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: WebContent process has a sandbox extension for the entirety of user's temp directory
        https://bugs.webkit.org/show_bug.cgi?id=135853
        <rdar://problem/17986556>

        Reviewed by Oliver hunt.

        Move extensions recently added for iOS benefit under PLATFORM(IOS). Removed some
        dead code while at it (child processes don't need actual paths, they only need
        sandbox extensions in most cases).

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::openGLCacheDirectory): Deleted.
        (WebKit::WebContext::networkingHSTSDatabasePath): Deleted.
        * UIProcess/WebContext.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::containerTemporaryDirectory): Deleted.
        (WebKit::WebContext::platformDefaultNetworkingHSTSDatabasePath): Deleted.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::containerTemporaryDirectory): Deleted.
        (WebKit::WebContext::platformDefaultNetworkingHSTSDatabasePath): Deleted.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::openGLCacheDirectory):
        (WebKit::WebContext::parentBundleDirectory):
        (WebKit::WebContext::networkingHSTSDatabasePath):
        (WebKit::WebContext::platformDefaultOpenGLCacheDirectory): Deleted.
        (WebKit::WebContext::platformDefaultNetworkingHSTSDatabasePath): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-08-12  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r172424): Extra menu header in combined telephone number menu when no phone paired
        https://bugs.webkit.org/show_bug.cgi?id=135854
        <rdar://problem/17996339>

        Reviewed by Enrica Casucci.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        Get all the menu items ahead of time, and only add the shared header
        if there are any telephone number menu items.

2014-08-12  Enrica Casucci  <enrica@apple.com>

        Crash at com.apple.WebKit.WebContent at com.apple.WebKit: WebKit::expandForGap
        https://bugs.webkit.org/show_bug.cgi?id=135859
        <rdar://problem/17994679>

        Reviewed by Tim Horton.

        expandForGap made the assumption that the selection rects were always three.
        This was not true even before http://trac.webkit.org/changeset/172395 but
        was more likely to happen after that change.
        
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::expandForGap):

2014-08-12  Tim Horton  <timothy_horton@apple.com>

        Don't show the combined menu if there are no services available
        https://bugs.webkit.org/show_bug.cgi?id=135846
        <rdar://problem/17582099>

        Reviewed by Enrica Casucci.

        * WebProcess/WebPage/ServicesOverlayController.h:
        Add a FIXME.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::determineActiveHighlight):
        Don't allow a selection Highlight to become active if there is no
        service available to handle it. Previously we showed the combined menu
        with just phone numbers in it if any were detected.

2014-08-12  Tim Horton  <timothy_horton@apple.com>

        Add a fade transition to services highlights
        https://bugs.webkit.org/show_bug.cgi?id=135829
        <rdar://problem/17935736>

        Reviewed by Enrica Casucci.

        Add a smooth fade to highlight installation and uninstallation.
        To do so, we make each highlight paint into its own small layer.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::layer):
        * WebProcess/WebPage/PageOverlay.h:
        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::layerForOverlay):
        * WebProcess/WebPage/PageOverlayController.h:
        Expose the GraphicsLayer on PageOverlay.

        * WebProcess/WebPage/ServicesOverlayController.h:
        (WebKit::ServicesOverlayController::Highlight::layer):
        (WebKit::ServicesOverlayController::activeHighlight):
        (WebKit::ServicesOverlayController::webPage):
        (WebKit::ServicesOverlayController::Highlight::Highlight): Deleted.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::Highlight::createForSelection):
        (WebKit::ServicesOverlayController::Highlight::createForTelephoneNumber):
        (WebKit::ServicesOverlayController::Highlight::Highlight):
        Highlights now own a GraphicsLayer, which are later installed
        as sublayers of the ServicesOverlayController's PageOverlay layer.
        These layers are sized and positioned according to the DDHighlight's bounds.

        (WebKit::ServicesOverlayController::Highlight::~Highlight):
        (WebKit::ServicesOverlayController::Highlight::invalidate):
        ServicesOverlayController will invalidate any remaining highlights
        when it is torn down, so they can clear their backpointers.

        (WebKit::ServicesOverlayController::Highlight::notifyFlushRequired):
        Forward flush notifications to the DrawingArea.

        (WebKit::ServicesOverlayController::Highlight::paintContents):
        Paint the DDHighlight into the layer. Translation is done by the layer position,
        so we zero the bounds origin when painting.

        (WebKit::ServicesOverlayController::Highlight::deviceScaleFactor):
        Forward the deviceScaleFactor so that things are painted at the right scale.

        (WebKit::ServicesOverlayController::Highlight::fadeIn):
        (WebKit::ServicesOverlayController::Highlight::fadeOut):
        Apply a fade animation to the layer.

        (WebKit::ServicesOverlayController::Highlight::didFinishFadeOutAnimation):
        When the fade completes, unparent the layer, unless it has become active again.

        (WebKit::ServicesOverlayController::ServicesOverlayController):
        (WebKit::ServicesOverlayController::~ServicesOverlayController):
        Invalidate all highlights, so they can clear their backpointers.

        (WebKit::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown):
        Make remainingTimeUntilHighlightShouldBeShown act upon a particular highlight
        instead of always the active highlight.

        (WebKit::ServicesOverlayController::determineActiveHighlightTimerFired): Rename.

        (WebKit::ServicesOverlayController::drawRect):
        drawRect is no longer called and will no longer do anything; all of the
        painting is done in sublayers.

        (WebKit::ServicesOverlayController::buildPhoneNumberHighlights):
        Ensure that phone number Highlights stay stable even while the selection
        changes, by comparing the underlying Ranges and keeping around old Highlights
        that match the new ones. This enables us to e.g. fade in while changing
        the selection within a phone number.

        (WebKit::ServicesOverlayController::buildSelectionHighlight):
        (WebKit::ServicesOverlayController::didRebuildPotentialHighlights):
        (WebKit::ServicesOverlayController::createOverlayIfNeeded):
        Don't call setNeedsDisplay; the overlay doesn't have backing store.
        Instead, call determineActiveHighlight, which will install/uninstall
        highlights as necessary.

        (WebKit::ServicesOverlayController::determineActiveHighlight):
        Apply fade in/fade out to the overlays.
        Keep track of which highlight we're going to activate, until the hysteresis
        delay is up, then actually make it active/parent it/fade it in.
        We now will have no active highlight between the fade out of the previous one
        and the fade in of the new one (during the hysteresis delay).

        (WebKit::ServicesOverlayController::mouseEvent):
        The overlay now will not become active until the delay is up, so we don't
        need to check it again here.

        (WebKit::ServicesOverlayController::handleClick):
        (WebKit::ServicesOverlayController::didCreateHighlight):
        (WebKit::ServicesOverlayController::willDestroyHighlight):
        (WebKit::ServicesOverlayController::repaintHighlightTimerFired): Deleted.
        (WebKit::ServicesOverlayController::drawHighlight): Deleted.

2014-08-11  Andy Estes  <aestes@apple.com>

        [iOS] Get rid of iOS.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=135809

        Reviewed by Joseph Pecoraro.

        All iOS.xcconfig did was include AspenFamily.xcconfig, so there's no need for the indirection.

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

2014-08-12  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Rename ewk_private.h to EwkDebug.h
        https://bugs.webkit.org/show_bug.cgi?id=135797

        Reviewed by Gyuyoung Kim.

        ewk_private.h contains only debug macros alllowing
        logging.

        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/API/efl/ewk_main.cpp:
        * UIProcess/efl/EwkDebug.h: Renamed from Source/WebKit2/UIProcess/API/efl/ewk_private.h.
        * UIProcess/efl/ViewClientEfl.cpp:

2014-08-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] The plugins metadata cache doesn't work if the user cache directory doesn't exist
        https://bugs.webkit.org/show_bug.cgi?id=135834

        Reviewed by Philippe Normand.

        Make sure the user cache directory exists. If creating the
        directory fails for whatever reason, do not try to save the cache
        to disk.

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

2014-08-12  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow reading CoreGraphics debugging preferences
        https://bugs.webkit.org/show_bug.cgi?id=135821
        <rdar://problem/11219259>

        Reviewed by Darin Adler.

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

2014-08-11  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        [EFL] Prevent the client from creating ewk_view when EWebkit is not initialized
        https://bugs.webkit.org/show_bug.cgi?id=135606

        Reviewed by Gyuyoung Kim.

        Similarly to EFL modules (eina, evas etc.), application using EWebKit
        has to initialize it using ewk_init().

        Do not allow the client to create ewk_view if ewk_init has not been called.
        Add an appropriate logs warning the client about wrong APIs usage.

        * UIProcess/API/efl/ewk_main.cpp: Add EwkMain class to control ewk lifetime.
        (WebKit::EwkMain::EwkMain):
        (WebKit::EwkMain::shared):
        (WebKit::EwkMain::~EwkMain): Add logs when the client forgot to destroy EWebkit.
        (WebKit::EwkMain::initialize):
        (WebKit::EwkMain::finalize):
        (WebKit::EwkMain::shutdownInitializedEFLModules):
        (ewk_init):
        (ewk_shutdown):
        * UIProcess/API/efl/ewk_main_private.h: Added.
        (WebKit::EwkMain::isInitialized):
        (WebKit::EwkMain::logDomainId):
        * UIProcess/API/efl/ewk_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (EWKViewCreate):
        Prevent the client from creating ewk_view when ewk_init() has not been called.

2014-08-11  Enrica Casucci  <enrica@apple.com>

        Improve look and feel of combined service menu..
        https://bugs.webkit.org/show_bug.cgi?id=135824
        <rdar://problem/17936880>

        Reviewed by Tim Horton.
        
        When showing the combined menu, list the phone numbers first,
        grouped under a common header, followed by the entries relative
        to the services.

        * Platform/mac/MenuUtilities.h:
        * Platform/mac/MenuUtilities.mm:
        (WebKit::menuItemTitleForTelephoneNumberGroup):
        (WebKit::menuItemForTelephoneNumber):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):

2014-08-11  Joseph Pecoraro  <pecoraro@apple.com>

        Add Private WKPreferences API for developer extras (show inspector)
        https://bugs.webkit.org/show_bug.cgi?id=135811

        Reviewed by Timothy Hatcher.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _developerExtrasEnabled]):
        (-[WKPreferences _setDeveloperExtrasEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2014-08-08  Enrica Casucci  <enrica@apple.com>

        [Services with UI] Action menu arrow hit testing is sometimes wrong.
        https://bugs.webkit.org/show_bug.cgi?id=135776
        <rdar://problem/17837670>

        Reviewed by Brady Eidson.

        There was a problem in the algorithm that stitches together the selection rectangles
        to be given to Data Detectors API.
        This change adds a new function that stiches together all the rects contributing to the
        first line, all the rects contributing to the last line and all the ones in the middle.
        This way we can have a maximum of 3 non overlapping rectangles.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::stitchRects):
        (WebKit::compactRectsWithGapRects):

2014-08-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r172385.

        * PlatformEfl.cmake:

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

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

        * gtk/NEWS: Add release notes for 2.5.2.

2014-08-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] No IPC messages are sent when building WebKitGTK+ with VERSION_SCRIPT
        https://bugs.webkit.org/show_bug.cgi?id=135760

        Reviewed by Philippe Normand.

        The problem is that the threading initialization is failing
        because there are two copies of WTF, one in libjavascriptcoregtk
        and the other in libwebkit2gtk. When WebKit2 is initialized in the
        UI process, JSC::initializeThreading() is called first and then
        WTF::initializeMainThread(). The former is calling
        ThreadIdentifierData::initializeOnce() initializing the
        ThreadIdentifierData::m_key symbol in libjavascriptcoregtk, while
        the latter is using the ThreadIdentifierData API from libwebkit2gtk
        that hasn't been initialized.

        * CMakeLists.txt: Do not add WTF to the list of WebKit2 libraries,
        WebKit2 already depends on JavaScriptCore that already links to WTF.

2014-08-10  Tim Horton  <timothy_horton@apple.com>

        Yelp phone number highlights often disappear
        https://bugs.webkit.org/show_bug.cgi?id=135789
        <rdar://problem/17971057>

        Reviewed by Brady Eidson.

        Since selectedTelephoneNumberRangesChanged doesn't provide an associated
        Frame, an incoming selectedTelephoneNumberRangesChanged from a subframe
        would overwrite ServicesOverlayController's cached (and potentially active)
        telephone number highlights.

        This happens a lot on Yelp, because they have many subframes which are
        doing layout on a regular basis.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectedTelephoneNumberRangesChanged):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        Adjust to the new (lack of) arguments.

        * WebProcess/WebPage/ServicesOverlayController.h:
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::selectedTelephoneNumberRangesChanged):
        Adjust logging; we can revisit it later.

        (WebKit::ServicesOverlayController::buildPhoneNumberHighlights):
        When building phone number highlights, walk the Frame tree and retrieve
        them from all of the Editors.

        (WebKit::ServicesOverlayController::didRebuildPotentialHighlights):
        (WebKit::ServicesOverlayController::telephoneNumberRangesForFocusedFrame):
        (WebKit::ServicesOverlayController::determineActiveHighlight):
        (WebKit::ServicesOverlayController::handleClick):
        Retrieve the detected telephone number ranges from the focused frame
        when combining telephone numbers with selection services.
        This ensures that we don't show combined phone number highlights from other frames.

2014-08-10  Tim Horton  <timothy_horton@apple.com>

        Refactor ServiceOverlayController in preparation for fading between highlights
        https://bugs.webkit.org/show_bug.cgi?id=135787
        <rdar://problem/17935736>

        Reviewed by Brady Eidson.

        Rework ServicesOverlayController so that we always keep a set of generic
        "potential highlights", which are refcounted Highlight objects and
        wrap a DDHighlightRef, as well as a type (Selection or TelephoneNumber),
        Range (only used in the case of TelephoneNumber), and potentially more
        things in the future (like, say, fade state!).

        We eagerly update the list of potential highlights when the selection or set
        of detected telephone numbers changes, and use this information to install
        or uninstall the page overlay as needed.

        When we need to recompute the "active" highlight from this set (for example,
        we need to handle a mouse event or paint the highlight), we look through
        the set of potential highlights and decide. This moves the "active" highlight
        decision logic into one small and confined place.

        * WebProcess/WebPage/ServicesOverlayController.h:
        (WebKit::ServicesOverlayController::Highlight):
        Add the new aforementioned refcounted Highlight class.
        Rename m_lastHoveredHighlightChangeTime to m_lastActiveHighlightChangeTime.
        Make m_webPage a reference.
        The rest is just added/removed/adjusted functions for the refactoring.

        (WebKit::TelephoneNumberData::TelephoneNumberData): Deleted.
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::Highlight::createForSelection):
        (WebKit::ServicesOverlayController::Highlight::createForTelephoneNumber):
        Create Highlights for the two different highlight types.

        (WebKit::ServicesOverlayController::ServicesOverlayController):
        (WebKit::ServicesOverlayController::willMoveToWebPage):
        Our WebPage pointer is always valid because it owns us; don't clear it.
        We need to keep it around so that we can uninstall the overlay and
        install it again later, anyway.

        (WebKit::ServicesOverlayController::selectionRectsDidChange):
        (WebKit::ServicesOverlayController::selectedTelephoneNumberRangesChanged):
        When selection rects or detected telephone numbers change, rebuild potential highlights.
        This will have the side-effect of installing the overlay if needed.

        (WebKit::ServicesOverlayController::mouseIsOverHighlight):
        Make this function take a Highlight instead of a DDHighlightRef.

        (WebKit::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown):
        Make this function take a Highlight instead of a DDHighlightRef.

        (WebKit::ServicesOverlayController::drawHighlight):
        Make this function take a Highlight instead of a DDHighlightRef.
        There's no reason to do the translation separately from the layer blit,
        also allowing us to avoid the StateSaver.

        (WebKit::ServicesOverlayController::drawRect):
        drawRect now always paints the active highlight, instead of duplicating
        logic about which highlight should be active.
        Also, it will update the active highlight before painting.
        We no longer need to re-determine whether the active highlight's phone
        number range is still a valid phone number range, because we rebuild
        the potential highlights whenever the set of phone number ranges changes.

        (WebKit::ServicesOverlayController::clearActiveHighlight):
        Mostly an adoption of new names.

        (WebKit::ServicesOverlayController::removeAllPotentialHighlightsOfType):
        Run through the list of potential highlights and remove any of the given type.
        The two highlight building functions use this helper to clear the old ones before building.

        (WebKit::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebKit::ServicesOverlayController::buildSelectionHighlight):
        Rebuild the list of potential highlights, replacing all highlights of
        the given type with new ones.

        (WebKit::ServicesOverlayController::hasRelevantSelectionServices):
        Factor out the code that decides whether our current selection is
        viable for servicing based on whether we have plain-text and/or rich-text services.

        (WebKit::ServicesOverlayController::didRebuildPotentialHighlights):
        When rebuilding potential highlights, if we have no potential highlights at all,
        uninstall the page overlay; we don't need mouse tracking and don't need to
        paint anything. This improves memory use and compositing performance significantly,
        where previously we were leaving the overlay up forever after creating it.

        If we have either detected telephone numbers or relevant selection services,
        create and install the overlay if it doesn't already exist.

        (WebKit::ServicesOverlayController::createOverlayIfNeeded):
        This just moved from elsehwere, except that it now uses FadeMode::DoNotFade.
        It doesn't make sense to fade on install/uninstall (which happens even before hover)
        but not on changing the active highlight; fading will be re-addressed in the next patch.

        (WebKit::ServicesOverlayController::highlightsAreEquivalent):
        Determine whether two highlights are equivalent. While we may have
        created a new Highlight at rebuild time, if two telephone number
        highlights have equivalent ranges, there's no need to 'transition' to the new one.

        (WebKit::ServicesOverlayController::determineActiveHighlight):
        Run through the list of services, and try to find one that is hovered.
        We prefer telephone number highlights to selection highlights, and
        we will never make a selection highlight active if it is both
        not serviceable and there are no telephone numbers to show in the combined menu.
        This is the centralized location for determination of which highlight
        should be considered active. If the active highlight changed, update
        the time since last change and cancel the mouse-down tracking.

        (WebKit::ServicesOverlayController::mouseEvent):
        Adjust some comments to be more explanatory.
        A bunch of code moved out of here and into determineActiveHighlight.

        (WebKit::ServicesOverlayController::handleClick):
        Adjust to take a reference and use Highlight instead of DDHighlightRef.

2014-08-10  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: new glyphs are visible on OS X 10.9 builds
        https://bugs.webkit.org/show_bug.cgi?id=135743

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow): Use 10100 instead of 1090 for the version.

2014-08-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] REGRESSION(r166239): The ld version script is not being used
        https://bugs.webkit.org/show_bug.cgi?id=135694

        Reviewed by Martin Robinson.

        * CMakeLists.txt: Add VERSION_SCRIPT to WebKit2 link flags if present.

2014-08-09  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r172301): Combined phone number highlight doesn't appear if rich content is selected and we have no rich content services
        https://bugs.webkit.org/show_bug.cgi?id=135785
        <rdar://problem/17969843>

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::drawSelectionHighlight):
        We can't early return in the rich-content-but-no-rich-services case
        if we have telephone numbers in the selection, because we want to offer
        them up in the combined menu.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        If we end up with no menu, because there were no services available,
        make a fresh one that we can fill with combined telephone number items.

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

        [EFL] Do not initialize g_type in WebProcessMain::platformInitialize()
        https://bugs.webkit.org/show_bug.cgi?id=135700

        Reviewed by Gyuyoung Kim.

        Inspired by r171788.
        Glib since 2.36 itself initializes g_type_init.

        * WebProcess/efl/WebProcessMainEfl.cpp:

2014-08-08  Tim Horton  <timothy_horton@apple.com>

        Build fix for 32-bit.

        * UIProcess/mac/ServicesController.mm:
        (WebKit::ServicesController::ServicesController):
        Don't dynamically refresh services in 32-bit apps. It's not possible
        to write a 32-bit app with the Modern API, so this doesn't matter.

2014-08-08  Tim Horton  <timothy_horton@apple.com>

        [mac] Dynamically update serviceability when the set of services changes
        https://bugs.webkit.org/show_bug.cgi?id=135738
        <rdar://problem/17533459>

        Reviewed by Brady Eidson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        Adopt the new universal refreshExistingServices.

        (WebKit::WebContext::refreshExistingServices): Deleted.
        * UIProcess/WebContext.h:
        Remove WebContext::refreshExistingServices; there's no need for it.

        * UIProcess/mac/ServicesController.h:
        * UIProcess/mac/ServicesController.mm:
        Fix the build with only public headers by including NSSharingService.h itself.
        Place the NSSharingServicePicker (Details) category outside the #ifdef.
        Forward-declare and possibly import NSExtension SPI.

        (WebKit::ServicesController::ServicesController):
        Register a callback to be notified whenever the set of services changes.
        When this occurs, call refreshExistingServices. We let refreshExistingServices
        coalesce updates because these notifications can come in small batches.

        (WebKit::ServicesController::refreshExistingServices):
        Dispatch changes in service availability to all processes in all contexts.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        Adjust the referenced rdar:// and call ServicesController::refreshExistingServices
        instead of the now-removed WebContext:: variant. We can't remove this
        yet because our services state can still be stale because NSServiceSharingPicker
        can still sometimes lie about the current service state immediately after a change occurs;
        once that is fixed, we should get rid of this as well as the refresh in Web Process creation.

2014-08-08  Timothy Horton  <timothy_horton@apple.com>

        Clients that request the selection services menu after WebKit2 will get one with different metrics than otherwise
        https://bugs.webkit.org/show_bug.cgi?id=135765
        <rdar://problem/17962180>

        Reviewed by Brady Eidson.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        The menu is cached between clients, but we make adjustments to it.
        We should copy it before adjusting.

2014-08-08  Timothy Horton  <timothy_horton@apple.com>

        Services overlay dropdown is often in the wrong place with zoomed pages or horizontal scrolling
        https://bugs.webkit.org/show_bug.cgi?id=135755
        <rdar://problem/17907752>

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::establishHoveredTelephoneHighlight):
        (WebKit::ServicesOverlayController::maybeCreateSelectionHighlight):
        DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection adjusts the
        location of the button based on the visible rect, trying to keep the button visible.

        We're handing it the wrong visible rect, though, not taking scrolling into account.

        This leads to pages that scroll horizontally showing the button on the left
        even if there's space for it on the right, or sometimes not showing it at all.

        Instead, provide the actual main FrameView visible rect; the same coordinate
        space that the highlight rects are provided in.

2014-08-08  Timothy Horton  <timothy_horton@apple.com>

        Additional items added to selection services menus are misaligned
        https://bugs.webkit.org/show_bug.cgi?id=135747
        <rdar://problem/17933167>

        Reviewed by Brady Eidson.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        Use NSSharingServicePickerStyleRollover for the rollover image services menu;
        use NSSharingServicePickerStyleTextSelection for the selection services menu.

        Set NSMenu's showsStateColumn to YES for selection services menus, so that
        other items added to the menu line up correctly.

        Remove an unncessary .get()

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

        [EFL] Remove unnecessary ewk_private.h includes
        https://bugs.webkit.org/show_bug.cgi?id=135753

        Reviewed by Gyuyoung Kim.

        Neither the below file uses the functionality from ewk_private.h.

        * UIProcess/API/efl/ewk_context.cpp:
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        * UIProcess/API/efl/ewk_popup_menu_item.cpp:
        * UIProcess/API/efl/ewk_view.cpp:

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

        [GTK] Do not use GtkWindow:resize-grip-visible with recent GTK+ versions
        https://bugs.webkit.org/show_bug.cgi?id=135699

        Reviewed by Philippe Normand.

        Resize grips support have been removed from GTK+ since 3.13.4, the
        API has been deprecated and does nothing.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseSetToplevelOnScreenWindow):
        (resizeWebKitWebViewBaseFromAllocation):

2014-08-07  Tim Horton  <timothy_horton@apple.com>

        [Services with UI] Action menu does not appear if selection includes both text and an image
        https://bugs.webkit.org/show_bug.cgi?id=135731
        <rdar://problem/17837491>

        Reviewed by Dean Jackson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        Initialize hasRichContentServices with the cached value.

2014-08-07  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of SCRIPTED_SPEECH
        https://bugs.webkit.org/show_bug.cgi?id=135729

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:

2014-08-07  Timothy Horton  <timothy_horton@apple.com>

        setCustomSwipeViews inside didChangeBackForwardList client callback is ignored
        https://bugs.webkit.org/show_bug.cgi?id=135633
        <rdar://problem/17926507>

        Reviewed by Sam Weinig.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::clearCustomSwipeViews): Deleted.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::clearCustomSwipeViews): Deleted.
        WebKit clears the set of custom swipe views at the end of WebPageProxy::didChangeBackForwardList,
        *after* calling into the client. This means that if the client wants to setCustomSwipeViews in
        didChangeBackForwardList, it won't be respected.

        Since there's only one client of this SPI, let's just stop clearing the list of custom swipe
        views in WebKit and leave that totally up to the client.

2014-08-07  Enrica Casucci  <enrica@apple.com>

        [Services with UI] Action menu does not appear if selection includes both text and an image.
        https://bugs.webkit.org/show_bug.cgi?id=135731
        <rdar://problem/17837491>

        Reviewed by Brady Eidson.

        Adding a new setting to ServicesController to communicate to the WebProcess if
        there are services installed that can handle a combination of text and images.
        This way ServicesOverlayController can decide if it appropriate to show the hightlight
        based on the type of selection (text only or non text only). This information is retrieved
        when the selection rects are collected by SelectionGatherer and used by
        SelectionGatherer::Notifier to communicate the selection change.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/ServicesController.h:
        (WebKit::ServicesController::hasRichContentServices):
        * UIProcess/mac/ServicesController.mm:
        (WebKit::ServicesController::ServicesController):
        (WebKit::ServicesController::refreshExistingServices):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectionRectsDidChange):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/ServicesOverlayController.h:
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::ServicesOverlayController):
        (WebKit::ServicesOverlayController::selectionRectsDidChange):
        (WebKit::ServicesOverlayController::drawSelectionHighlight):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setEnabledServices):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::hasRichContentServices):
        * WebProcess/WebProcess.messages.in:

2014-08-07  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Fix several warnings of doxygen
        https://bugs.webkit.org/show_bug.cgi?id=135643

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_context_menu_item.h: Removed /info which is not doxygen keyword and unnecessary to the user.
        * UIProcess/API/efl/ewk_cookie_manager.h: Fixed parameter name.
        * UIProcess/API/efl/ewk_form_submission_request.h: Removed # from Eina_List because doxygen may not know the EFL structures.
        * UIProcess/API/efl/ewk_page_group.h: Fixed to match with parameter name.
        * UIProcess/API/efl/ewk_settings.h: Fixed wrong keyword and parameter name.
        * UIProcess/API/efl/ewk_text_checker.h: Ditto.
        * UIProcess/API/efl/ewk_view.h:
        - Used escape string for the tag.
        - Used @code, @endcode for media query example.

2014-08-07  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of INPUT_SPEECH
        https://bugs.webkit.org/show_bug.cgi?id=135672

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:
        * PlatformGTK.cmake:

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Update glyphs to be more like Xcode 6
        https://bugs.webkit.org/show_bug.cgi?id=135705

        Reviewed by Joseph Pecoraro.

        * Resources/DockBottom.pdf: Added.
        * Resources/DockBottomLegacy.pdf: Copied from Source/WebKit/mac/Resources/Dock.pdf.
        * Resources/DockRight.pdf: Added.
        * Resources/DockRightLegacy.pdf: Copied from Source/WebKit2/Resources/DockRight.pdf.
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow): Use new images.
        * WebKit2.xcodeproj/project.pbxproj: Added new images.

2014-08-07  Oliver Hunt  <oliver@apple.com>

        WebContent needs access to HSTS database due to some networking still being performed in process
        https://bugs.webkit.org/show_bug.cgi?id=135711
        <rdar://17940220>

        Reviewed by Alexey Proskuryakov.

        Simple patch in the same theme as the equivalent network process
        extension.  Provide an extension that covers the WebContent specific
        HSTS file and consume it on launch.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::webContentHSTSDatabasePath):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-08-07  Gordon Sheridan  <gordon_sheridan@apple.com>

        Clear the m_previousItem member of HistoryControllers when it matches the HistoryItem being removed.
        https://bugs.webkit.org/show_bug.cgi?id=135634
        <rdar://problem/17388461>

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::removeItem):
        Call WebCore::Page::clearPreviousItemFromAllPages() for each item removed from
        the back/forward list to ensure the page URL is released from IconDatabase.

2014-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use WebKitNavigationAction also for WebKitNavigationPolicyDecision
        https://bugs.webkit.org/show_bug.cgi?id=135695

        Reviewed by Gustavo Noronha Silva.

        WebKitNavigationAction was introduced to extend WebKitWebView::create signal
        and its API is mostly duplicated in WebKitNavigationPolicyDecision.
        Use WebKitNavigationAction insternally in WebKitNavigationPolicyDecision and
        deprecated all the duplicated API in favor of a single property navigation-action.

        * UIProcess/API/gtk/WebKitDefines.h: Remove unused macro
        WEBKIT_OBSOLETE and add WEBKIT_DEPRECATED and WEBKIT_DEPRECATED_FOR.
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp:
        (_WebKitNavigationPolicyDecisionPrivate::~_WebKitNavigationPolicyDecisionPrivate):
        Free the WebKitNavigationAction.
        (webkitNavigationPolicyDecisionGetProperty): Add getter for
        navigation-action and use WebKitNavigationAction in all other getters.
        (webkit_navigation_policy_decision_class_init): Add navigation-action
        property and deprecated all others except frame-name.
        (webkit_navigation_policy_decision_get_navigation_action): Return the WebKitNavigationAction.
        (webkit_navigation_policy_decision_get_navigation_type): Use WebKitNavigationAction.
        (webkit_navigation_policy_decision_get_mouse_button): Ditto.
        (webkit_navigation_policy_decision_get_modifiers): Ditto.
        (webkit_navigation_policy_decision_get_request): Ditto.
        (webkitNavigationPolicyDecisionCreate):
        (webkitNewWindowPolicyDecisionCreate):
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:
        * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h:
        * UIProcess/API/gtk/WebKitPolicyClient.cpp: Use a custom
        PolicyClient class so that we receive a NavigationActionData in
        the callbacks.
        (attachPolicyClientToView):
        (toWebKitNavigationType): Deleted.
        (decidePolicyForNavigationAction): Deleted.
        (decidePolicyForNewWindowAction): Deleted.
        (decidePolicyForResponse): Deleted.
        * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp:
        (webkitResponsePolicyDecisionCreate):
        * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for
        deprecated symbols.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.

2014-08-06  Antti Koivisto  <antti@apple.com>

        Move Soup specific code out of WebCoreArgumentCoders.cpp
        https://bugs.webkit.org/show_bug.cgi?id=135665

        Reviewed by Anders Carlsson.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        (IPC::ArgumentCoder<ResourceError>::encode):
        (IPC::ArgumentCoder<ResourceError>::decode):
        * Shared/WebCoreArgumentCoders.h:
        
            Soup is the only client for this code. Move it to *Soup.cpp

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceRequest>::decodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::encodePlatformData):
        (IPC::ArgumentCoder<ResourceError>::decodePlatformData):

2014-08-06  Tim Horton  <timothy_horton@apple.com>

        Services overlay flashes a lot; should have some hysteresis before showing overlay
        https://bugs.webkit.org/show_bug.cgi?id=135683
        <rdar://problem/16878039>

        Reviewed by Simon Fraser.

        Don't show the highlight until it's been 200ms since the last change
        in selection or change in which highlight is hovered, whichever was more recent.

        * WebProcess/WebPage/ServicesOverlayController.h:
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::ServicesOverlayController):
        (WebKit::ServicesOverlayController::selectionRectsDidChange):
        Keep track of when the selection last changed.

        (WebKit::ServicesOverlayController::drawTelephoneNumberHighlightIfVisible):
        Make establishHoveredTelephoneHighlight take a bool instead of Boolean.

        (WebKit::ServicesOverlayController::mouseIsOverHighlight):
        Factor mouseIsOverHighlight out of establishHoveredTelephoneHighlight and drawHighlight.

        (WebKit::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown):
        Return the amount of time until the highlight should be shown; this is
        the maximum of (the difference between the last selection change and the timeout)
        and (the difference between the last change in which highlight is hovered and the timeout).

        Telephone number highlights are shown immediately, because they are already stable
        by virtue of being expanded to include the entire telephone number.

        (WebKit::ServicesOverlayController::repaintHighlightTimerFired):
        (WebKit::ServicesOverlayController::drawHighlight):
        If the highlight shouldn't be shown yet (because we haven't hit the two timeouts),
        schedule a timer to repaint us around when we will hit the timeouts.

        (WebKit::ServicesOverlayController::establishHoveredTelephoneHighlight):
        (WebKit::ServicesOverlayController::mouseEvent):
        Don't allow mouseUp to trigger the menu if we shouldn't be showing the overlay yet.

2014-08-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] www.france24.com doesn't always load the page, sections stay white
        https://bugs.webkit.org/show_bug.cgi?id=135684
        <rdar://problem/17931712>

        Reviewed by Tim Horton.
        
        It's possible for a UIScrollView for overflow to move between one scrolling tree node
        and another. When this happens, we need to avoid unconditionally clearing the delegate
        on the node that's being destroyed, because the new node will already have set the
        UIScrollView delegate to its own delegate.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::~ScrollingTreeOverflowScrollingNodeIOS):

2014-08-06  Dean Jackson  <dino@apple.com>

        ENABLE_CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED is not used anywhere. Remove it.
        https://bugs.webkit.org/show_bug.cgi?id=135675

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2014-08-06  Brady Eidson and Jeffrey Pfau <beidson@apple.com>

        IDB transactions never reset if the Web Process ends before cleaning up
        https://bugs.webkit.org/show_bug.cgi?id=135218

        Reviewed by Darin Adler and David Kilzer.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didReceiveMessage):
        (WebKit::DatabaseToWebProcessConnection::didReceiveSyncMessage): Added.
        (WebKit::DatabaseToWebProcessConnection::didClose):
        * DatabaseProcess/DatabaseToWebProcessConnection.h:

        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:
        (WebKit::DatabaseProcessIDBConnection::resetTransactionSync): Added
            Wait until the reset is complete before sending the sync reply.
        (WebKit::DatabaseProcessIDBConnection::rollbackTransactionSync): Added.
            Ditto.
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.h:
        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.messages.in:

        Keep track of all in progress transactions and make sure they’re cleaned up
        whenever a connection to a WebProcess is broken:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::unregisterConnection):
        (WebKit::UniqueIDBDatabase::didCompleteTransactionOperation):
        (WebKit::UniqueIDBDatabase::openBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::resetBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::didEstablishTransaction):
        (WebKit::UniqueIDBDatabase::didResetTransaction):
        (WebKit::UniqueIDBDatabase::resetAllTransactions):
        (WebKit::UniqueIDBDatabase::finalizeRollback):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::rollbackTransaction):

        Add sync versions of reset/rollback:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        (WebKit::WebIDBServerConnection::resetTransactionSync):
        (WebKit::WebIDBServerConnection::rollbackTransactionSync):
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:

2014-08-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement parsing for CSS scroll snap points
        https://bugs.webkit.org/show_bug.cgi?id=134301

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_CSS_SCROLL_SNAP

2014-08-06  Andy Estes  <aestes@apple.com>

        [iOS] Subresources referenced in converted QuickLook documents sometimes fail to load
        https://bugs.webkit.org/show_bug.cgi?id=135676

        Reviewed by David Kilzer.

        QuickLookHandle needs to stay alive in order for its NSURLProtocol to service subresource loads originating
        from the converted HTML document. Some of these loads happen dynamically after the main resource finishes
        loading, so we cannot tie the lifetime of the QuickLookHandle to that of the main resource's ResourceLoader.
        Instead, give ownership of the QuickLookHandle to DocumentLoader.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo): Stored the created QuickLookHandle in DocumentLoader.
        (WebKit::WebResourceLoader::didReceiveData): Accessed DocumentLoader's QuickLookHandle.
        (WebKit::WebResourceLoader::didFinishResourceLoad): Ditto.
        (WebKit::WebResourceLoader::didFailResourceLoad): Ditto.
        (WebKit::WebResourceLoader::didReceiveResource): Ditto.
        * WebProcess/Network/WebResourceLoader.h: Removed m_quickLookHandle.

2014-08-06  Filip Pizlo  <fpizlo@apple.com>

        Merge r171389, r171495, r171508, r171510, r171605, r171606, r171611, r171614, r171763 from ftlopt.

    2014-08-06  Mark Hahnenberg  <mhahnenberg@apple.com>
    
            Refactor our current implementation of for-in
            https://bugs.webkit.org/show_bug.cgi?id=134142
    
            Reviewed by Filip Pizlo.
    
            * WebProcess/Plugins/Netscape/JSNPObject.cpp:
            (WebKit::JSNPObject::invalidate): Fixed an invalid ASSERT that was crashing in debug builds.
    
2014-08-06  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (WebKit2): iOS Safari default encoding doesn't follow system language
        https://bugs.webkit.org/show_bug.cgi?id=135667
        <rdar://problem/17862892>

        Reviewed by Anders Carlsson.

        * Shared/WebPreferencesDefinitions.h: Compute the actual proper default, don't
        hardcode it to ISO-8859-1 hoping that someone else will correct it later.

        * Shared/WebPreferencesStore.cpp: Added an include for WebPreferencesDefinitions.h
        macro expansion to compile.

        * UIProcess/WebPreferences.cpp: (WebKit::WebPreferences::createWithLegacyDefaults):
        Added a FIXME.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        We now use WKGetWebDefaultCFStringEncoding in WebCore, so it needs to be initialized.

2014-08-06  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Add support for user scripts to WebKitUserContentManager
        https://bugs.webkit.org/show_bug.cgi?id=134738

        Reviewed by Carlos Garcia Campos.

        Add support for user scripts, to complement the user style sheet
        support already present in WebKitUserContentManager. Most of the
        moving parts are already present, so this just adds a boxed type
        for user scripts (WebKitUserScript) and the corresponding methods
        to add and remove scripts from the WebKitUserContentManager.

        * UIProcess/API/gtk/WebKitUserContent.cpp: Add a WebKitUserScript
        boxed type and its corresponding methods and enums.
        (toUserScriptInjectionTime): Needed to convert
        WebKitUserScriptInjectionTime values into its WebCore counterparts.
        (_WebKitUserScript::_WebKitUserScript): Added.
        (_WebKitUserScript::referenceCount): Ditto.
        (webkit_user_script_ref):
        (webkit_user_script_unref):
        (webkit_user_script_new):
        (webkitUserScriptGetUserScript): Internal method to obtain the
        boxed WebCore::UserScript value.
        * UIProcess/API/gtk/WebKitUserContent.h: Add the new public API
        methods.
        * UIProcess/API/gtk/WebKitUserContentManager.cpp: Implement the
        methods for adding and removing user scripts.
        (webkit_user_content_manager_add_script):
        (webkit_user_content_manager_remove_all_scripts):
        * UIProcess/API/gtk/WebKitUserContentManager.h: Add the new public
        API methods.
        * UIProcess/API/gtk/WebKitUserContentPrivate.h: Add the definition
        for the new private function.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Include the
        new public methods in the API documentation.

2014-08-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Be able to disable gtk2 dependency
        https://bugs.webkit.org/show_bug.cgi?id=135505

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Only build WebKitPluginProcess2 when
        ENABLE_PLUGIN_PROCESS_GTK2 is ON.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Do not try to launch
        WebKitPluginProcess2 executable when ENABLE_PLUGIN_PROCESS_GTK2 is OFF.

2014-08-05  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r164337): Pages are sometimes cut off/oriented incorrectly after using WKThumbnailView
        https://bugs.webkit.org/show_bug.cgi?id=135622
        <rdar://problem/17202556>

        Reviewed by Dan Bernstein.

        In some cases (when the page changed scroll offset while thumbnailed),
        when transitioning back to thumbnail scale = 1, we would get the math
        wrong and end up with a non-identity sublayerTransform on the DrawingArea.

        Luckily, none of this code is necessary anymore, as the only client
        of WKThumbnailView only uses its snapshotting mode.

        * Shared/ImageOptions.h:
        Remove SnapshotOptionsRespectDrawingAreaTransform; DrawingArea no longer
        has a rootLayerTransform().

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setThumbnailScale): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::scaledSnapshotWithOptions):
        (WebKit::WebPage::snapshotAtSize):
        
        (WebKit::WebPage::setThumbnailScale): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Remove setThumbnailScale and SnapshotOptionsRespectDrawingAreaTransform.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        Revert this to its state before r164337, as we no longer have "thumbnail scale".

        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        (-[_WKThumbnailView _viewWasUnparented]):
        (-[_WKThumbnailView _viewWasParented]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        (-[_WKThumbnailView setScale:]):
        Clean up code assuming _shouldApplyThumbnailScale = NO, _usesSnapshot = YES.

        (-[_WKThumbnailView setUsesSnapshot:]):
        (-[_WKThumbnailView usesSnapshot]):
        Always return YES from usesSnapshot; we only support snapshotting WKThumbnailViews.
        Ignore setUsesSnapshot.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setThumbnailView:]):
        (-[WKView _updateThumbnailViewLayer]):
        Stop checking usesSnapshot; it's always true.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::setRootLayerTransform): Deleted.
        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::rootLayerTransform): Deleted.
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::setRootLayerTransform): Deleted.
        Remove rootLayerTransform() and setRootLayerTransform().

2014-08-05  Peyton Randolph  <prandolph@apple.com>

        Rename MAC_LONG_PRESS feature flag to LONG_MOUSE_PRESS.
        https://bugs.webkit.org/show_bug.cgi?id=135276

        Reviewed by Beth Dakin.

        * Configurations/FeatureDefines.xcconfig:

2014-08-04  Andy Estes  <aestes@apple.com>

        [iOS] The raw bytes of an iWork document's PDF preview are displayed rather than the PDF itself
        https://bugs.webkit.org/show_bug.cgi?id=135596

        Reviewed by David Kilzer.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo): If the response will be handled by
        QuickLook, do not call ResourceLoader::didReceiveResponse. It will be called later by
        WebResourceLoaderQuickLookDelegate once converted data is received.

2014-08-05  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * UIProcess/WebContext.h:

2014-08-05  Oliver Hunt  <oliver@apple.com>

        SSO expects to be able to walk parent application's bundle
        https://bugs.webkit.org/show_bug.cgi?id=135581
        <rdar://problem/17864079>

        Reviewed by Alexey Proskuryakov.

        SSO expects to be able to walk the parent application's
        bundle looking for Info plists. To allow this to actually
        work we provide an extension from the ui process that
        covers the bundle directory, and then in the profile
        restrict access to the ability to read directories and
        files named Info.plist.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::parentBundleDirectory):
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::parentBundleDirectory):

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

        Add a flag for the CSS Selectors level 4 implementation
        https://bugs.webkit.org/show_bug.cgi?id=135535

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2014-08-04  Benjamin Poulain  <bpoulain@apple.com>

        Check for null frame when processing geolocation authorization request
        https://bugs.webkit.org/show_bug.cgi?id=135577
        <rdar://problem/17896295>

        Reviewed by Geoffrey Garen.

        I could have put the null check in GeolocationController instead of the WebKit layer,
        but that would be a little weird as GeolocationController knows nothing about how
        the WebKit layer decides what to do with requests.

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):

2014-08-02  Jeremy Jones  <jeremyj@apple.com>

        Support both window and view based video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=135525

        Reviewed by Simon Fraser.

        Parenting in the view instead of the window gives the fullscreen implementation more latitude 
        in how it implements the animation.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): Use view instead of window.
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::clientRectForNode): Use client rect instead of screen rect.
        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode): ditto
        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode): ditto
        (WebKit::screenRectForNode): Deleted.

2014-08-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17891752> [iOS] WebKit links against libraries it doesn’t use
        https://bugs.webkit.org/show_bug.cgi?id=135536

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig: Removed -lassertion_extension and -framework MobileAsset
        from FRAMEWORK_AND_LIBRARY_LDFLAGS_iphonesimulator.

2014-08-01  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS WK2] Add extension read permission to network sandbox profile
        <rdar://problem/17671574>

        Reviewed by Alexey Proskuryakov and Oliver Hunt.

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

2014-08-01  Oliver Hunt  <oliver@apple.com>

        Various frameworks may want to use the container temp directory, so our current restrictions are too tight
        https://bugs.webkit.org/show_bug.cgi?id=135518
        <rdar://17869279>

        Reviewed by Anders Carlsson.

        We don't (and can't) have complete knowledge of what different frameworks
        will want to use the container temporary directory for, and so our
        current attempt to heavily restrict access is simply too tight.

        This patch recognises this by simply giving read-write access to the
        entire NSTemporary() directory (e.g. $container/tmp in the general case),
        rather than the single sub directory we wishfully thought that we would
        be able to get away with.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::mediaCacheDirectory): Deleted.
        * UIProcess/WebContext.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::containerTemporaryDirectory):
        (WebKit::WebContext::platformMediaCacheDirectory): Deleted.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::containerTemporaryDirectory):
        (WebKit::WebContext::platformMediaCacheDirectory): Deleted.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::containerTemporaryDirectory):
        (WebKit::WebContext::platformMediaCacheDirectory): Deleted.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-08-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17862013> REGRESSION (r169357): Disabling "allow plug-ins" doesn't stick on quit/relaunch
        https://bugs.webkit.org/show_bug.cgi?id=135511

        Reviewed by Alexey Proskuryakov.

        Since the values map in the preferences store doesn’t include values that are equal to the
        defaults, we need to update it when a new default is registered.

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::createWithLegacyDefaults): Changed to use new member functions
        for registering defaults.
        (WebKit::WebPreferences::registerDefaultBoolValueForKey): Added. Sets an override default
        in the store, and sets the user default, if there is one, on top of it.
        (WebKit::WebPreferences::registerDefaultUInt32ValueForKey): Ditto.
        * UIProcess/WebPreferences.h: Declared new member functions for getting the user default
        value for a key.

        * UIProcess/efl/WebPreferencesEfl.cpp:
        (WebKit::WebPreferences::platformGetStringUserValueForKey): Added an implementation that
        returns false, because the EFL port doesn’t support persistent user defaults.
        (WebKit::WebPreferences::platformGetBoolUserValueForKey): Ditto.
        (WebKit::WebPreferences::platformGetUInt32UserValueForKey): Ditto.
        (WebKit::WebPreferences::platformGetDoubleUserValueForKey): Ditto.

        * UIProcess/gtk/WebPreferencesGtk.cpp:
        (WebKit::WebPreferences::platformGetStringUserValueForKey): Ditto for the GTK port.
        (WebKit::WebPreferences::platformGetBoolUserValueForKey): Ditto.
        (WebKit::WebPreferences::platformGetUInt32UserValueForKey): Ditto.
        (WebKit::WebPreferences::platformGetDoubleUserValueForKey): Ditto.

        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::WebPreferences::platformGetStringUserValueForKey): Added. Replaces
        setStringValueIfInUserDefaults, on which it is based.
        (WebKit::WebPreferences::platformGetBoolUserValueForKey): Similarly for booleans.
        (WebKit::WebPreferences::platformGetUInt32UserValueForKey): Similarly for integers.
        (WebKit::WebPreferences::platformGetDoubleUserValueForKey): Similarly for doubles.
        (WebKit::WebPreferences::platformInitializeStore): Changed to use the above functions.

2014-08-01  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Fullscreen mode for some applications shows only a black screen.
        https://bugs.webkit.org/show_bug.cgi?id=135493
        <rdar://problem/17628212>

        Reviewed by Jer Noble.

        In some applications, the window hosting the WKView is an InProcess layer hosting mode.
        The fullscreen window created by the WKFullScreenWindowController defaults to an
        OutOfProcess mode.

        When this kind of mismatch is encountered, the WK2 layer in the UI process is supposed
        to send a message back to the WebProcess indicating that the layer hosting mode of the
        containing window is different, so that the WebProcess can adjust its logic accordingly.
        Unfortunately, the notification that this had happened was not getting sent to the
        WebProcess due to an optimization in window state change logic (see Bug 135509 for
        details).

        The fix is to check layer hosting mode state when a WKView is added to a window, and
        notify the WebProcess when it needs to change state to match.
        

        * UIProcess/API/mac/WKView.mm:
        (-[WKView viewDidMoveToWindow]): When moving to a new window, always call
        'layerHostingModeDidChange' to pick up any changes in the layer hosting mode.

2014-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [CMake] GTK and EFL are using PROJECT_VERSION_PATCH to define the micro version
        https://bugs.webkit.org/show_bug.cgi?id=135501

        Reviewed by Gyuyoung Kim.

        Use PROJECT_VERSION_MICRO instead.

        * UIProcess/API/efl/EWebKit2.h.in:
        * UIProcess/API/gtk/WebKitVersion.h.in:

2014-08-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Add missing sections to documentation.

        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add
        WebKitUserContent and WebKitUserContentManager sections to the
        documentation.

2014-08-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unable to do make install since r171901
        https://bugs.webkit.org/show_bug.cgi?id=135497

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Removed ewk_defins.h from the installation list.

2014-07-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] MiniBrower comes to crash when combo box is pressed
        https://bugs.webkit.org/show_bug.cgi?id=135378

        Reviewed by Gyuyoung Kim.

        Added doxygen comment of popup_menu_show/popup_menu_hide not to confuse the usage.

        * UIProcess/API/efl/ewk_view.h:

2014-07-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] remove ewk_defines.h
        https://bugs.webkit.org/show_bug.cgi?id=135456

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_context_menu.h:
        * UIProcess/API/efl/ewk_context_menu_item.h: Moved the declaration from ewk_defines.h
        * UIProcess/API/efl/ewk_defines.h: Removed.

2014-07-31  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed typo correction.
        https://bugs.webkit.org/show_bug.cgi?id=135482

        Rename '_fullScreenIsEnabled' -> '_fullScreenEnabled'

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _fullScreenEnabled]): Added
        (-[WKPreferences _fullScreenIsEnabled]): Deleted.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:

2014-07-31  Brent Fulgham  <bfulgham@apple.com>

        MiniBrowser Should Support Fullscreen Videos in WebKit2 Mode
        https://bugs.webkit.org/show_bug.cgi?id=135482

        Reviewed by Simon Fraser.
        
        Add accessors for the missing Fullscreen API so that MiniBrowser
        can use them.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _fullScreenIsEnabled]): Added.
        (-[WKPreferences _setFullScreenEnabled:]): Added.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Add accessor for
        Fullscreen mode.

2014-07-31  Beth Dakin  <bdakin@apple.com>

        Hit-testing broken in WebKit 1 views with AppKit's contentInsets
        https://bugs.webkit.org/show_bug.cgi?id=135434
        -and corresponding-
        <rdar://problem/17850323>

        Reviewed by Benjamin Poulain.

        Re-named functions.
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::convertFromScrollbarToContainingView):
        (WebKit::PDFPlugin::convertFromContainingViewToScrollbar):

2014-07-31  Oliver Hunt  <oliver@apple.com>

        Various SSO services need the networking process to be able to spoof its bundle id
        https://bugs.webkit.org/show_bug.cgi?id=135468
        <rdar://problem/17864139>

        Reviewed by Alexey Proskuryakov.

        Just add the entitlement required to allow the sandbox to let this happen.

        * Configurations/Network-iOS.entitlements:

2014-07-31  Przemyslaw Kuczynski  <p.kuczynski@samsung.com>

        Fix uninitialized scalar variable
        https://bugs.webkit.org/show_bug.cgi?id=135461

        Reviewed by Alexey Proskuryakov.

        If fopen fails, returned ApplicationMemoryStats structure will be uninitialized

        * Shared/linux/WebMemorySamplerLinux.cpp:
        (WebKit::sampleMemoryAllocatedForApplication): Initialized applicationStats.

2014-07-31  Rohit Kumar  <kumar.rohit@samsung.com>

        Clean up the WebKit build from unused parameter warning in Webkit2/WebProcess module
        https://bugs.webkit.org/show_bug.cgi?id=135413

        Reviewed by Darin Adler.

        * WebProcess/OriginData/WebOriginDataManager.cpp:
        (WebKit::WebOriginDataManager::getOrigins):
        (WebKit::WebOriginDataManager::deleteEntriesForOrigin):
        (WebKit::WebOriginDataManager::deleteEntriesModifiedBetweenDates):
        (WebKit::WebOriginDataManager::deleteAllEntries):

2014-07-31  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS: Crash accessing m_page in WKAccessibilityPageObject
        https://bugs.webkit.org/show_bug.cgi?id=134617

        Reviewed by Darin Adler.

        Provide a way to detach a WK2 WebPage object so that it can uninitialize other pointers, like the accessibility object.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::~WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::platformDetach):
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformDetach):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformDetach):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformDetach):

2014-07-31  Dan Bernstein  <mitz@apple.com>

        WebKit part of: Server trust authentication challenges aren’t sent to the navigation delegate
        https://bugs.webkit.org/show_bug.cgi?id=135327

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame):
        Return true for server trust protection spaces if the delegate implements
        -webView:didReceiveAuthenticationChallenge:completionHandler:.
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): Removed
        an assertion that is no longer true due to the above.

2014-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

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

        * gtk/NEWS: Add release notes for 2.5.1.

2014-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ make distcheck.

        * Shared/InteractionInformationAtPosition.h: Only include
        WebCore/SelectionRect.h for IOS.

2014-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump binary version for 2.6
        https://bugs.webkit.org/show_bug.cgi?id=133724

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Fix JavaScriptCore dependency on
        instrospection commands and make them depend on GTK+-3.0.

2014-07-30  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WK2 iOS): Inline editing for Chinese and Japanese keyboards does not work in Safari.
        https://bugs.webkit.org/show_bug.cgi?id=135449
        <rdar://problem/17824833>

        Reviewed by Benjamin Poulain.

        The WebProcess sends the notification that the gesture modified the phrase boundary,
        but the flag was not being converted properly, therefore we failed to notify
        the text input system that a change had occurred.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (toUIWKSelectionFlags):

2014-07-30  Andy Estes  <aestes@apple.com>

        USE(CONTENT_FILTERING) should be ENABLE(CONTENT_FILTERING)
        https://bugs.webkit.org/show_bug.cgi?id=135439

        Reviewed by Tim Horton.

        We now support two different platform content filters, and will soon support a mock content filter (as part of
        webkit.org/b/128858). This makes content filtering a feature of WebKit, not just an adoption of a third-party
        library. ENABLE() is the correct macro to use for such a feature.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2014-07-30  Andreas Kling  <akling@apple.com>

        Static hash tables no longer need to be coupled with a VM.
        <https://webkit.org/b/135421>

        Reviewed by Geoffrey Garen.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        * WebProcess/Plugins/Netscape/JSNPObject.cpp:

2014-07-30  Dan Bernstein  <mitz@apple.com>

        Get rid of the WKNSURLProtectionSpace wrapper
        https://bugs.webkit.org/show_bug.cgi?id=135425

        Reviewed by Sam Weinig.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject): Don’t allocate WKNSURLProtectionSpace wrappers.

        * Shared/Cocoa/WKNSURLProtectionSpace.h: Removed.
        * Shared/Cocoa/WKNSURLProtectionSpace.mm: Removed.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (canAuthenticateAgainstProtectionSpaceInFrame): Get the NSURLProtectionSpace from the
        WebCore::ProtectionSpace in the WebProtectionSpace.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame): Ditto.

        * WebKit2.xcodeproj/project.pbxproj: Removed references to removed files.

2014-07-30  Dan Bernstein  <mitz@apple.com>

        Updated for changes to the WebCore::Credential API.
        Work towards fixing https://bugs.webkit.org/show_bug.cgi?id=135327

        Reviewed by Alexey Proskuryakov.

        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::receivedCredential):Use new Credential::nsCredential getter.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Credential>::encode):  If encoding the credential requires encoding the
        platform data, do that.
        (IPC::ArgumentCoder<Credential>::decode): If platform data was encoded, decode it.
        * Shared/WebCoreArgumentCoders.h:

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<Credential>::encodePlatformData): Archive the NSURLCredential.
        (IPC::ArgumentCoder<Credential>::decodePlatformData): Unarchive it.

        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]): Use
        Credential constructor that takes an NSURLCredential.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): Ditto.


2014-07-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] REGRESSION(r171742): Test /webkit2/WebKitWebView/disallow-modal-dialogs fails
        https://bugs.webkit.org/show_bug.cgi?id=135412

        Reviewed by Philippe Normand.

        The problem is that WebPageProxy::setUIClient() calls
        setCanRunModal() with the value of m_uiClient->canRunModal() which
        is always true for us. We override that manually by calling
        setCanRunModal() depending on the WebKitSettings. In r171742,
        webkitWebViewUpdateSettings(), the method that overrides
        setCanRunModal(), was moved before attachUIClientToView(), so the
        value set by WebPageProxy::setUIClient() is the last one and takes
        precedence. We need to make sure webkitWebViewUpdateSettings() is
        always called after attachUIClientToView().

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Move webkitWebViewUpdateSettings()
        call after attachUIClientToView() and add a comment to not forget
        about it again.

2014-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove WebKitCertificateInfo from WebKit2GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=134830

        Reviewed by Gustavo Noronha Silva.

        It was added to make the API more convenient but it has ended up
        making it more complicated. WebKitWebView::load-failed-with-tls-errors
        now receives a GTlsCertificate + GTlsCertificateFlags and
        webkit_web_context_allow_tls_certificate_for_host() receives a GTlsCertificate
        since the errors are not actually needed. This makes the API more
        consistent with the existing method webkit_web_view_get_tls_info().

        * PlatformGTK.cmake: Remove files from compilation.
        * UIProcess/API/gtk/WebKitCertificateInfo.cpp: Removed.
        * UIProcess/API/gtk/WebKitCertificateInfo.h: Removed.
        * UIProcess/API/gtk/WebKitCertificateInfoPrivate.h: Removed.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkit_web_context_allow_tls_certificate_for_host):
        * UIProcess/API/gtk/WebKitWebContext.h:
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_class_init):
        (webkitWebViewLoadFailedWithTLSErrors):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:
        * UIProcess/API/gtk/webkit2.h:

2014-07-29  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL] Do not initialize g_type system explicitly in the ewk_init()
        https://bugs.webkit.org/show_bug.cgi?id=135407

        Reviewed by Gyuyoung Kim.

        EFL build requires glib version 2.38 but g_type_init() has been deprecated
        since version 2.36. As the type system is initialized automatically since
        version 2.36, we do not need to call g_type_init() in the ewk_init().

        https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#g-type-init

        * UIProcess/API/efl/ewk_main.cpp:
        (ewk_init):

2014-07-29  Enrica Casucci  <enrica@apple.com>

        REGRESSION [WebKit2 iOS]: Cannot add shortcut to user dictionary from non editable content.
        https://bugs.webkit.org/show_bug.cgi?id=135392
        <rdar://problem/17760073>

        Reviewed by Benjamin Poulain.

        Adding a shortcut to the user dictionary needs to be available in non editable content too.

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

2014-07-29  Tim Horton  <timothy_horton@apple.com>

        WKPDFView paints rotated pages squished
        https://bugs.webkit.org/show_bug.cgi?id=135401
        <rdar://problem/17173916>

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _computePageAndDocumentFrames]):
        [page size] returns the crop box's size, ignoring rotation.
        [page cropBoxAccountForRotation] respects rotation, but otherwise returns the same size.
        UIPDFPageView will respect rotation when painting, so we
        should make sure that it is given an aspect ratio that also
        respects rotation, so that the page isn't squished.

2014-07-29  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF for !ENABLE(DATABASE_PROCESS) platforms.

        * WebProcess/OriginData/WebOriginDataManager.cpp:
        (WebKit::WebOriginDataManager::getOrigins):
        (WebKit::WebOriginDataManager::deleteEntriesForOrigin):
        (WebKit::WebOriginDataManager::deleteEntriesModifiedBetweenDates):
        (WebKit::WebOriginDataManager::deleteAllEntries):

2014-07-29  Brady Eidson  <beidson@apple.com>

        Make WKOriginDataManager actually operate on IndexedDatabases.
        https://bugs.webkit.org/show_bug.cgi?id=135346

        Reviewed by Sam Weinig (and David Kilzer and Alex Christensen)

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::DatabaseProcess):
        (WebKit::DatabaseProcess::getIndexedDatabaseOrigins): 
        (WebKit::DatabaseProcess::doGetIndexedDatabaseOrigins):
        (WebKit::removeAllDatabasesForOriginPath): Utility to delete all database files for the given origin path
            that have been modified between the given dates.
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesForOrigin):
        (WebKit::DatabaseProcess::doDeleteIndexedDatabaseEntriesForOrigin):
        (WebKit::DatabaseProcess::deleteIndexedDatabaseEntriesModifiedBetweenDates):
        (WebKit::DatabaseProcess::doDeleteIndexedDatabaseEntriesModifiedBetweenDates):
        (WebKit::DatabaseProcess::deleteAllIndexedDatabaseEntries):
        (WebKit::DatabaseProcess::doDeleteAllIndexedDatabaseEntries):
        * DatabaseProcess/DatabaseProcess.h:

        * Shared/WebCrossThreadCopier.cpp:
        (WebCore::SecurityOriginData>::copy):
        * Shared/WebCrossThreadCopier.h:

        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::getOrigins):
        (WebKit::WebOriginDataManagerProxy::didGetOrigins):
        (WebKit::WebOriginDataManagerProxy::deleteEntriesForOrigin):
        (WebKit::WebOriginDataManagerProxy::deleteEntriesModifiedBetweenDates):
        (WebKit::WebOriginDataManagerProxy::deleteAllEntries):

        * WebProcess/OriginData/WebOriginDataManager.cpp:
        (WebKit::WebOriginDataManager::getOrigins): Pipe IDB requests through to the DatabaseProcess.
        (WebKit::WebOriginDataManager::deleteEntriesForOrigin): Ditto.
        (WebKit::WebOriginDataManager::deleteEntriesModifiedBetweenDates): Ditto.
        (WebKit::WebOriginDataManager::deleteAllEntries): Ditto.

2014-07-29  Commit Queue  <commit-queue@webkit.org>

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

        Broke two IndexedDB tests (Requested by ap on #webkit).

        Reverted changeset:

        "IDB transactions never reset if the Web Process ends before
        cleaning up"
        https://bugs.webkit.org/show_bug.cgi?id=135218
        http://trac.webkit.org/changeset/171704

2014-07-29  Daniel Bates  <dabates@apple.com>

        Use WTF::move() instead of std::move() to help ensure move semantics
        https://bugs.webkit.org/show_bug.cgi?id=135351

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/Cocoa/_WKSessionState.mm:
        (-[_WKSessionState _initWithSessionState:]):
        * UIProcess/API/gtk/WebKitUserContent.cpp:
        (toStringVector): Remove use of std::move(). It's unnecessary to call std::move() on an rvalue.
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::mouseEvent):

2014-07-28  Pratik Solanki  <psolanki@apple.com>

        Get SharedBuffer.h out of ResourceBuffer.h (and a few other places)
        https://bugs.webkit.org/show_bug.cgi?id=131782

        Original patch by Tim Horton.
        Reviewed by Darin Adler.

        * NetworkProcess/NetworkResourceLoader.cpp:
        * WebProcess/Network/NetworkProcessConnection.cpp:
        Include SharedBuffer.h in implementation files.

        * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.h:
        Un-indent namespace and remove SharedBuffer forward-declaration.

2014-07-29  Adrian Perez de Castro  <aperez@igalia.com>

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

        Reviewed by Carlos Garcia Campos.

        Removes WebKitWebViewGroup, effectively reverting the changes
        introduced by r149117. The motivation for WebKitWebViewGroup
        was using the user style sheet injection API, which has been
        moved into WebKitUserContentManager, rendering it unneeded.

        * PlatformGTK.cmake: Remove WebKitWebViewGroup source files
        from the build.
        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewCreate): Accomodate for changes in the signature of
        webkitWebViewBaseCreate().
        * UIProcess/API/gtk/WebKitSettings.cpp: Update API documentation.
        * UIProcess/API/gtk/WebKitWebContext.cpp: Remove the default web
        view group from WebKitWebContext.
        (webkitWebContextCreatePageForWebView): Allow passing a
        WebPreferences object at construction.
        (webkitWebContextGetDefaultWebViewGroup): Deleted.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h: Ditto.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewUpdateSettings): Use WebPageProxy::setPreferences()
        directly. Handle the case when webkit_web_view_set_settings()
        is called on construction by doing an early-return.
        (webkitWebViewConstructed): Call webkitWebViewUpdateSettings()
        after creating the internal WebPageProxy object.
        (webkitWebViewSetProperty): Removed "group" property, added
        "settings" property.
        (webkitWebViewGetProperty): Ditto.
        (webkitWebViewDispose): Do not disconnect signal handler for
        the (now unexistant) WebKitWebViewGroup.
        (webkit_web_view_class_init): Removed "group" property, added
        "settings" property.
        (webkitWebViewHandleAuthenticationChallenge): Access the
        WebKitWebSettings directly.
        (webkit_web_view_new_with_related_view): Make new views share
        settings with their related view.
        (webkit_web_view_new_with_settings): Added.
        (webkit_web_view_set_settings): Access the settings directly in
        the WebKitWebView.
        (webkit_web_view_get_settings): Ditto.
        (webkit_web_view_set_zoom_level): Ditto.
        (webkit_web_view_get_zoom_level): Ditto.
        (webkitWebViewSettingsChanged): Deleted.
        (webkitWebViewDisconnectSettingsChangedSignalHandler): Deleted.
        (webkit_web_view_new_with_group): Deleted.
        (webkit_web_view_get_group): Deleted.
        * UIProcess/API/gtk/WebKitWebView.h: Removed API methods related
        to WebKitWebViewGroup.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate): Allow passing a WebPreferences object
        for constructing the WebPageProxy.
        (webkitWebViewBaseUpdatePreferences): Instead of going through
        the page group, use WebPageProxy::preferences() directly.
        (webkitWebViewBaseCreateWebPage): Allow passing a WebPreferences
        object for constructing the WebPageProxy.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Update the
        prototypes of the internal functions.
        * UIProcess/API/gtk/WebKitWebViewGroup.cpp: Removed.
        * UIProcess/API/gtk/WebKitWebViewGroup.h: Removed.
        * UIProcess/API/gtk/WebKitWebViewGroupPrivate.h: Removed.
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Change public API
        bits in the documentation.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Ditto.
        * UIProcess/API/gtk/docs/webkit2gtk.types: Ditto.
        * UIProcess/API/gtk/webkit2.h: Removed WebKitWebViewGroup.h header.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Accomodate for changes in the signature of
        webkitWebViewBaseCreate().

2014-07-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Implement webkit_web_view_load_string() in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=134735

        Reviewed by Sergio Villar Senin.

        Add webkit_web_view_load_bytes() that receives a GBytes to load
        random data in the web view using the given MIME-Type, encoding
        and base URL.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (releaseGBytes):
        (webkit_web_view_load_bytes):
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2014-07-29  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Alpha value of ewk_view_bg_color_set is not working
        https://bugs.webkit.org/show_bug.cgi?id=135333

        Reviewed by Gyuyoung Kim.

        evas_object_image_alpha_set should be called for the transparent evas object.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::handleEvasObjectColorSet):
        (EwkView::setBackgroundColor): Checked the alpha value of object and called evas_object_image_alpha_set.
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_bg_color_set): Moved the logic to EwkView.

2014-07-28  Mark Rowe  <mrowe@apple.com>

        Web process crash causes UI process to die with an assertion failure in Connection::exceptionSourceEventHandler
        https://bugs.webkit.org/show_bug.cgi?id=135366

        Reviewed by Dan Bernstein.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::exceptionSourceEventHandler): Remove the assertion since it frequently fires during
        normal development with debug builds.

2014-07-28  Benjamin Poulain  <bpoulain@apple.com>

        [iOS WK2] WKWebView sometime tries to change the size of a null DrawingAreaProxy
        https://bugs.webkit.org/show_bug.cgi?id=135368
        <rdar://problem/16988887>

        Reviewed by Simon Fraser.

        We should never assume DrawingAreaProxy exists in the API invoked by the clients
        of WKWebView. There are at least two cases where the DrawingAreaProxy is null:
        -In some path on initialization.
        -After a crash.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        We can safely null check and skip setting the size. If the call was skipped,
        the size is set on DrawingAreaProxy initialization by querying the current
        size through the page client.

2014-07-28  Roger Fong  <roger_fong@apple.com>

        Disable tagged strings for the plugin process.
        https://bugs.webkit.org/show_bug.cgi?id=135354
        <rdar://problem/17295639>.

        Patch by Alexey Proskuryakov and Roger Fong.

        Reviewed by Anders Carlsson.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToReExecService):

2014-07-25  Jeffrey Pfau  <jpfau@apple.com>

        IDB transactions never reset if the Web Process ends before cleaning up
        https://bugs.webkit.org/show_bug.cgi?id=135218

        Reviewed by Darin Adler.

        * DatabaseProcess/DatabaseToWebProcessConnection.cpp:
        (WebKit::DatabaseToWebProcessConnection::didClose):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::unregisterConnection):
        (WebKit::UniqueIDBDatabase::didCompleteTransactionOperation):
        (WebKit::UniqueIDBDatabase::openBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::resetBackingStoreTransaction):
        (WebKit::UniqueIDBDatabase::didEstablishTransaction):
        (WebKit::UniqueIDBDatabase::didResetTransaction):
        (WebKit::UniqueIDBDatabase::resetAllTransactions):
        (WebKit::UniqueIDBDatabase::finalizeRollback):
        (WebKit::UniqueIDBDatabase::absoluteDatabaseDirectory):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::rollbackTransaction):

2014-07-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK] Keep non-DATABASE_PROCESS build
        https://bugs.webkit.org/show_bug.cgi?id=135321

        Reviewed by Gyuyoung Kim.

        This is the patch for r171622 in non-DATABASE_PROCESS builds.
        Change sendToDatabaseProcessRelaunchingIfNecessary to support non-DATABASE_PROCESS implementation.

        * CMakeLists.txt:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToDatabaseProcessRelaunchingIfNecessary):

2014-07-27  Gavin Barraclough  <baraclough@apple.com>

        Don't rely on reading applicationState from within DidEnterBackground/WillEnterForeground
        https://bugs.webkit.org/show_bug.cgi?id=135329
        rdar://problem/17818308

        Reviewed by Sam Weinig.

        API may not be stable.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewVisible):
            - changed to use -[WKContentView isBackground]
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager init]):
            - split notification handlers
        (-[WKProcessAssertionBackgroundTaskManager _applicationWillEnterForeground:]):
        (-[WKProcessAssertionBackgroundTaskManager _applicationDidEnterBackground:]):
        (-[WKProcessAssertionBackgroundTaskManager _applicationDidEnterBackgroundOrWillEnterForeground:]): Deleted.
            - Assume application is background is after DidEnterBackground, and not after WillEnterForeground
        * UIProcess/ios/WKContentView.h:
            - added isBackground.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:configuration:webView:]):
            - check applicationState at init.
        (-[WKContentView isBackground]):
            - accessor
        (-[WKContentView _applicationDidEnterBackground:]):
        (-[WKContentView _applicationWillEnterForeground:]):
            - update isBackground

2014-07-26  Enrica Casucci  <enrica@apple.com>

        [WebKit2 iOS]Add support for caret movement for the 3rd party keyboard protocol.
        https://bugs.webkit.org/show_bug.cgi?id=135325
        <rdar://problem/17682120>

        Reviewed by Sam Weinig.

        WKContentView now implements moveByOffset to support the
        protocol for 3rd party keyboards.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView moveByOffset:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::moveSelectionByOffset):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::moveSelectionByOffset):

2014-07-26  Timothy Horton  <timothy_horton@apple.com>

        Crash in Web Content Process under ~PDFDocument under clearTouchEventListeners at topDocument()
        https://bugs.webkit.org/show_bug.cgi?id=135319
        <rdar://problem/17315168>

        Reviewed by Darin Adler and Antti Koivisto.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::committedLoad):
        Allow data through to WebCore for frames with custom content providers;
        the only custom content provider currently implemented is main frame PDF
        on iOS, which will end up creating a PDFDocument in WebCore, which drops all
        data on the floor immediately, so this won't result in WebCore doing anything
        with the data, but makes sure that more of the normal document lifecycle is maintained.

        In the future, we might want to consider ensuring that all custom content providers
        end up creating a SinkDocument or something similarly generic to ensure that
        WebCore doesn't try to do anything with their data, but for now, the only client is covered.

2014-07-25  Jeremy Jones  <jeremyj@apple.com>

        Parent fullscreen from window instead of view
        https://bugs.webkit.org/show_bug.cgi?id=135310

        Reviewed by Jer Noble.

        Parenting in the view causes an incorrect animation to fullscreen, and can cause 
        fullscreen to only expand to the size of the view instead of the whole window.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): pass view's window.
        * WebProcess/ios/WebVideoFullscreenManager.mm: screenRect instead of clientRect
        (WebKit::screenRectForNode): was clientRectForNode
        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode): use screenRectForNode
        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode): ditto
        (WebKit::clientRectForNode): Deleted.

2014-07-25  Oliver Hunt  <oliver@apple.com>

        Creating incorrect sandbox extension for hsts plist due to missing /
        https://bugs.webkit.org/show_bug.cgi?id=135309

        Reviewed by Sam Weinig.

        So it turns out that you do actually need /'s in paths...
        Now we actually create the correct extension.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultNetworkingHSTSDatabasePath):

2014-07-24  Anders Carlsson  <andersca@apple.com>

        WKNavigation's properties are either always nil or don't behave as documented
        https://bugs.webkit.org/show_bug.cgi?id=135267
        <rdar://problem/17730536>

        Reviewed by Andreas Kling.

        Remove the properties from WKNavigation and introduce -[WKNavigation _request] as SPI for now.

        * Shared/API/Cocoa/WebKitPrivate.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation _request]):
        (-[WKNavigation initialRequest]): Deleted.
        (-[WKNavigation request]): Deleted.
        (-[WKNavigation setRequest:]): Deleted.
        (-[WKNavigation response]): Deleted.
        (-[WKNavigation error]): Deleted.
        * UIProcess/API/Cocoa/WKNavigationInternal.h:
        * UIProcess/API/Cocoa/WKNavigationPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigationInternal.h.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createLoadRequestNavigation):
        * WebKit2.xcodeproj/project.pbxproj:

2014-07-25  Brady Eidson  <beidson@apple.com>

        Clean up WKOriginDataManager and get it messaging to the DatabaseProcess
        https://bugs.webkit.org/show_bug.cgi?id=135035

        Reviewed by Sam Weinig.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::DatabaseProcess): Instantiate the WebOriginDataManager, installing its message handler.
        (WebKit::DatabaseProcess::didReceiveMessage): Try the message receiver map, which will try the WebOriginDataManager.
        * DatabaseProcess/DatabaseProcess.h:
        * DatabaseProcess/DatabaseProcess.messages.in:

        * UIProcess/API/C/WKOriginDataManager.cpp:
        (WKOriginDataManagerDeleteEntriesForOrigin): Updated to also take a callback.
        (WKOriginDataManagerDeleteEntriesModifiedBetweenDates): Added.
        (WKOriginDataManagerDeleteAllEntries): Updated to also take a callback.
        (WKOriginDataManagerStartObservingChanges): Deleted.
        (WKOriginDataManagerStopObservingChanges): Deleted.
        (WKOriginDataManagerSetChangeClient): Deleted.
        * UIProcess/API/C/WKOriginDataManager.h:

        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::didReceiveMessage): Send messages to the WebOriginDataManagerProxy supplement if appropriate.
        * UIProcess/Databases/DatabaseProcessProxy.h:
        * UIProcess/Databases/DatabaseProcessProxy.messages.in:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext): Instantiate the WebOriginDataManagerProxy supplement.
        * UIProcess/WebContext.h:
        (WebKit::WebContext::sendToDatabaseProcessRelaunchingIfNecessary):

        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::contextDestroyed):
        (WebKit::WebOriginDataManagerProxy::processDidClose):
        (WebKit::WebOriginDataManagerProxy::getOrigins):
        (WebKit::WebOriginDataManagerProxy::deleteEntriesForOrigin): Setup a callback with the message.
        (WebKit::WebOriginDataManagerProxy::deleteEntriesModifiedBetweenDates): Added
        (WebKit::WebOriginDataManagerProxy::didDeleteEntries): Call the callback.
        (WebKit::WebOriginDataManagerProxy::deleteAllEntries): Setup a callback with the message.
        (WebKit::WebOriginDataManagerProxy::didDeleteAllEntries): Call the callback.
        (WebKit::WebOriginDataManagerProxy::startObservingChanges): Deleted.
        (WebKit::WebOriginDataManagerProxy::stopObservingChanges): Deleted.
        (WebKit::WebOriginDataManagerProxy::setChangeClient): Deleted.
        (WebKit::WebOriginDataManagerProxy::didChange): Deleted.
        * UIProcess/WebOriginDataManagerProxy.h:
        * UIProcess/WebOriginDataManagerProxy.messages.in:

        * UIProcess/WebOriginDataManagerProxyChangeClient.cpp: Removed.
        * UIProcess/WebOriginDataManagerProxyChangeClient.h: Removed.

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/OriginData/WebOriginDataManager.cpp:
        (WebKit::WebOriginDataManager::deleteEntriesForOrigin): Send the callback reply.
        (WebKit::WebOriginDataManager::deleteEntriesModifiedBetweenDates): Added.
        (WebKit::WebOriginDataManager::deleteAllEntries): Send the callback reply.
        (WebKit::WebOriginDataManager::startObservingChanges): Deleted.
        (WebKit::WebOriginDataManager::stopObservingChanges): Deleted.
        * WebProcess/OriginData/WebOriginDataManager.h:
        * WebProcess/OriginData/WebOriginDataManager.messages.in:

2014-07-25  Gavin Barraclough  <baraclough@apple.com>

        Yosemite version number is 101000
        https://bugs.webkit.org/show_bug.cgi?id=135301

        Reviewed by Sam Weinig.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        * WebProcess/com.apple.WebProcess.sb.in:

2014-07-24  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Do not try to hit test a null mainFrameRenderView on dynamicViewportSizeUpdate()
        https://bugs.webkit.org/show_bug.cgi?id=135277
        <rdar://problem/17804891>

        Reviewed by Tim Horton.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        There is no guarantee that the main frame have its root view when performing a dynamicViewportSizeUpdate(),
        we should not attempt to use the layer without null checking it first.

        The odd part for me is <rdar://problem/17804891> is a little too frequent. In the vast majority of cases,
        there is a RenderView, it seems actually pretty hard not to have one on dynamicViewportSizeUpdate().

        Skipping hit testing is safe because it is a completely optional part of this algorithm.
        When the hit test is not done, the new position is computed based on the relative position prior to
        the size change.

2014-07-24  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/17593701> Assertion failure in WebPage::reload (!m_pendingNavigationID) when reloading after a same-document back navigation
        https://bugs.webkit.org/show_bug.cgi?id=135129

        Reviewed by Darin Adler.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::childItemWithDocumentSequenceNumber): New helper function based on
        WebCore::HistoryItem::childItemWithDocumentSequenceNumber.
        (WebKit::documentTreesAreEqual): New helper function based on
        WebCore::HistoryItem::hasSameDocumentTree.
        (WebKit::WebBackForwardListItem::itemIsInSameDocument): Added. Based on
        WebCore::HistoryItem::shouldDoSameDocumentNavigationTo.
        * Shared/WebBackForwardListItem.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goForward): Don’t assign a new navigation ID if the back-forward
        navigation is a same-document navigation.
        (WebKit::WebPageProxy::goBack): Ditto.
        (WebKit::WebPageProxy::goToBackForwardItem): Ditto.

2014-07-24  Tim Horton  <timothy_horton@apple.com>

        Sometimes WKWebView is blank after resuming the app, until you scroll
        https://bugs.webkit.org/show_bug.cgi?id=135275
        <rdar://problem/17803170>

        Reviewed by Benjamin Poulain.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::dispatchViewStateChange):
        If the UI process is waiting for a didUpdateViewState, we need to *always*
        get a reply from the Web Process, so dispatchViewStateChange should *always*
        send SetViewState even if nothing changed (so that we get the reply).

2014-07-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Header bar on nytimes articles lands in the wrong place after rubberbanding
        https://bugs.webkit.org/show_bug.cgi?id=135221
        <rdar://problem/17542454>

        Reviewed by Benjamin Poulain.
        
        The call to didCommitLayerTree() can cause one or two visible rect updates,
        via changes to the UIScrollView contentSize and contentOffset. As a result, we
        would notify the scrolling tree about a viewport change, but using the old
        scrolling tree rather than the new one, so we could move layers around for
        nodes which are about to be removed from the tree.
        
        However, we also have to ensure that programmatic scrolls are applied after
        didCommitLayerTree() has updated the view size, so have RemoteScrollingCoordinatorProxy
        store data about programmatic scrolls and return them to the caller, which
        can apply them after didCommitLayerTree().

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp: Store a pointer to a RequestedScrollInfo
        for the duration of the tree update, so that we can store requested scroll info in it.
        (WebKit::RemoteScrollingCoordinatorProxy::RemoteScrollingCoordinatorProxy):
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeRequestsScroll):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLayerTree): Give Mac a stub implementation.
        * UIProcess/WebPageProxy.h: Group some editing-related functions together.
        (WebKit::WebPageProxy::editorState):
        (WebKit::WebPageProxy::canDelete):
        (WebKit::WebPageProxy::hasSelectedRange):
        (WebKit::WebPageProxy::isContentEditable):
        (WebKit::WebPageProxy::maintainsInactiveSelection):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree): Ordering change: update
        the layer tree, then call didCommitLayerTree(), then do the viewport update, followed
        by any programmatic scroll.

2014-07-24  Peyton Randolph  <prandolph@apple.com>

        Rename feature flag for long-press gesture on Mac.                                                                   
        https://bugs.webkit.org/show_bug.cgi?id=135259                                                                  

        Reviewed by Beth Dakin.

        * Configurations/FeatureDefines.xcconfig:
        Rename LINK_LONG_PRESS to MAC_LONG_PRESS.

2014-07-24  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/17766348> [Cocoa] WebCore::ProtectionSpace doesn’t preserve all NSURLProtectionSpace properties, such as the distinguishedNames array
        https://bugs.webkit.org/show_bug.cgi?id=135229

        Reviewed by Alexey Proskuryakov.

        * Shared/Cocoa/WKNSURLProtectionSpace.mm: Changed to use ProtectionSpace::nsSpace.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ProtectionSpace>::encode): If encoding the space requires encoding the
        platform data, do that.
        (IPC::ArgumentCoder<ProtectionSpace>::decode): If platform data was encoded, decode it.
        * Shared/WebCoreArgumentCoders.h:

        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData): Archive the NSURLProtectionSpace.
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData): Unarchive it.

        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
        (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData): Added.
        (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData): Added.

2014-07-24  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Fixed/Sticky layers can get mispositioned when the layer tree commit change their position or size
        https://bugs.webkit.org/show_bug.cgi?id=135227
        <rdar://problem/17279500>

        Reviewed by Simon Fraser.

        In some cases, a fixed or sticky positioned layer would end up at its position corresponding to the WebProcess
        instead of sticking the to real viewport in the UIProcess.

        The sequence of event is:
        1) A layer becomes fixed in some ScrollingTree transaction.
        2) Later, some change in the WebProcess causes a LayerTree update for that exact same layer, but no corresponding
           ScrollingTree update is made.
        3) In the UIProcess, the position of the fixed layer is changed due to the LayerTree update.
           But! There is no ScrollingTree change, updateScrollingTree() never sets fixedOrStickyLayerChanged to true,
           and the position is not corrected.
        -> The layer is now at the wrong position until the next VisibleContentRectUpdate.

        Ideally, we should have fixedOrStickyLayerChanged track if either the position or size of a fixed layer changed
        in the layer tree. This is tricky since the layer tree does not keep track of the fixed nodes of the scrolling tree.

        Since this complexity seems risky at this point, I went for something simpler but with more overhead:
        any time the scrolling tree contains either a fixed or sticky layer, viewportChangedViaDelegatedScrolling()
        is called to "fix" the position.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree):
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        (WebKit::RemoteScrollingCoordinatorProxy::hasFixedOrSticky):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

2014-07-24  Oliver Hunt  <oliver@apple.com>

        Need to explicitly support location services in webcontent profile
        https://bugs.webkit.org/show_bug.cgi?id=135251
        <rdar://17798346>

        Reviewed by Dan Bernstein.

        Switching to uikit-app means that we remove the implicit support
        for location services. This makes us explicitly opt-in.

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

2014-07-24  Tim Horton  <timothy_horton@apple.com>

        Crash at [WKContentView _applicationWillEnterForeground:] + 28
        <rdar://problem/17797103>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationWillEnterForeground:]):
        Drawing area can be null; null check it!
        It's ok if we don't hide the content in this case, because if the drawing area is null,
        it doesn't have any layers in the tree anyway.

2014-07-23  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Some help.apple.com pages not scrollable
        https://bugs.webkit.org/show_bug.cgi?id=135228
        <rdar://problem/17790792>

        Reviewed by Benjamin Poulain.
        
        On pages which size their document to the device size, the WKContentView size
        never changes after it's created. In this situation, we never set a bounds
        on the _rootContentView, so it remains zero-sized which breaks hit testing
        on all enclosed UIScrollViews for overflow:scroll.
        
        Fix by making the _rootContentView and the _inspectorIndicationView use autosizing
        so they are always the size of their parent view, and remove the explicit setting
        of their bounds.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:configuration:webView:]):
        (-[WKContentView setShowingInspectorIndication:]):
        (-[WKContentView _didCommitLayerTree:]):

2014-07-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] r171124 is incorrect when the virtual keyboard is up
        https://bugs.webkit.org/show_bug.cgi?id=135187

        Reviewed by Simon Fraser.

        Unfortunately, restricting the input into the document rect does not work.
        When the keyboard is up, the keyboard bounds can overlap the WKWebView, and
        the valid range should account for that.

        Instead of playing with the keyboard rect, we can limit the scroll position
        inside the valid range of UIScrollView. The keyboard always adjusts the UIScrollView
        range as needed to give access to the content. Using that range is a bit more permissive
        because the page could scroll to reveal content in the content inset defined by the client
        of the API (this could actually be quite useful for hybrid apps).

        There was already a function to change the content offset in the valid scrollview
        range: changeContentOffsetBoundedInValidRange(), I extracted the range check
        to contentOffsetBoundedInValidRange() for the needs of -[WKWebView _scrollToContentOffset:].

        So...contentOffsetBoundedInValidRange() is cool, but it is not in the right coordinate
        system. The scroll position we get from the WebProcess is in document coordinates, while
        contentOffsetBoundedInValidRange() works with the UIScrollView coordinates.
        To fix that, we scale the input position to get to the same scale as UIScrollView, then
        apply the insets with the weirdly named [WKWebView _adjustedContentOffset:].

        * UIProcess/API/Cocoa/WKWebView.mm:
        (contentOffsetBoundedInValidRange):
        (changeContentOffsetBoundedInValidRange):
        (-[WKWebView _scrollToContentOffset:]):

2014-07-23  Commit Queue  <commit-queue@webkit.org>

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

        It will regress some scroll position restoration on navigation
        (r167916). (Requested by smfr on #webkit).

        Reverted changeset:

        "[iOS WK2] Header bar on nytimes articles lands in the wrong
        place after rubberbanding"
        https://bugs.webkit.org/show_bug.cgi?id=135221
        http://trac.webkit.org/changeset/171498

2014-07-23  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Header bar on nytimes articles lands in the wrong place after rubberbanding
        https://bugs.webkit.org/show_bug.cgi?id=135221

        Reviewed by Tim Horton.
        
        The call to didCommitLayerTree() can cause one or two visible rect updates,
        via changes to the UIScrollView contentSize and contentOffset. As a result, we
        would notify the scrolling tree about a viewport change, but using the old
        scrolling tree rather than the new one, so we could move layers around for
        nodes which are about to be removed from the tree.
        
        Fix by m_webPageProxy->didCommitLayerTree() after the scrolling tree has been
        committed.

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

2014-07-23  Oliver Hunt  <oliver@apple.com>

        Add a pseudo target to create sandbox override roots
        https://bugs.webkit.org/show_bug.cgi?id=135216
        <rdar://17785560>

        Reviewed by Alexey Proskuryakov.

        Just a duplicate of the standard ios sandbox target, targetting
        the profile overrides directory.  This means we can make roots
        that "Just Work".

        * WebKit2.xcodeproj/project.pbxproj:

2014-07-23  Oliver Hunt  <oliver@apple.com>

        Incorrect commit for sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=135214
        <rdar://17739108>

        Reviewed by Anders Carlsson.

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

2014-07-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17782623> [iOS] Client-certificate authentication isn’t working with some certificates
        https://bugs.webkit.org/show_bug.cgi?id=135206

        Reviewed by Anders Carlsson.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::copyPersistentRef): Added this helper function. It differs from
        SecKeyCopyPersistentRef in that if multiple copies of the key exist in the keychain, it
        ensures that we get a reference to the copy that is in the keychain access group that the
        Networking process can use.
        (IPC::encode): Use copyPersistentRef.

2014-07-23  Bem Jones-Bey  <bjonesbe@adobe.com>

        Remove CSS_EXCLUSIONS compile flag and leftover code
        https://bugs.webkit.org/show_bug.cgi?id=135175

        Reviewed by Zoltan Horvath.

        At this point, the CSS_EXCLUSIONS flag guards nothing but some useless
        stubs. This removes the flag and the useless code.

        * Configurations/FeatureDefines.xcconfig:

2014-07-23  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r171239): Much more time spent taking snapshots during the PLT
        https://bugs.webkit.org/show_bug.cgi?id=135177
        <rdar://problem/17764847>

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willChangeCurrentHistoryItemForMainFrame):
        (WebKit::WebPageProxy::willChangeCurrentHistoryItem): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willChangeCurrentHistoryItem):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willChangeCurrentHistoryItemForMainFrame):
        (WebKit::WebPage::willChangeCurrentHistoryItem): Deleted.
        * WebProcess/WebPage/WebPage.h:
        Rename WillChangeCurrentHistoryItem to WillChangeCurrentHistoryItemForMainFrame.
        Only send it when the current history item for the main frame changes.

2014-07-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] EWebKit2.h should contain version information
        https://bugs.webkit.org/show_bug.cgi?id=135189

        Reviewed by Gyuyoung Kim.

        Generate EWebKit2.h to contain the version information.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EWebKit2.h.in: Renamed from Source/WebKit2/UIProcess/API/efl/EWebKit2.h.

2014-07-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Do not generate forwarding header for ewk headers
        https://bugs.webkit.org/show_bug.cgi?id=135147

        Reviewed by Gyuyoung Kim.

        Only EWebKit2.h and ewk_text_checker.h are generated as forwarding header.
        This is unnecessary.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        * UIProcess/API/efl/tests/test_ewk2_context_menu.cpp:
        * UIProcess/API/efl/tests/test_ewk2_window_features.cpp:
        * UIProcess/efl/TextCheckerClientEfl.h:

2014-07-22  Commit Queue  <commit-queue@webkit.org>

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

        Broke three API tests (Requested by ap on #webkit).

        Reverted changeset:

        "REGRESSION (r171239): Much more time spent taking snapshots
        during the PLT"
        https://bugs.webkit.org/show_bug.cgi?id=135177
        http://trac.webkit.org/changeset/171366

2014-07-22  Oliver Hunt  <oliver@apple.com>

        Reduce the size of the root WebContent sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=135182
        <rdar://problem/17739108>

        Reviewed by Alexey Proskuryakov.

        Switch from apple-ui-app to uikit-app as the root of the webcontent
        profile.

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

2014-07-22  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed build fix on EFL port after r171356.

        Implement a dummy platformMediaCacheDirectory() to avoid undefined reference error.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformMediaCacheDirectory):

2014-07-22  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Selection inside accelerated overflow:scroll doesn't track scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=135180
        <rdar://problem/16721055>

        Reviewed by Simon Fraser.

        Adds notifications to the WKContentView to know when scrolling starts and ends
        in an overflow scroll. When scrolling starts, we hide the selection and we restore
        it when scrolling ends, though not before the selection information in the editor
        state has been updated.
        It also adds a new method to the EditorClient class to force the
        selection update when scrolling is completed.
        
        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeWillStartScroll):
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidEndScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDecelerating:]):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollWillStart):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollDidEnd):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::overflowScrollWillStartScroll):
        (WebKit::PageClientImpl::overflowScrollDidEndScroll):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartScroll):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidEndScroll):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _overflowScrollingWillBegin]):
        (-[WKContentView _overflowScrollingDidEnd]):
        (-[WKContentView _updateChangedSelection]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::overflowScrollWillStartScroll):
        (WebKit::WebPageProxy::overflowScrollDidEndScroll):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::updateSelection):

2014-07-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WebPageProxy should not do anything when responding to an animated resize is the page is not in a valid state
        https://bugs.webkit.org/show_bug.cgi?id=135169
        <rdar://problem/17740149>

        Reviewed by Tim Horton.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        Neither m_dynamicViewportSizeUpdateWaitingForTarget nor m_dynamicViewportSizeUpdateWaitingForLayerTreeCommit should
        be modified if there is not WebProcess to respond to DynamicViewportSizeUpdate.

        (WebKit::WebPageProxy::synchronizeDynamicViewportUpdate):
        We should not attempt to synchronize anything if the page was closed before the end of the dynamic viewport
        update.

2014-07-22  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (r171239): Much more time spent taking snapshots during the PLT
        https://bugs.webkit.org/show_bug.cgi?id=135177
        <rdar://problem/17764847>

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willChangeCurrentHistoryItemForMainFrame):
        (WebKit::WebPageProxy::willChangeCurrentHistoryItem): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willChangeCurrentHistoryItem):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willChangeCurrentHistoryItemForMainFrame):
        (WebKit::WebPage::willChangeCurrentHistoryItem): Deleted.
        * WebProcess/WebPage/WebPage.h:
        Rename WillChangeCurrentHistoryItem to WillChangeCurrentHistoryItemForMainFrame.
        Only send it when the current history item for the main frame changes.

2014-07-22  Oliver Hunt  <oliver@apple.com>

        Add accountsd access to network sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=135176
        <rdar://17656487>

        Reviewed by Anders Carlsson.

        This is available to the webcontent process already, but is also
        needed for the networking process.

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

2014-07-22  Oliver Hunt  <oliver@apple.com>

        Remove unused com.apple.webkit.* rules from profiles
        https://bugs.webkit.org/show_bug.cgi?id=135174
        <rdar://17755931>

        Reviewed by Anders Carlsson.

        We never send these rules so we should just remove use of them
        from the profiles.

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

2014-07-22  Oliver Hunt  <oliver@apple.com>

        Provide networking process with access to its HSTS db
        https://bugs.webkit.org/show_bug.cgi?id=135121
        <rdar://17654369>

        Reviewed by Alexey Proskuryakov.

        Add an extension parameter to pass the hsts database file.
        This requires us to create the Caches/com.apple.WebKit.Networking
        directory in the UI process, as the network sandbox
        does not allow it to create the containing directory.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * Shared/Network/NetworkProcessCreationParameters.cpp:
        (WebKit::NetworkProcessCreationParameters::encode):
        (WebKit::NetworkProcessCreationParameters::decode):
        * Shared/Network/NetworkProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        (WebKit::WebContext::networkingHSTSDatabasePath):
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultNetworkingHSTSDatabasePath):

2014-07-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] UI helpers that zoom on an element ignore the viewport's allowsUserScaling
        https://bugs.webkit.org/show_bug.cgi?id=135140
        <rdar://problem/17754921>

        Reviewed by Tim Horton.

        UIScrollView makes a difference between min/max zoom and allowUserScaling. To express that,
        everything is set up on the LayerTransaction.

        For zooming related helpers (find on page, double tap to zoom, etc), the min and max zoom
        should be the actual min/max for the current page state.

        This patch split the two explicitely.
        For layer transactions, the values are taken from the viewport configuration directly.
        For everything else, we should use minimumPageScaleFactor/maximumPageScaleFactor. Those two methods
        have been updated to take into account allowsUserScaling.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::minimumPageScaleFactor):
        (WebKit::WebPage::maximumPageScaleFactor):
        (WebKit::WebPage::getAssistedNodeInformation):

2014-07-22  Shivakumar JM  <shiva.jm@samsung.com>

        Web Inspector: Fix unused parameter build warning
        https://bugs.webkit.org/show_bug.cgi?id=135151

        Reviewed by Joseph Pecoraro.

        Fix unused parameter build warning by removing the parameter name 

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

2014-07-22  Shivakumar JM  <shiva.jm@samsung.com>

        Fix unused parameter build warning in UIProcess module
        https://bugs.webkit.org/show_bug.cgi?id=135154

        Reviewed by Alexey Proskuryakov.

        Fix unused parameter build warning in UIProcess module by using UNUSED_PARAM macro.

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

2014-07-22  Jeremy Jones  <jeremyj@apple.com>

        Don't create new UIWindow for video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=135038

        Reviewed by Darin Adler.

        Use root UIView to parent fullscreen interface.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): pass parent UIView
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::screenRectForNode): Use client rect instead of screen rect.

2014-07-21  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add Ewk prefix to enums of ewk_navigation_policy
        https://bugs.webkit.org/show_bug.cgi?id=135144

        Reviewed by Gyuyoung Kim.

        All public enums of ewebkit should start with Ewk prefix.
        This patch added Ewk prefix to Ewk_Event_Mouse_Button and Ewk_Event_Modifiers.
        In addition, added missing description and default value for Ewk_Event_Modifier.

        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp:
        (toEwkEventMouseButton):
        (toEwkEventModifiers):
        (EwkNavigationPolicyDecision::mouseButton):
        (EwkNavigationPolicyDecision::modifiers):
        (ewk_navigation_policy_mouse_button_get):
        (ewk_navigation_policy_modifiers_get):
        (toEventMouseButton): Deleted.
        (toEventModifierKeys): Deleted.
        * UIProcess/API/efl/ewk_navigation_policy_decision.h:
        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h:

2014-07-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Improve event throttling for Scroll Events
        https://bugs.webkit.org/show_bug.cgi?id=135082
        <rdar://problem/17445266>

        Reviewed by Simon Fraser.

        In the WebKit layer, we want a measure that is representative of the responsiveness.

        In this patch, I use the total delay between a VisibleContentRectUpdate being dispatched
        by the UIProcess, and the time RemoteLayerTreeDrawingArea flushes the layer tree.

        The value used for eventThrottlingDelay() is computed by averaging the new value with
        the old values with a 80/20 split, favoring the old data. Favoring historical data
        over the last timing avoid excessively throttling for a single slow frame.

        The computation of m_estimatedMainThreadLatency can be improved in the future, this is
        a first cut keeping things simple.

        With m_estimatedMainThreadLatency in our hands, we can compute our eventThrottlingDelay().
        If m_estimatedMainThreadLatency is smaller than a single frame timespan, we have a fast page
        and nothing is throttled.

        If is it more than a frame, we throttle such that we can at least render two frames
        per event dispatch based on the historical data.

        The exact values will need some tweaking, but this set ensures well written pages get
        60 events per seconds, while slow pages do not waste too much time on events.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::eventThrottlingDelay):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didFlushLayerTreeAtTime):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::eventThrottlingDelay):
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2014-07-21  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r170361): In landscape with UI hidden, fixed position elements at top of screen are too low
        https://bugs.webkit.org/show_bug.cgi?id=135141
        <rdar://problem/17627525>

        Reviewed by Benjamin Poulain.
        
        We can't use the WKWebView's UIScrollView contentInsets to determine the unobscured rect
        in MobileSafari, because contentInsets can't be changed dynamically while scrolling.
        To get around this, MobileSafari sets obscured insets instead (but also sets a fixed
        contentInset).
        
        So if the client calls _setObscuredInsets:, always use _obscuredInsets to compute the 
        content insets.

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

2014-07-21  Oliver Hunt  <oliver@apple.com>

        Remove global cookie workaround from sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=135138
        <rdar://17513375>

        Reviewed by Alexey Proskuryakov.

        Remove the workaround needed for global cookie access, and silencing
        of the associated sandbox violation.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):

2014-07-21  Oliver Hunt  <oliver@apple.com>

        Correct sandbox profiles to fix some excess privileges
        https://bugs.webkit.org/show_bug.cgi?id=135134
        <rdar://problem/17741886>
        <rdar://problem/17739080>

        Reviewed by Alexey Proskuryakov.

        This cleans up our sandbox profiles to fix a few issues - the profiles
        no longer allow us to issue file extension we have the ability to consume,
        and tightens some of the other file access rules.

        This means we have to addd some rules to allow us to access things
        that we previously had access to due to lax file system restrictions.

        Some of the features were fixable simply by using entitlements on the
        process rather than custom rules.

        * Configurations/WebContent-iOS.entitlements:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Databases.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

2014-07-21  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn off position:fixed behavior when the keyboard is up
        https://bugs.webkit.org/show_bug.cgi?id=132537

        Reviewed by Benjamin Poulain.
        
        Make interaction with form elements inside position:fixed less terrible by re-laying out
        fixed elements relative to the document while we have an assisted node. This ensures
        that all parts of a position:fixed are accessible (e.g. inputs on the right side
        of a fixed-width top bar).
        
        * Shared/AssistedNodeInformation.cpp: Add a flag for being inside postion:fixed,
        and encode/decode it.
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/PageClient.h: Add isAssistingNode().
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isAssistingNode):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::computeCustomFixedPositionRect): If we have an assisted
        node, just use the document rect as the custom fixed position rect.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation): Get the selection rect first,
        since we have to fix it up for position:fixed. If the element is inside fixed
        position in the main frame, re-set the fixed position rect to the document rect
        (which forces a layout), re-fetch elementRect, then set it back. This ensures
        that the UI process gets an elementRect which it can zoom to correctly.

2014-07-21  Timothy Horton  <timothy_horton@apple.com>

        Random crashes on the Web Thread due to Timers firing on the wrong thread in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=135132
        <rdar://problem/17719832>

        Reviewed by Simon Fraser.

        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::ProcessThrottler):
        (WebKit::ProcessThrottler::suspendTimerFired):
        * UIProcess/ProcessThrottler.h:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::swipeSnapshotWatchdogTimerFired):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::swipeSnapshotWatchdogTimerFired):
        We can't use WebCore timers in the UI process because of coexistence concerns
        (they fire on the Web Thread if there is one!), so use RunLoop::Timer instead.

2014-07-21  Andy Estes  <aestes@apple.com>

        [iOS] Handle QuickLook ResourceLoaders in the web process
        https://bugs.webkit.org/show_bug.cgi?id=135113

        Reviewed by David Kilzer.

        The QuickLook framework registers a NSURLProtocol to handle loading subresources of the HTML documents it
        generates. In order for these loads to succeed, we need to start them in the same process in which QuickLook
        generated the main resource.

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

2014-07-21  Brady Eidson  <beidson@apple.com>

        DatabaseProcess doesn't relaunch after crashing.
        <rdar://problem/17717343> and https://bugs.webkit.org/show_bug.cgi?id=135117

        Reviewed by Alexey Proskuryakov.

        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::didClose): Tell the WebContext.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::databaseProcessCrashed): Notify supplements, then clear the DatabaseProcessProxy pointer.
        * UIProcess/WebContext.h:

        * UIProcess/WebContextSupplement.h:
        (WebKit::WebContextSupplement::processDidClose): Added. No users right now, but the patch in bug 135035 will need this.

2014-07-20  KwangHyuk Kim  <hyuki.kim@samsung.com>

        Fix warnings caused by unused parameter.
        https://bugs.webkit.org/show_bug.cgi?id=134975

        Reviewed by Gyuyoung Kim.

        Fix warnings on EwkView.cpp and LegacySessionStateCodingNone.cpp that are caused by unused parameter data.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkViewEventHandler<EVAS_CALLBACK_MOUSE_IN>::handleEvent):
        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::decodeLegacySessionState):

2014-07-20  Jeremy Jones  <jeremyj@apple.com>

        Disable ff/rw based on canPlayFastForward and canPlayFastRewind.
        https://bugs.webkit.org/show_bug.cgi?id=134894

        Reviewed by Darin Adler.

        Add setCanPlayFastReverse

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: ditto
        * WebProcess/ios/WebVideoFullscreenManager.h: ditto
        * WebProcess/ios/WebVideoFullscreenManager.mm: ditto
        (WebKit::WebVideoFullscreenManager::setCanPlayFastReverse): ditto

2014-07-20  Jeremy Jones  <jeremyj@apple.com>

        Decrease flicker when enter and exit fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=134919

        Reviewed by Simon Fraser.

        Change the sequence of tear down and use transparency to prevent flicker when entering and exiting fullscreen.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: wait to remove layerHost until didCleanupFullscreen
        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen): removed from here
        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen): added here
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen): use transparent background during transition

2014-07-20  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17739526> REGRESSION (r171057): Crash in WebPage::getPositionInformation()
        https://bugs.webkit.org/show_bug.cgi?id=135099

        Reviewed by David Kilzer.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation): Added a null check.

2014-07-19  Zan Dobersek  <zdobersek@igalia.com>

        Consistently use uint64_t as the handle parameter type for the SetAcceleratedCompositingWindowId message
        https://bugs.webkit.org/show_bug.cgi?id=135047

        Reviewed by Darin Adler.

        UIProcess' WebPageProxy is handling this parameter as an uint64_t, it should be handled as such
        in WebProcess as well.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in: Also changed the parameter name to match other places.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::setAcceleratedCompositingWindowId):

2014-07-18  Oliver Hunt  <oliver@apple.com>

        We don't provide an extension to the temp file used for uploads
        https://bugs.webkit.org/show_bug.cgi?id=135079

        Reviewed by Sam Weinig.

        Make sure didChooseFilesForOpenPanelWithDisplayStringAndIcon vends
        extensions for the files passed to the content process.

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

2014-07-18  Tim Horton  <timothy_horton@apple.com>

        ASSERTion failures in ViewGestureController indicating that we're copying WebBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=135080
        <rdar://problem/17734714>

        Reviewed by Sam Weinig.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::canSwipeInDirection):

2014-07-18  Yongjun Zhang  <yongjun_zhang@apple.com>

        _WKActivatedElementInfo.title should fallback to innerText if the link doesn't have title attribute.
        https://bugs.webkit.org/show_bug.cgi?id=135077

        When populate InteractionInformationAtPosition's title value, use a link element's innerText if it
        doesn't have title attribute.

        Reviewed by Dan Bernstein.

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

2014-07-18  Andy Estes  <aestes@apple.com>

        [iOS] Tapping "Allow Website" on a restricted page does not bring up the keypad
        https://bugs.webkit.org/show_bug.cgi?id=135072
        <rdar://problem/17528188>

        Reviewed by David Kilzer.

        * Shared/WebCoreArgumentCoders.h: Declared an ArgumentCoder for WebCore::ContentFilter.
        * Shared/mac/WebCoreArgumentCodersMac.mm:
        (IPC::ArgumentCoder<ContentFilter>::encode): Encoded the ContentFilter using a NSKeyedArchiver.
        (IPC::ArgumentCoder<ContentFilter>::decode): Decoded the ContentFilter using a NSKeyedUnarchiver.
        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
        (WebKit::WebPageProxy::contentFilterDidBlockLoadForFrame): Called WebFrameProxy::setContentFilterForBlockedLoad().
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::didStartProvisionalLoad): Reset m_contentFilterForBlockedLoad to nullptr.
        (WebKit::WebFrameProxy::contentFilterDidHandleNavigationAction): Called ContentFilter::handleUnblockRequestAndDispatchIfSuccessful().
        If the unblock is successful, reload the WebPageProxy.
        * UIProcess/WebFrameProxy.h:
        (WebKit::WebFrameProxy::setContentFilterForBlockedLoad):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Check if this is navigation represents an unblock
        request and ignore if so.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Defined ContentFilterDidBlockLoadForFrame.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::contentFilterDidBlockLoad): Sent ContentFilterDidBlockLoadForFrame to the WebPageProxy.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:

2014-07-18  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] position:fixed in iframes with programmatic scroll could end up in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=135078
        <rdar://problem/17401823>

        Reviewed by Tim Horton.
        
        Fix the logging of requested scroll position and frame scale factor.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingTreeTextStream::dump):

2014-07-18  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] Use RetainPtr in _WKRemoteObjectInterface
        https://bugs.webkit.org/show_bug.cgi?id=135062

        Reviewed by Anders Carlsson.

        Switch to RetainPtr instead of manual memory management of ivars.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (-[_WKRemoteObjectInterface initWithProtocol:identifier:]):
        (-[_WKRemoteObjectInterface identifier]):
        (-[_WKRemoteObjectInterface description]):
        (-[_WKRemoteObjectInterface dealloc]): Deleted.

2014-07-18  Tim Horton  <timothy_horton@apple.com>

        Take navigation snapshots whenever the current back-forward item is going to change
        https://bugs.webkit.org/show_bug.cgi?id=135058
        <rdar://problem/17464515>

        Reviewed by Dan Bernstein.

        Instead of trying to have the UI process figure out when to take navigation snapshots by itself,
        snapshot whenever the Web process says that the current back-forward item is going to change.
        This fixes snapshotting timing with pushState, and lets us bottleneck snapshotting down to
        just two places instead of 5.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::goForward):
        (WebKit::WebPageProxy::goBack):
        (WebKit::WebPageProxy::goToBackForwardItem):
        (WebKit::WebPageProxy::didStartProvisionalLoadForFrame):
        We no longer need to special-case taking navigation snapshots
        when the UI process changes the back forward item or upon
        didStartProvisionalLoadForFrame, because we'll always snapshot
        in willChangeCurrentHistoryItem in all of these cases.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willChangeCurrentHistoryItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        Add willChangeCurrentHistoryItem message, which comes from the Web process.
        When it arrives, take a navigation snapshot.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Take the pre-swipe navigation snapshot before telling WebPageProxy that we're doing a swipe,
        so that it doesn't bail from taking the snapshot because we have a snapshot up.

        (WebKit::ViewGestureController::endSwipeGesture):
        We no longer need to explicitly disable snapshotting while navigating, because
        we will avoid taking the snapshot if there's a snapshot being displayed.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::~ViewGestureController):
        Remove the snapshot if it's still up when ViewGestureController is destroyed.
        The Mac version of ViewGestureController is destroyed on Web process crashes
        because it is a message receiver, so it is not guaranteed to have the same
        lifetime as the WebPageProxy and friends.

        (WebKit::ViewGestureController::trackSwipeGesture):
        Make use of recordNavigationSnapshot.

        (WebKit::ViewGestureController::endSwipeGesture):
        Ditto from the Mac version.

        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshotStore::disableSnapshotting): Deleted.
        (WebKit::ViewSnapshotStore::enableSnapshotting): Deleted.
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Remove the snapshot disabling mechanism and bail from snapshotting if we're
        showing a snapshot, as mentioned above.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::willChangeCurrentHistoryItem):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willChangeCurrentHistoryItem):
        * WebProcess/WebPage/WebPage.h:
        Proxy willChangeCurrentHistoryItem from HistoryController to the UI process.

2014-07-18  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION: Crash when typing into text field that clears itself on iOS

        <https://bugs.webkit.org/show_bug.cgi?id=135044>
        <rdar://problem/17640443>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestAutocorrectionData):
        wordRangeFromPosition() returns null in some cases; null check range
        before dereferencing it. Moved some variable declarations around to
        better match our style.

2014-07-18  Tim Horton  <timothy_horton@apple.com>

        [WK2] Provide a mechanism to grab the back-forward list for gesture navigation purposes from another WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=134999
        <rdar://problem/17238025>

        Reviewed by Sam Weinig.

        In some cases, clients may need to throw a WKWebView with no back-forward list over
        another WKWebView, and want to participate in gesture swipe as if they were actually
        the page being overlaid.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _alternateWebViewForNavigationGestures]):
        (-[WKWebViewConfiguration _setAlternateWebViewForNavigationGestures:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        Keep an "alternate" WKWebView "for navigation gestures", which ViewGestureController
        will use as the real source of back-forward items, and the destination of the swipe navigation.
        All swipe delegate callbacks will also fire from the alternate view, because it owns the items
        and will be doing the navigation.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::setAlternateBackForwardListSourceView):
        (WebKit::ViewGestureController::beginSwipeGesture):
        Send navigationGestureDidBegin via the alternate view's WebPageProxy if it exists.
        Record a new snapshot on the current page, but copy it to the alternate view if necessary,
        so that when swiping forward from the alternate view, it will have the "right" snapshot.
        Get the target back forward item from the alternate view.
        Send navigationGestureWillEnd via the alternate view's WebPageProxy if it exists.

        (WebKit::ViewGestureController::canSwipeInDirection):
        Determine if we can swipe in a direction by looking at the alternate view's back-forward list if necessary.

        (WebKit::ViewGestureController::endSwipeGesture):
        Send navigationGestureDidEnd via the alternate view's WebPageProxy if it exists.
        Perform the navigation on the alternate view if necessary.

        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Send navigationGestureSnapshotWasRemoved via the alternate view's WebPageProxy if it exists.

        * UIProcess/mac/ViewGestureController.h:

2014-07-17  David Kilzer  <ddkilzer@apple.com>

        SECTORDER_FLAGS should be defined in target's xcconfig file, not Base.xcconfig
        <http://webkit.org/b/135006>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Move SECTORDER_FLAGS to
        WebKit.xcconfig.
        * Configurations/DebugRelease.xcconfig: Remove empty
        SECTORDER_FLAGS definition.
        * Configurations/WebKit.xcconfig: Use $(CONFIGURATION) so
        SECTORDER_FLAGS is only set on Production builds.

2014-07-17  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r171167): LoaderClient processDidCrash call is made after load state changes
        https://bugs.webkit.org/show_bug.cgi?id=135032
        <rdar://problem/17716602>

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash): Create a transaction, so that the nested
        transaction in resetStateAfterProcessExited() wouldn't be committed.
        (WebKit::WebPageProxy::resetStateAfterProcessExited): Don't use auto - it was hiding
        the most important fact that this is a stack object that can't be simply moved to
        a different function.

2014-07-17  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix the updateVisibleContentRects synchronization for load after r171154
        https://bugs.webkit.org/show_bug.cgi?id=135036

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        I forgot to update one of the condition after changing from lastTransaction to next transaction
        in r171154.

2014-07-17  Enrica Casucci  <enrica@apple.com>

        [REGRESSION WK2]The menu bar does not show up when tapping on the caret.
        https://bugs.webkit.org/show_bug.cgi?id=135023
        <rdar://problem/17617282>

        Reviewed by Benjamin Poulain and Ryosuke Niwa.

        WKContentView needs to implement hasContent to correctly show
        the appropriate menu bar content. The patch adds this information
        to the EditorState.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasContent]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):

2014-07-17  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Add SPI to do a dynamic viewport update without showing any content
        https://bugs.webkit.org/show_bug.cgi?id=135010

        Reviewed by Darin Adler.

        This patch add a new SPI, [WKWebView _resizeWhileHidingContentWithUpdates:] to perform all the work
        of a dynamic viewport size update, but instead of animating the old content, it is hidden.

        The patch is built on top of the animated resize mechanism. Instead of having an animation driving
        the beginning and end, we let the content do that. The dynamic resize begins, it runs for as long as
        the WebProcess needs, and it ends when first layer tree commit with the new content is processed.

        The attribute "_isAnimatingResize" is generalized to support two modes of resizing: animated and
        hiding content.

        The attribute "_hasCommittedLoadForMainFrame" is rather silly. It is only needed because
        [WKWebView _resizeWhileHidingContentWithUpdates:] is intended to be called a lot before the page
        is initialized, and doing an animated resize would trash the WebProcess state.
        I wish I had a better solution, this is not great.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (-[WKWebView _didCommitLoadForMainFrame]):
        (-[WKWebView _didCommitLayerTree:]):
        This is the key to make this work properly. We want _resizeWhileHidingContentWithUpdates: to behave
        exactly like an animated resize to avoid bugs. So we went to the whole update mechanism using
        _resizeAnimationTransformAdjustments to accumulate the adjustments, now we need to restore a correct
        view state.

        Calling [WKWebView _endAnimatedResize] will do exactly that, but we need to make sure we do not hit
        the synchronization path or we would be blocked there for a while, which is what we are trying to avoid.

        After r171154, WebPageProxy keeps track of what stage of dynamic viewport update we are in. Since we are
        executing the layer tree update stage, with the right transaction ID, WebPageProxy already knows we have
        everything we need and does not use any synchronous messages.

        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:nextValidLayerTreeTransactionID:]):
        (-[WKWebView _restorePageStateToExposedRect:scale:]):
        (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]):
        (-[WKWebView _scrollToContentOffset:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]):
        (-[WKWebView _setInterfaceOrientationOverride:]):
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _resizeWhileHidingContentWithUpdates:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-07-17  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Full screen video not always animating in the correct Space
        https://bugs.webkit.org/show_bug.cgi?id=135020
        <rdar://problem/17542310>

        Reviewed by Dean Jackson.

       The fullscreen window can "remember" the Space it was part of the first time you enter fullscreen
       mode. Subsequent fullscreen transitions will always start from this Space, even if you move
       the WebKit-hosted application to a different Space.

       We can help the display system know when we've moved to a new Space by calling NSWindow's
       'orderBack' method on the fullscreen window prior to starting the transition to fullscreen mode.
       This method call hooks the window into the current Space so everything works properly.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): Add the
        new fullscreen window to the current Space before starting transition to fullscreen.

2014-07-17  Timothy Hatcher  <timothy@apple.com>

        Make console.profile record to the Timeline.

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

        Reviewed by Joseph Pecoraro.

        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::setJavaScriptProfilingEnabled):
        (WebKit::WebInspector::startJavaScriptProfiling):
        (WebKit::WebInspector::stopJavaScriptProfiling):

2014-07-17  Brady Eidson  <beidson@apple.com>

        Crash in ServicesOverlayController::~ServicesOverlayController.
        <rdar://problem/17622172> and https://bugs.webkit.org/show_bug.cgi?id=135022

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::~ServicesOverlayController): Don’t need to uninstall the
            PageOverlay as it has already been destroyed by this point in WebPage::~WebPage.

2014-07-17  Tim Horton  <timothy_horton@apple.com>

        Sometimes purgeable (or empty!) tiles are shown on screen when resuming the app
        https://bugs.webkit.org/show_bug.cgi?id=135018
        <rdar://problem/17615038>

        Reviewed by Simon Fraser.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::hideContentUntilNextUpdate):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::hideContentUntilNextUpdate):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::detachRootLayer):
        Add a mechanism to "hide" drawing area content until the next commit,
        by detaching the root layer. RemoteLayerTreeHost will automatically reattach
        it at the next commit.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        * UIProcess/WebPageProxy.h:
        Add a parameter to viewStateDidChange specifying whether dispatching the change
        to the Web process is deferrable or not. We will also automatically use "Immediate" if
        the view is coming in-window, like we did before.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationWillEnterForeground:]):
        Make use of the aforementioned new mechanisms to ensure that we immediately dispatch
        view state changes when coming into the foreground, and will have removed the root layer
        if a commit didn't come in while waitForDidUpdateViewState blocks.
        
2014-07-17  Sanghyup Lee  <sh53.lee@samsung.com>

        [EFL][WK2] Add a "focus,notfound" signal.
        https://bugs.webkit.org/show_bug.cgi?id=134674

        Reviewed by Gyuyoung Kim.

        Add a "focus,notfound" signal to handover focus control to application
        because there are no elements of webview to focus on the given direction.

        Application can decide to move the focus to next widget of ewk_view or something else
        by using this signal.

        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp: Added keyDown and keyUp function.
        (EWK2UnitTest::EWK2UnitTestBase::waitUntilDirectionChanged):
        (EWK2UnitTest::EWK2UnitTestBase::keyDown):
        (EWK2UnitTest::EWK2UnitTestBase::keyUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (EWK2ViewTest::FocusNotFoundCallback):
        (TEST_F):
        * UIProcess/efl/PageUIClientEfl.cpp: Removed unnecessary calls to evas_object_focus_set().
        (WebKit::PageUIClientEfl::takeFocus):

2014-07-16  Brady Eidson  <beidson@apple.com>

        Reintroduce the SPI _websiteDataURLForContainerWithURL: that was removed in r171160
        https://bugs.webkit.org/show_bug.cgi?id=134984

        Reviewed by David Kilzer.

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

2014-07-16  Alexey Proskuryakov  <ap@apple.com>

        A test that hangs at cleanup stage confuses webkitpy hugely
        https://bugs.webkit.org/show_bug.cgi?id=122475
        <rdar://problem/17184354>

        Reviewed by Anders Carlsson.

        Reset m_pageLoadState when the process exits cleanly - otherwise messages from a
        new process for the same WebPageProxy would hit assertions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::processDidCrash):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):

2014-07-16  David Kilzer  <ddkilzer@apple.com>

        [iOS] Update order file paths for WebKit and WebKit2
        <http://webkit.org/b/134993>
        <rdar://problem/17557776>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Add order file for iOS
        named WebKit.order.

2014-07-16  Brady Eidson  <beidson@apple.com>

        Add WebSecurityOrigin "webSecurityOriginFromDatabaseIdentifier" SPI and change _websiteDataURLForContainerWithURL: SPI
        <rdar://problem/17454712> and https://bugs.webkit.org/show_bug.cgi?id=134984

        Reviewed by Dan Bernstein.

        Change _websiteDataURLForContainerWithURL: SPI to include an optional bundle identifier argument:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _websiteDataURLForContainerWithURL:bundleIdentifierIfNotInContainer:]):
        (+[WKProcessPool _websiteDataURLForContainerWithURL:]): Deleted.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

        Add a big shiny comment in a few key places:
        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::initializeDatabaseProcess):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::UniqueIDBDatabase):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applyPlatformSpecificConfigurationDefaults):
        (WebKit::WebContext::ensureDatabaseProcess):

2014-07-16  Enrica Casucci  <enrica@apple.com>

        REGRESSION (iOS WebKit2): Cannot scroll while dragging a selection.
        https://bugs.webkit.org/show_bug.cgi?id=134992
        <rdar://problem/17528020>

        Reviewed by Benjamin Poulain.

        This patch exposes the scroller and the visible content rect so that
        UIKit can implement autoscroll when dragging the selections.
        It also changes that way we do hit testing to allow hit test outside
        the clipping region and fixes the way we compute the selection rectangle
        for the block selection, ensuring that we consider also non text elements
        like images.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView scroller]):
        (-[WKContentView visibleRect]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::selectionBoxForRange):
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::rangeForBlockAtPoint):
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle):
        (WebKit::WebPage::changeBlockSelection):

2014-07-16  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/17669097> REGRESSION (r170155): Sandbox violations using a wrong
        CFNetwork cache path in WebContent process

        Rubber-stamped by Sam Weinig.

        Before r170155, we incorrectly checked usesNetworkProcess(), which always returns
        false at this point in initialization sequence. But we did the right thing, as we
        always need to set the cache path, even when network process is used for most loading.

        * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::platformInitializeWebProcess):

2014-07-16  Timothy Horton  <timothy_horton@apple.com>

        Dispatch top content inset changes immediately if synchronously waiting for view state changes
        ​https://bugs.webkit.org/show_bug.cgi?id=134942
        <rdar://problem/17666800>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _dispatchSetTopContentInset]):
        (-[WKView _setTopContentInset:]):
        Move the check from _setTopContentInset: to _dispatchSetTopContentInset
        that ensures that we only send the message if the top content inset changed.

2014-07-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Synchronize the dynamic viewport updates with their layer tree commit
        https://bugs.webkit.org/show_bug.cgi?id=134965
        Related to <rdar://problem/17082607>

        Reviewed by Tim Horton.

        Dynamic viewport update relies on the _resizeAnimationTransformAdjustments being applied
        to the page at the new size during the transition.

        Because of the races between the LayerTree Commit and DynamicViewportSizeUpdate, the transform
        can be applied to the wrong set of tiles.
        This is mostly a problem for unresponsive WebProcess or when the synchronization is done
        immediately.

        There is at least one more case that is not handled: if synchronizeDynamicViewportUpdate()
        completely fails to get the new page, the UIProcess is in a somewhat messy state.
        I will look into that separately than the layer tree synchronization.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:nextValidLayerTreeTransactionID:]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::dynamicViewportUpdateChangedTarget):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::synchronizeDynamicViewportUpdate):
        (WebKit::WebPageProxy::didCommitLayerTree):
        (WebKit::WebPageProxy::dynamicViewportUpdateChangedTarget):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::synchronizeDynamicViewportUpdate):
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (WebKit::RemoteLayerTreeDrawingArea::nextTransactionID):
        (WebKit::RemoteLayerTreeDrawingArea::currentTransactionID): Deleted.

2014-07-16  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r170653): Web Content service’s Info.plist has wrong format
        https://bugs.webkit.org/show_bug.cgi?id=134973

        Reviewed by Alexey Proskuryakov.

        * WebKit2.xcodeproj/project.pbxproj: Updated the Add CFBundle Localization Info.plist Key
        script build phases to convert Info.plist back to binary format if the
        PLIST_FILE_OUTPUT_FORMAT build setting requires it.

2014-07-15  Benjamin Poulain  <bpoulain@apple.com>

        Fix r171124

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:]):
        On landing, I changed the min/max branches to shrunkTo/expandedTo, but the return value
        of those was ignored.

2014-07-15  Dan Bernstein  <mitz@apple.com>

        WKWebView’s FormClient::willSubmitForm should use CompletionHandlerCallChecker
        https://bugs.webkit.org/show_bug.cgi?id=134951

        Reviewed by Tim Horton.

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

2014-07-15  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Scrolling request from the scrolling tree must be limited to offsets in the document
        https://bugs.webkit.org/show_bug.cgi?id=134952
        <rdar://problem/17647116>

        Reviewed by Enrica Casucci.

        When we received a scroll request, we were taking that offset directly to set the UIScrollView
        scroll position. This is a problem if a page request scrolling to an invalid position, we were
        still doing it.

        This patch limits the position to be inside the document.

        -- Why not limit the scroll offset in the WebProcess when we receive the scroll request? --

        Some pages rely on the page scale factor changing instantly, because that is how it worked
        on WebKit1.

        On WebKit2, the WebProcess cannot know the valid range because the obscured insets are changing
        dynamically, and the page scale factor can change in response to WebProcess events (the focus
        changing for example). To make the page works, the WebProcess does not restrict the scroll position.

        In that architecture, the UIProcess has to sanitize the input, which was not done before this patch.

        -- Why not use changeContentOffsetBoundedInValidRange()?

        The scroll offset as seen by the page is relative to the unobscured rect. While the position used
        for history item is a visual position. All we need in this case is a position in the view.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::resendLastVisibleContentRects):

2014-07-15  Timothy Horton  <timothy_horton@apple.com>

        Dispatch top content inset changes immediately if synchronously waiting for view state changes
        https://bugs.webkit.org/show_bug.cgi?id=134942
        <rdar://problem/17666800>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView endDeferringViewInWindowChanges]):
        (-[WKView endDeferringViewInWindowChangesSync]):
        (-[WKView _dispatchSetTopContentInset]):
        (-[WKView _setTopContentInset:]):
        Send top content inset changes immediately before sync-waiting for new tiles from the Web Process.
        This will ensure that the incoming contents have the right top content inset, and we don't
        flash between the wrong inset and the right one.

2014-07-15  Enrica Casucci  <enrica@apple.com>

        REGRESSION(WK2 iOS): Safari hangs when switching focus from a field using the Tab key.
        https://bugs.webkit.org/show_bug.cgi?id=134934
        <rdar://problem/17224638>

        Reviewed by Tim Horton.

        * UIProcess/ios/WKContentViewInteraction.mm:
        
        Tab and back tab should be handled as special keys that have
        a command associated. The command specifies for each key the relevant
        action. This patch implements the commands property to create the association
        between key and command and the relevant actions that will execute the same
        code executed when the used taps on the < > buttons in the accessory bar.
        
        (-[WKContentView keyCommands]):
        (-[WKContentView _nextAccessoryTab:]):
        (-[WKContentView _prevAccessoryTab:]):

2014-07-15  Oliver Hunt  <oliver@apple.com>

        More tidying of the webcontent sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=134938

        Reviewed by Alexey Proskuryakov.

        Remove some excessive abilities from the profile and make
        the required ones explicit.

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

2014-07-14  Andreas Kling  <akling@apple.com>

        [iOS] Don't progressively re-render tiles while pinch-zooming under memory pressure.
        <https://webkit.org/b/134915>

        When we're under memory pressure, the last thing we want to be doing is
        creating gratuitous new IOSurfaces. Just wait for the gesture to end before
        rendering at the new scale.

        Reviewed by Tim Horton.

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

2014-07-14  Joseph Pecoraro  <pecoraro@apple.com>

        [Cocoa] _WKRemoteObjectInterface leaks NSString ivar
        https://bugs.webkit.org/show_bug.cgi?id=134914

        Reviewed by Simon Fraser.

        Release our copied NSString in dealloc.

        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm:
        (-[_WKRemoteObjectInterface dealloc]):

2014-07-14  Dean Jackson  <dino@apple.com>

        [PlugIns] Check for a non-null snapshot image before trying to decode it
        https://bugs.webkit.org/show_bug.cgi?id=134913
        <rdar://problem/17606033>

        Reviewed by Tim Horton.

        Changeset r169820 introduced a bug where we could examine the pixels of
        an image (looking for solid colors) before checking if the image actually
        existed.

        I added a null check, and moved the code around a bit to avoid checking
        for existence three times.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginSnapshotTimerFired): Check that snapshotImage exists
        before trying to look at it.

2014-07-14  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * UIProcess/Cocoa/SessionStateCoding.mm:
        (WebKit::encodeSessionState):

2014-07-14  Anders Carlsson  <andersca@apple.com>

        Use the legacy session coder for encoding/decoding session state
        https://bugs.webkit.org/show_bug.cgi?id=134910

        Reviewed by Beth Dakin.

        * UIProcess/Cocoa/SessionStateCoding.mm:
        (WebKit::encodeSessionState):
        (WebKit::decodeSessionState):

2014-07-14  Oliver Hunt  <oliver@apple.com>

        Restrict network process to remote connections
        https://bugs.webkit.org/show_bug.cgi?id=134908

        Reviewed by Geoffrey Garen.

        Further restrict network client

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

2014-07-14  Tim Horton  <timothy_horton@apple.com>

        ASSERT(isMainThread()) under OneShotDisplayLinkHandler
        https://bugs.webkit.org/show_bug.cgi?id=134900

        Reviewed by Simon Fraser.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[OneShotDisplayLinkHandler displayLinkFired:]):
        isMainThread means the Web thread sometimes.

2014-07-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _frameOrBoundsChanged]):

2014-07-14  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [UNIX] Log error description when failing to create shared memory file.
        https://bugs.webkit.org/show_bug.cgi?id=134892

        Reviewed by Darin Adler.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::create): Print the string describing the error number (errno).

2014-07-14  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] On rotation, RemoteLayerTreeDrawingArea renders one extra frame at the wrong orientation
        https://bugs.webkit.org/show_bug.cgi?id=134875

        Reviewed by Tim Horton.

        On animated resize, the size of the DrawingAreaProxy was changed before the layout parameters were
        changed. This in turn caused the WebProcess's DrawingArea to flush the layer tree while still
        at the wrong orientation.

        This patch fixes the issue by making a special case for animated resize:
        -While starting animated resize, _frameOrBoundsChanged can be called several times in response to
         the API's client changing the WKWebView. In that case, we do not update the drawing area.
        -After the "updateBlock" is executed and the size have been changed, the dynamic viewport update
         is computed, the dynamicViewportSizeUpdate is sent to the WebProcess, followed by the message
         DrawingArea::updateGeometry(). Since both messages are asynchronous, they are received in that
         order, and the updateGeometry() is always done after the viewport configuration has been updated.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView setMinimumSize:]): Deleted.

2014-07-14  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix withinEpsilon()
        https://bugs.webkit.org/show_bug.cgi?id=134798

        Reviewed by Darin Adler.

        Move the function back to WKWebView, it is no longer needed in WKContentView.

        Use the real types as input to properly verify that the two inputs are within
        a small value of the 32bit floating point.

        The epsilon we use is always on 32 bits float because we want to avoid doing work for changes
        that would not make any difference on float.

        The source of those small changes comes from the fact UIProcess does a lot of processing
        on CGFloat, which are double on 64bits architecture, while the WebProcess use 32bits floating point
        for scale. When we are getting updates from the WebProcess, we should ignore any small differences
        caused by the computations done with less precision.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (withinEpsilon):
        * UIProcess/ios/WKContentViewInteraction.h:
        (withinEpsilon): Deleted.

2014-07-14  Bear Travis  <betravis@adobe.com>

        [Feature Queries] Enable Feature Queries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=134404

        Reviewed by Antti Koivisto.

        Enable Feature Queries on Mac and resume running the
        feature tests.

        * Configurations/FeatureDefines.xcconfig: Turn on
        ENABLE_CSS3_CONDITIONAL_RULES.

2014-07-14  Anders Carlsson  <andersca@apple.com>

        Make shouldKeepCurrentBackForwardListItemInList part of WKPageLoaderClientV5 to avoid breaking ABI
        https://bugs.webkit.org/show_bug.cgi?id=134889

        Reviewed by Beth Dakin.

        * UIProcess/API/C/WKPage.cpp:
        * UIProcess/API/C/WKPageLoaderClient.h:

2014-07-14  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r171045): Reproducible crash on navigation in PageClientImpl::willRecordNavigationSnapshot
        https://bugs.webkit.org/show_bug.cgi?id=134887

        Reviewed by Tim Horton.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin): nil-check m_webView. It can be nil when
        the client is using WKView directly.
        (WebKit::PageClientImpl::navigationGestureWillEnd): Ditto.
        (WebKit::PageClientImpl::navigationGestureDidEnd): Ditto.
        (WebKit::PageClientImpl::willRecordNavigationSnapshot): Ditto.

2014-07-14  Eric Carlson  <eric.carlson@apple.com>

        [Mac] don't enable low power audio mode on external output devices
        https://bugs.webkit.org/show_bug.cgi?id=134877

        Reviewed by Sam Weinig.

        * PluginProcess/PluginProcess.h: Add an empty implementation of 
            AudioHardwareListener::audioOutputDeviceChanged.

2014-07-14  Tim Horton  <timothy_horton@apple.com>

        [iOS] Throttle painting using a UI-process-side CADisplayLink
        https://bugs.webkit.org/show_bug.cgi?id=134879
        <rdar://problem/17641699>

        Reviewed by Simon Fraser.

        Just waiting for CA to commit is insufficient to actually throttle to 60fps,
        because nothing will block the main runloop from spinning.

        Instead, listen to a CADisplayLink, and send didUpdate to the WebProcess
        the first time it fires after we commit. This is not a guarantee that
        our content is on the screen, but we don't have any way to make that guarantee yet.

        This will throttle painting, rAF, etc. to the display refresh rate.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (-[OneShotDisplayLinkHandler initWithDrawingAreaProxy:]):
        (-[OneShotDisplayLinkHandler dealloc]):
        (-[OneShotDisplayLinkHandler displayLinkFired:]):
        (-[OneShotDisplayLinkHandler invalidate]):
        (-[OneShotDisplayLinkHandler schedule]):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::coreAnimationDidCommitLayers): Deleted.

2014-07-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17657391> [iOS] Networking process writes persistent credentials to the keychain
        https://bugs.webkit.org/show_bug.cgi?id=134878

        Reviewed by Sam Weinig.

        Route CFNetwork’s calls to Security API through to the UI process.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess): Initialize SecItemShim.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::SecItemShim::initialize): On iOS, rather than using a shim library, supply
        CFNetwork with alternate functions to call.

        * Shared/mac/SecItemShim.messages.in: Removed #if !PLATFORM(IOS).
        * UIProcess/mac/SecItemShimProxy.messages.in: Ditto.

        * config.h: Define ENABLE_SEC_ITEM_SHIM to 1 on iOS as well.

2014-07-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17398060> NetworkProcess sometimes hangs under copyDefaultCredentialForProtectionSpace
        https://bugs.webkit.org/show_bug.cgi?id=134666

        Reviewed by Tim Horton.

        A SecItem may have an attribute whose value is a SecAccessControlRef, which is not supported
        by ArgumentCodersCF. In debug builds, trying to encode a CFDictionary containing a value of
        unsupprted type causes an assertion to fail, but in release builds encoding succeeds, and
        only decoding fails, in this case silently, simply not delivering the
        SecItemShim::secItemResponse message.

        The fix is to teach ArgumentCodersCF about SecAccessControlRef.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::typeFromCFTypeRef): Check for the SecAccessControlRef type.
        (IPC::encode): Encode the SecAccessControl serialized into CFData.
        (IPC::decode): Deserialize a SecAccessControl from the decoded CFData.
        * Shared/cf/ArgumentCodersCF.h:
        * config.h: Defined HAVE_SEC_ACCESS_CONTROL.

2014-07-13  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17295636> [Cocoa] Include element snapshot in _WKActivatedElementInfo
        https://bugs.webkit.org/show_bug.cgi?id=134872

        Reviewed by Sam Weinig.

        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode): Encode the image if there is one.
        (WebKit::InteractionInformationAtPosition::decode): Decode the image if there is one.
        * Shared/InteractionInformationAtPosition.h: Added an image member to the struct.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h: Exposed the boundingRect property and added
        an image property.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:rect:image:]): Added an image
        parameter, which is stored in a new ivar.
        (-[_WKActivatedElementInfo image]): Added this getter, which converts the ShareableBitmap
        into a cached Cocoa image and returns it.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h: Added image parameter to the
        initializer, removed _boundingRect property declaration from here.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]): Pass the image from the position information
        into the _WKActivatedElementInfo initializer.
        (-[WKActionSheetAssistant showLinkSheet]): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotNode): Added.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation): If the element is a link or an image, store a
        snapshot of it in the image member of the InteractionInformationAtPosition.

2014-07-13  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Clean up session state API a little
        https://bugs.webkit.org/show_bug.cgi?id=134871

        Reviewed by Darin Adler.

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

2014-07-13  Javier Fernandez  <jfernandez@igalia.com>

        REGRESSION(r171045) [GTK] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=134867

        Unreviewed GTK build fix after r171045.

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

2014-07-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r171045.

        * UIProcess/CoordinatedGraphics/WebView.h:

2014-07-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Notify the client when a navigation snapshot is taken
        https://bugs.webkit.org/show_bug.cgi?id=134865

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Declared new delegate method.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Initialize new flag in
        m_navigationDelegateMethods.
        (WebKit::NavigationState::willRecordNavigationSnapshot): Added. Calls the new
        WKNavigationDelegate method.

        * UIProcess/PageClient.h: Declared new client function.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::willRecordNavigationSnapshot): Added. Calls the new client function.
        * UIProcess/WebPageProxy.h:

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::willRecordNavigationSnapshot): Override that calls
        NavigationState::willRecordNavigationSnapshot.

        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::willRecordNavigationSnapshot): Ditto.

        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot): Added a call to
        WebPageProxy::willRecordNavigationSnapshot.

2014-07-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, fix EFL build break since r171034.

        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformMediaCacheDirectory):

2014-07-12  Darin Adler  <darin@apple.com>

        Try to fix 32-bit Mac build.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin): Added WK_API_ENABLED conditional.
        (WebKit::PageClientImpl::navigationGestureWillEnd): Ditto.
        (WebKit::PageClientImpl::navigationGestureDidEnd): Ditto.

2014-07-12  Javier Fernandez  <jfernandez@igalia.com>

        REGRESSION(r171034) [GTK] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=134861

        Unreviewed GTK build fix.

        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::navigationGestureDidBegin):
        (WebKit::PageClientImpl::navigationGestureWillEnd):
        (WebKit::PageClientImpl::navigationGestureDidEnd):
        * UIProcess/API/gtk/PageClientImpl.h:

2014-07-12  Javier Fernandez  <jfernandez@igalia.com>

        REGRESSION(r171024) [GTK] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=134859

        Unreviewed GTK build fix.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformMediaCacheDirectory):

2014-07-12  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16020380> [Cocoa] Inform the client when back-forward navigation gestures begin and end
        https://bugs.webkit.org/show_bug.cgi?id=134853

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Declared new WKNavigationDelegate
        methods.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _isShowingNavigationGestureSnapshot]): Added this getter.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared new property
        _isShowingNavigationGestureSnapshot.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Initialize new flags in
        m_navigationDelegateMethods.
        (WebKit::NavigationState::navigationGestureDidBegin): Added. Calls the new
        WKNavigationDelegate method.
        (WebKit::NavigationState::navigationGestureWillEnd): Ditto.
        (WebKit::NavigationState::navigationGestureDidEnd): Ditto.

        * UIProcess/PageClient.h: Declared new client functions.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize new member variable.
        (WebKit::WebPageProxy::navigationGestureDidBegin): Set m_isShowingNavigationGestureSnapshot
        and call the new client function.
        (WebKit::WebPageProxy::navigationGestureWillEnd): Call the new client function.
        (WebKit::WebPageProxy::navigationGestureDidEnd): Ditto.
        (WebKit::WebPageProxy::navigationGestureSnapshotWasRemoved): Clear
        m_isShowingNavigationGestureSnapshot.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isShowingNavigationGestureSnapshot): Added this getter.

        * UIProcess/ios/PageClientImplIOS.h: Declared overrides of new client functions.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin): Override that calls the new
        NavigationState function.
        (WebKit::PageClientImpl::navigationGestureWillEnd): Ditto.
        (WebKit::PageClientImpl::navigationGestureDidEnd): Ditto.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Added calls to
        WebPageProxy::navigationGestureDidBegin and WebPageProxy::navigationGestureWillEnd.
        (WebKit::ViewGestureController::endSwipeGesture): Added calls to
        WebPageProxy::navigationGestureDidEnd.
        (WebKit::ViewGestureController::removeSwipeSnapshot): Added call to
        WebPageProxy::navigationGestureSnapshotWasRemoved.

        * UIProcess/mac/PageClientImpl.h: Declared overrides of new client functions.
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::navigationGestureDidBegin): Override that calls the new
        NavigationState function.
        (WebKit::PageClientImpl::navigationGestureWillEnd): Ditto.
        (WebKit::PageClientImpl::navigationGestureDidEnd): Ditto.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture): Added call to
        WebPageProxy::navigationGestureDidBegin.
        (WebKit::ViewGestureController::endSwipeGesture): Added calls to
        WebPageProxy::navigationGestureDidEnd.
        (WebKit::ViewGestureController::removeSwipeSnapshot): Added call to
        WebPageProxy::navigationGestureSnapshotWasRemoved.

2014-07-12  Oliver Hunt  <oliver@apple.com>

        Fix typo in prior patch
        https://bugs.webkit.org/show_bug.cgi?id=134858

        Reviewed by Sam Weinig.

        Fix typo

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):

2014-07-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Client is not notified of same-document navigations
        https://bugs.webkit.org/show_bug.cgi?id=134855

        Reviewed by Sam Weinig.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didSameDocumentNavigationForFrame): Added navigationID parameter.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient): Ditto.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Added new enum and delegate method.

        * UIProcess/Cocoa/NavigationState.h: Declare override of
        API::LoaderClient::didSameDocumentNavigationForFrame. Added flag in
        m_navigationDelegateMethods struct.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Initialize new m_navigationDelegateMethods
        flag.
        (WebKit::toWKSameDocumentNavigationType): Added this helper to convert from internal to API
        values.
        (WebKit::NavigationState::LoaderClient::didSameDocumentNavigationForFrame): Override to call
        the delegate method, if implemented.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): Added navigationID parameter,
        which is forwarded to the client.
        * UIProcess/WebPageProxy.h: Added navigationID parameter.
        * UIProcess/WebPageProxy.messages.in: Ditto.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidChangeLocationWithinPage): Send the navigation ID.
        (WebKit::WebFrameLoaderClient::dispatchDidPushStateWithinPage): Ditto.
        (WebKit::WebFrameLoaderClient::dispatchDidReplaceStateWithinPage): Ditto.
        (WebKit::WebFrameLoaderClient::dispatchDidPopStateWithinPage): Ditto.

2014-07-12  Oliver Hunt  <oliver@apple.com>

        Extend WebContent sandbox to allow some extra access for frameworks
        https://bugs.webkit.org/show_bug.cgi?id=134844

        Reviewed by Sam Weinig.

        Open up the webcontent sandbox a bit so that some external frameworks
        can work correctly.

        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::mediaCacheDirectory):
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformMediaCacheDirectory):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-07-12  Oliver Hunt  <oliver@apple.com>

        Temporary work around for <rdar://<rdar://problem/17513375>
        https://bugs.webkit.org/show_bug.cgi?id=134848

        Reviewed by Sam Weinig.

        Temporarily work around <rdar://<rdar://problem/17513375> by
        dropping the explicit cookie storage if it points out of the
        container.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultCookieStorageDirectory):

2014-07-11  Enrica Casucci  <enrica@apple.com>

        Implement textStylingAtPosition in WK2.
        https://bugs.webkit.org/show_bug.cgi?id=134843
        <rdar://problem/17614981>

        Reviewed by Benjamin Poulain.

        Adding information about typing attributes to EditorState so
        that we can implement textStylingAtPosition.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView textStylingAtPosition:inDirection:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView toggleBoldface:]):
        (-[WKContentView toggleItalics:]):
        (-[WKContentView toggleUnderline:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):

2014-07-11  Oliver Hunt  <oliver@apple.com>

        Tighten WebContent sandbox
        https://bugs.webkit.org/show_bug.cgi?id=134834

        Reviewed by Sam Weinig.

        Define a much tighter sandbox profile for the WebContent process

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

2014-07-11  Antti Koivisto  <antti@apple.com>

        REGRESSION (r170163?): Web content shifts revealing space equivalent to the find bar when clicking a link while a phrase is targeted via Cmd+F
        https://bugs.webkit.org/show_bug.cgi?id=134833
        <rdar://problem/17580021>

        Reviewed by Zalan Bujtas.
        
        Some versions of OS X Safari can't handle the new unfreeze timing. Revert back to DidFirstLayout on Mac.

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

2014-07-11  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: return integral results for offset*, client*, scroll* by default.
        https://bugs.webkit.org/show_bug.cgi?id=134651

        Reviewed by Simon Fraser.

        Revert to returning integral values for Element.offset* client* scroll* by default.
        Fractional values break number of sites(tight design) and JS frameworks(fail to handle fractional values).

        Since snapped dimension depends on both the original point and the width/height of the box,
        we need to call RenderBoxModelObject::pixelSnapped*() helpers, instead of round().

        Covered by existing tests

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2014-07-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed EFL build fix after r170970.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultOpenGLCacheDirectory):

2014-07-10  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r170970) REGRESSION(r170974): [GTK] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=134825

        Unreviewed GTK build fix.

        * Shared/SessionState.h: Put ifdefs for ViewSnapshot on Mac port.
        * Shared/WebBackForwardListItem.h: Idem.
        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultOpenGLCacheDirectory): Implement skeleton.

2014-07-10  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] It should be safe to call WKContentViewInteraction's cleanupInteraction multiple times
        https://bugs.webkit.org/show_bug.cgi?id=134820

        Reviewed by Andreas Kling.

        If a view is destroyed just after a crash, "cleanupInteraction" is called twice: once on crash,
        once on dealloc.

        The code handling _interactionViewsContainerView is using KVO to monitor transform changes. It is not safe
        to remove the observer if we are not already observing on that view.

        To solve the problem, this patch makes the cleanup actually remove the view so that setup and cleanup
        are completely symmetrical. If cleanup is called twice, the second time would not enter the branch because
        the view is already nil.

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

2014-07-10  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Move WKInspectorHighlightView to its own file
        https://bugs.webkit.org/show_bug.cgi?id=134819

        Reviewed by Joseph Pecoraro.
        
        WKInspectorHighlightView brought a lot of path/quad-related code into WKContentView.mm,
        so move it into its own file.

        * UIProcess/WKInspectorHighlightView.h: Added.
        * UIProcess/WKInspectorHighlightView.mm: Added.
        (-[WKInspectorHighlightView dealloc]):
        (-[WKInspectorHighlightView _removeAllLayers]):
        (-[WKInspectorHighlightView _createLayers:]):
        (findIntersectionOnLineBetweenPoints):
        (quadIntersection):
        (layerPathWithHole):
        (layerPath):
        (-[WKInspectorHighlightView _layoutForNodeHighlight:]):
        (-[WKInspectorHighlightView _layoutForRectsHighlight:]):
        (-[WKInspectorHighlightView update:]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKInspectorHighlightView initWithFrame:]): Deleted.
        (-[WKInspectorHighlightView dealloc]): Deleted.
        (-[WKInspectorHighlightView _removeAllLayers]): Deleted.
        (-[WKInspectorHighlightView _createLayers:]): Deleted.
        (findIntersectionOnLineBetweenPoints): Deleted.
        (quadIntersection): Deleted.
        (layerPathWithHole): Deleted.
        (layerPath): Deleted.
        (-[WKInspectorHighlightView _layoutForNodeHighlight:]): Deleted.
        (-[WKInspectorHighlightView _layoutForRectsHighlight:]): Deleted.
        (-[WKInspectorHighlightView update:]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

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

        REGRESSION (r170935): WKWebView is always transparent until the first layer tree commit
        https://bugs.webkit.org/show_bug.cgi?id=134818
        <rdar://problem/17632468>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (scrollViewBackgroundColor):
        r170935 made it so that we would initialize the scroll view background color to an
        invalid color until the first layer tree commit. We should go with white instead.

2014-07-10  Enrica Casucci  <enrica@apple.com>

        Add a mechanism to notify the UIProcess when an editing command is done executing.
        https://bugs.webkit.org/show_bug.cgi?id=134807

        Reviewed by Tim Horton.

        Some editing commands have an effect on some parts of the system that
        run inside the UIProcess. A good example are the cursor movement commands
        that require an update of the autocorrection/autosuggestion machinery.
        This patch adds a way to reliably know when the command has been executed
        in the WebProcess. A previous attempt at solving this problem was added in
        r170858 and was partially reverted in r170948.
        The change also removes the selectionWillChange notification added in r170858.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::selectionWillChange): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView executeEditCommandWithCallback:]):
        (-[WKContentView _moveUp:withHistory:]):
        (-[WKContentView _moveDown:withHistory:]):
        (-[WKContentView _moveLeft:withHistory:]):
        (-[WKContentView _moveRight:withHistory:]):
        (-[WKContentView _moveToStartOfWord:withHistory:]):
        (-[WKContentView _moveToStartOfParagraph:withHistory:]):
        (-[WKContentView _moveToStartOfLine:withHistory:]):
        (-[WKContentView _moveToStartOfDocument:withHistory:]):
        (-[WKContentView _moveToEndOfWord:withHistory:]):
        (-[WKContentView _moveToEndOfParagraph:withHistory:]):
        (-[WKContentView _moveToEndOfLine:withHistory:]):
        (-[WKContentView _moveToEndOfDocument:withHistory:]):
        (-[WKContentView _selectionWillChange]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::executeEditCommand):
        (WebKit::WebPageProxy::notifySelectionWillChange): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::executeEditCommandWithCallback):

2014-07-10  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] NSWindow warning: adding an unknown subview opening detached Inspector
        https://bugs.webkit.org/show_bug.cgi?id=134813

        Reviewed by Timothy Hatcher.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::createInspectorWindow):
        Use a selector that will avoid the warning message.

2014-07-10  Oliver Hunt  <oliver@apple.com>

        Remove use of container relative restrictions in the network process sandbox
        https://bugs.webkit.org/show_bug.cgi?id=134816

        Reviewed by Anders Carlsson.

        As i'm tidying up the various sandboxes and that's meaning we
        need to reduce some file restrictions in the network process.

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

2014-07-10  Pratik Solanki  <psolanki@apple.com>

        Unreviewed iOS build fix after r170974. Define id if building a non ObjC file.

        * UIProcess/mac/ViewSnapshotStore.h:

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

        Store ViewSnapshots directly on the WebBackForwardListItem
        https://bugs.webkit.org/show_bug.cgi?id=134667
        <rdar://problem/17082639>

        Reviewed by Dan Bernstein.

        Make ViewSnapshot a refcounted class. Store it directly on the back-forward item
        instead of in a side map referenced by UUID. Switch to a very simple LRU eviction model for now.
        This fixes a ton of snapshot management bugs; for example, we would start throwing out snapshots
        in the page that was actively being interacted with *first* when evicting snapshots, instead of
        preferring older snapshots. Additionally, we would not throw away snapshots when back forward items
        became unreachable.

        There is definitely room for improvement of the eviction mechanism, but this is closer to a time-tested implementation.

        * Shared/SessionState.h:
        Keep a ViewSnapshot instead of a UUID on the BackForwardListItemState.

        * Shared/WebBackForwardListItem.h:
        Fix some indented namespace contents.

        (WebKit::WebBackForwardListItem::snapshot):
        (WebKit::WebBackForwardListItem::setSnapshot):
        (WebKit::WebBackForwardListItem::setSnapshotUUID): Deleted.
        (WebKit::WebBackForwardListItem::snapshotUUID): Deleted.
        Switch the snapshot getter/setter to operate on ViewSnapshots instead of UUIDs.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::takeViewSnapshot):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::takeViewSnapshot):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::takeViewSnapshot):
        Adopt ViewSnapshot::create, return a PassRefPtr, and class-ify ViewSnapshot.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::shouldUseSnapshotForSize):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        Grab the ViewSnapshot directly from the WebBackForwardListItem, and adopt the new functions.

        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm:
        (WebKit::WebMemoryPressureHandler::WebMemoryPressureHandler):
        Rename discardSnapshots to discardSnapshotImages, because we're really only discarding
        the images; the render tree size/background color "snapshot" remains and is useful.

        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::setRenderTreeSize):
        (WebKit::ViewSnapshot::renderTreeSize):
        (WebKit::ViewSnapshot::setBackgroundColor):
        (WebKit::ViewSnapshot::backgroundColor):
        (WebKit::ViewSnapshot::setDeviceScaleFactor):
        (WebKit::ViewSnapshot::deviceScaleFactor):
        (WebKit::ViewSnapshot::imageSizeInBytes):
        (WebKit::ViewSnapshot::surface):
        (WebKit::ViewSnapshot::size):
        (WebKit::ViewSnapshot::creationTime):
        Make ViewSnapshot a refcounted class.
        Add create functions which take an image (or slot ID), and relevant sizes.
        It is expected that a ViewSnapshot is created with an image, and it is only possible
        to remove that image, never to replace it. A new ViewSnapshot is required in that case.
        Add setters for things that ViewSnapshotStore sets on the snapshot after the PageClient
        retrieves it from the view. Add getters for things that the ViewGestureControllers need.

        Remove removeSnapshotImage, getSnapshot, and the snapshot map.

        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::~ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::didAddImageToSnapshot):
        (WebKit::ViewSnapshotStore::willRemoveImageFromSnapshot):
        Manage m_snapshotCacheSize and m_snapshotsWithImages via didAddImageToSnapshot and willRemoveImageFromSnapshot.
        willRemoveImageFromSnapshot will -always- be called before the ViewSnapshot is destroyed.

        (WebKit::ViewSnapshotStore::pruneSnapshots):
        Switch to a simple LRU eviction model. As previously mentioned, it's possible to do better, but
        this is much less broken than the previous implementation.

        (WebKit::ViewSnapshotStore::recordSnapshot):
        (WebKit::ViewSnapshotStore::discardSnapshotImages):
        (WebKit::ViewSnapshot::create):
        (WebKit::ViewSnapshot::ViewSnapshot):
        (WebKit::ViewSnapshot::~ViewSnapshot):
        (WebKit::ViewSnapshot::hasImage):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::asLayerContents):
        If a surface is Empty when it comes back from being volatile, throw away the surface
        and notify the Store to remove it from m_snapshotCacheSize (via clearImage()).

        (WebKit::ViewSnapshotStore::removeSnapshotImage): Deleted.
        (WebKit::ViewSnapshotStore::getSnapshot): Deleted.
        (WebKit::ViewSnapshotStore::discardSnapshots): Deleted.

2014-07-10  Beth Dakin  <bdakin@apple.com>

        Need Setting/WKPreference that allows clients to prevent scrollbars from drawing 
        on a secondary thread
        https://bugs.webkit.org/show_bug.cgi?id=134778
        -and corresponding-
        <rdar://problem/17595333>

        Reviewed by Tim Horton.

        This is a requirement for some types of performance tests.

        New pref.
        * Shared/WebPreferencesDefinitions.h:

        PDFPlugin has to implement this new ScrollableArea virtual function to indicate 
        the Setting’s value.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::forceUpdateScrollbarsOnMainThreadForPerformanceTesting):

        New pref.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

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

        [iOS] Frequent assertion failures when swiping back

        Reviewed by Dan Bernstein.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        Don't create an unused VoidCallback. It will assert when destroyed without being called.

2014-07-10  Oliver Hunt  <oliver@apple.com>

        Pass sandbox extension for GL cache over to webprocess
        https://bugs.webkit.org/show_bug.cgi?id=134806

        Reviewed by Anders Carlsson.

        Add additional WebProcess parameters to pass an extension
        that allows access to the opengl cache directory in the
        host application's container.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::openGLCacheDirectory):
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultOpenGLCacheDirectory):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-07-10  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * WebProcess/WebPage/ServicesOverlayController.h:

2014-07-09  Brady Eidson  <beidson@apple.com>

        Phone number highlights should always be visible if the mouse hovers over.
        <rdar://problem/17527476> and https://bugs.webkit.org/show_bug.cgi?id=134784

        Reviewed by Tim Horton.

        This is a fairly extensive rewrite of ServicesOverlayController.
        It allows one selection highlight for the entire selection, and as many telephone number highlights as there are numbers.
        If a telephone number highlight is hovered over, it wins and is painted.
        If no telephone number highlight is hovered but the selection highlight is, then it is painted.
       
        The purposes of each method are self evident by their name, and the concepts are mostly the same as they used to be.

        The exception is establishHoveredTelephoneHighlight which gets a more detailed explanation below.
        
        * Platform/Logging.h: Add a Services logging channel.

        * WebProcess/WebPage/ServicesOverlayController.h:
        (WebKit::TelephoneNumberData::TelephoneNumberData):

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::ServicesOverlayController):
        (WebKit::ServicesOverlayController::selectionRectsDidChange):
        (WebKit::ServicesOverlayController::selectedTelephoneNumberRangesChanged):
        (WebKit::ServicesOverlayController::clearHighlightState):
        (WebKit::ServicesOverlayController::drawRect):
        (WebKit::ServicesOverlayController::drawSelectionHighlight):
        (WebKit::ServicesOverlayController::maybeDrawTelephoneNumberHighlight):
        (WebKit::ServicesOverlayController::drawHighlight):
        (WebKit::ServicesOverlayController::clearSelectionHighlight):
        (WebKit::ServicesOverlayController::clearHoveredTelephoneNumberHighlight):
        (WebKit::ServicesOverlayController::establishHoveredTelephoneHighlight): Starts walking the telephone number ranges and
            creating a highlight for each one that doesn’t already have a highlight. If that highlight is also being hovered by
            the mouse, then it is set as the hovered telephone number highlight and the method stops creating new highlights.
        (WebKit::ServicesOverlayController::maybeCreateSelectionHighlight):
        (WebKit::ServicesOverlayController::mouseEvent):
        (WebKit::ServicesOverlayController::handleClick):
        (WebKit::ServicesOverlayController::drawTelephoneNumberHighlight): Deleted.
        (WebKit::ServicesOverlayController::drawCurrentHighlight): Deleted.

2014-07-10  Timothy Horton  <timothy_horton@apple.com>

        Assertions or crashes under _takeViewSnapshot when restoring windows
        https://bugs.webkit.org/show_bug.cgi?id=134792

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        Taking a window-server snapshot of a non-visible window tends to not succeed.

2014-07-09  Pratik Solanki  <psolanki@apple.com>

        Buffer CSS and JS resources in network process before sending over to web process
        https://bugs.webkit.org/show_bug.cgi?id=134560
        <rdar://problem/16737186>

        Reviewed by Antti Koivisto.

        For CSS and JS resources, ask the network process to buffer the entire resource instead of
        sending it to web process in chunks since the web process can't do anything with a partial
        css or js file.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):

2014-07-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Disable text quantization while actively changing the page's scale factor
        https://bugs.webkit.org/show_bug.cgi?id=134781

        Reviewed by Tim Horton and Myles C. Maxfield.

        While zooming a page, text quantization causes glyphs to "move" in order to get to the closest
        boundary for the current scale factor.

        We do not want this to happen while dynamically changing the scale factor because the effect
        is visible. To avoid this, we disable text quantization if the page's scale factor changes
        in response to a non-stable contentRect update.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::hasStablePageScaleFactor):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::hasStablePageScaleFactor):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

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

        [iOS] Use UIAlertController API in WKFileUploadPanel instead of SPI
        https://bugs.webkit.org/show_bug.cgi?id=134777

        Reviewed by Sam Weinig.

        * UIProcess/ios/forms/WKFileUploadPanel.mm:
        (-[WKFileUploadPanel _showMediaSourceSelectionSheet]):

2014-07-09  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Add new Public API in ewk_download_job.h to get size of the data already downloaded.
        https://bugs.webkit.org/show_bug.cgi?id=134759

        Reviewed by Gyuyoung Kim.

        Add new API in ewk_download_job.h to get size of the data already downloaded.

        * UIProcess/API/efl/ewk_download_job.cpp:
        (ewk_download_job_received_data_length_get):
        (EwkDownloadJob::receivedData):
        * UIProcess/API/efl/ewk_download_job.h:
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
        (EWK2DownloadJobTest::on_download_requested):
        (EWK2DownloadJobTest::on_download_finished):

2014-07-09  Enrica Casucci  <enrica@apple.com>

        REGRESSION(r170858): Safari freezes upon making a search on a website (yelp.com).
        https://bugs.webkit.org/show_bug.cgi?id=134791
        <rdar://problem/17616971>

        Reviewed by Benjamin Poulain.

        After r170858 we notify the keyboard too often about
        the changed selection. This patch removes the notification
        until we find a better way to do it that doesn't cause
        deadlocks.

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

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

        Safari showing blank pages
        https://bugs.webkit.org/show_bug.cgi?id=134790
        <rdar://problem/17617166>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Make sure to add the content view to the scroll view.

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

        Closed web views should never create new web processes
        https://bugs.webkit.org/show_bug.cgi?id=134787
        <rdar://problem/16892526>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadHTMLString:baseURL:]):
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        Return nil if the returned navigation ID is 0.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        Assert that the page is not closed.

        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        (WebKit::WebPageProxy::loadRequest):
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::loadData):
        (WebKit::WebPageProxy::loadHTMLString):
        (WebKit::WebPageProxy::loadAlternateHTMLString):
        (WebKit::WebPageProxy::loadPlainTextString):
        (WebKit::WebPageProxy::loadWebArchiveData):
        Add early returns if the page is closed.

        * UIProcess/WebPageProxy.h:

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

        Support transparent WKWebViews
        https://bugs.webkit.org/show_bug.cgi?id=134779
        <rdar://problem/17351058>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Call _updateScrollViewBackground instead of setting the background color.

        (contentZoomScale):
        Use dot notation.

        (scrollViewBackgroundColor):
        Helper function that returns the scroll view background color. 
        If the web view isn't opaque, we want the scroll view to be transparent.

        (-[WKWebView _updateScrollViewBackground]):
        Call scrollViewBackgroundColor.

        (-[WKWebView setOpaque:]):
        Call WebPageProxy::setDrawsBackground and update the scroll view background.

        (-[WKWebView setBackgroundColor:]):
        Call setBackgroundColor on the content view.

2014-07-09  Andy Estes  <aestes@apple.com>

        [iOS] WebKit can crash under QuickLookDocumentData::encode() when viewing a QuickLook preview
        https://bugs.webkit.org/show_bug.cgi?id=134780

        Reviewed by Tim Horton.

        Don't use CFDataCreateWithBytesNoCopy() when we can't guarantee the lifetime of the copied-from DataReference
        will match or exceed that of the CFDataRef. Copy the data instead.

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

2014-07-09  Pratik Solanki  <psolanki@apple.com>

        Move resource buffering from SynchronousNetworkLoaderClient to NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=134732

        Reviewed by Darin Adler.

        Buffer the resource in NetworkResourceLoader instead of SynchronousNetworkLoaderClient. This
        is in preparation for bug 134560 where we will be supporting JS and CSS resource buffering
        that uses AsynchronousNetworkLoaderClient.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::didReceiveBuffer):
        (WebKit::NetworkResourceLoader::didFinishLoading):
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::bufferedData):
        * NetworkProcess/SynchronousNetworkLoaderClient.cpp:
        (WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
        (WebKit::SynchronousNetworkLoaderClient::didFinishLoading):
        (WebKit::SynchronousNetworkLoaderClient::didFail):
        (WebKit::SynchronousNetworkLoaderClient::sendDelayedReply):
        * NetworkProcess/SynchronousNetworkLoaderClient.h:

2014-07-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] subviews of the unscaled view drift out during CA animations
        https://bugs.webkit.org/show_bug.cgi?id=134751

        Reviewed by Enrica Casucci.

        It is not possible to animate the WKContentView and the inverse view in such a way
        that the combined matrix remain the identity for every frame of the animation.

        This patch solves the issue by moving the unscaled view as a sibling of WKContentView
        instead of a child so that we do not need to update two scales simultaneously.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _processDidExit]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:]):
        Set the z scale to 1 or no coordinate transform will work with this view.

        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        Since we need to observe changes inside the animation block, the code now use KVO to observe changes of scale.

        (-[WKContentView cleanupInteraction]):
        (-[WKContentView unscaledView]):
        (-[WKContentView inverseScale]):
        (-[WKContentView observeValueForKeyPath:ofObject:change:context:]):
        We update the utility views as usual. The extra bits here are to deal with views coming in during an animation.

        If a new utility view comes in during a scaling animation, we do not want to start a new animation with the same curve
        to end up at the right place. To avoid any issue, we just hide the view until the animation is finished.

        (-[WKContentView hitTest:withEvent:]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _updateUnscaledView]): Deleted.

2014-07-09  Tim Horton  <timothy_horton@apple.com>

        Use IOSurface ViewSnapshots everywhere on Mac, remove JPEG encoding path
        https://bugs.webkit.org/show_bug.cgi?id=134773

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::~ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::asLayerContents):
        (WebKit::createIOSurfaceFromImage): Deleted.
        (WebKit::compressImageAsJPEG): Deleted.
        (WebKit::ViewSnapshotStore::reduceSnapshotMemoryCost): Deleted.
        (WebKit::ViewSnapshotStore::didCompressSnapshot): Deleted.
        Remove all ViewSnapshot(Store) code related to JPEG-encoded snapshots.
        Remove the "image" member on ViewSnapshot; Mac will always start out with an IOSurface instead.
        Adopt WebCore::IOSurface::createFromImage to make that happen.
        Add a comment noting that if a snapshot comes back empty, we should throw it away completely.

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

        RemoteLayerBackingStore::ensureBackingStore should ensure that the entire backing store gets redrawn
        https://bugs.webkit.org/show_bug.cgi?id=134772

        Reviewed by Tim Horton.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::Buffer::operator bool):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):

2014-07-09  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Fix crash caused by invalid cursor image.
        https://bugs.webkit.org/show_bug.cgi?id=134663

        Reviewed by Gyuyoung Kim.

        Remove calling of updateCursor since the custom cursor image is invalid once a mouse is out of the webview.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkViewEventHandler<EVAS_CALLBACK_MOUSE_IN>::handleEvent):

2014-07-08  Tim Horton  <timothy_horton@apple.com>

        Remove WebBackForwardListItems when their owning page goes away
        https://bugs.webkit.org/show_bug.cgi?id=134709
        <rdar://problem/17584645>

        Reviewed by Dan Bernstein.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::pageID):
        Add the associated PageID to the WebBackForwardListItem.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::restoreFromState):
        Push the current PageID onto the WebBackForwardListItem.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):
        Remove all of the WebBackForwardListItems from m_backForwardListItemMap when
        the page they are associated with is removed.

        (WebKit::WebProcessProxy::addBackForwardItem):
        Push the PageID from the WebProcess onto the WebBackForwardListItem.

        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::idToHistoryItemMap):
        (WebKit::historyItemToIDMap):
        (WebKit::updateBackForwardItem):
        (WebKit::WebBackForwardListProxy::addItemFromUIProcess):
        (WebKit::WK2NotifyHistoryItemChanged):
        (WebKit::WebBackForwardListProxy::idForItem):
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::close):
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSession):
        Keep track of the PageID that back-forward items were created by.
        Pass the PageID along when registering WebBackForwardListItems.

2014-07-08  Tim Horton  <timothy_horton@apple.com>

        [WK2] Expose a few drawing/compositing settings on WKPreferences(Private)
        https://bugs.webkit.org/show_bug.cgi?id=134645

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _compositingBordersVisible]):
        (-[WKPreferences _setCompositingBordersVisible:]):
        (-[WKPreferences _compositingRepaintCountersVisible]):
        (-[WKPreferences _setCompositingRepaintCountersVisible:]):
        (-[WKPreferences _tiledScrollingIndicatorVisible]):
        (-[WKPreferences _setTiledScrollingIndicatorVisible:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        Expose layer borders, repaint counters, and the tiled scrolling indicator on WKPreferences, as SPI.

2014-07-08  Tim Horton  <timothy_horton@apple.com>

        WKProcessPoolConfigurationPrivate's maximumProcessCount property has no effect
        https://bugs.webkit.org/show_bug.cgi?id=134711

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        Respect the maximumProcessCount.
        Currently the default limit is UINT_MAX; if maximumProcessCount = 0 (the default), we'll use that limit.

2014-07-08  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Move user style sheet API out of WebKitWebViewGroup
        https://bugs.webkit.org/show_bug.cgi?id=134551

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: Include the new source files in the build.
        * UIProcess/API/C/gtk/WKView.cpp:
        (WKViewCreate):
        Adapt to the additional webkitWebViewBaseCreateWebPage() parameter.
        * UIProcess/API/gtk/WebKitUserContent.cpp: Added.
        (toUserContentInjectedFrames):
        (toUserStyleLevel):
        (toStringVector):
        (_WebKitUserStyleSheet::_WebKitUserStyleSheet):
        (webkit_user_style_sheet_ref):
        (webkit_user_style_sheet_unref):
        (webkit_user_style_sheet_new):
        (webkitWebKitUserStyleSheetToUserStyleSheet):
        * UIProcess/API/gtk/WebKitUserContent.h: Added.
        * UIProcess/API/gtk/WebKitUserContentManager.cpp: Added.
        (_WebKitUserContentManagerPrivate::_WebKitUserContentManagerPrivate):
        (webkit_user_content_manager_class_init):
        (webkit_user_content_manager_new):
        (webkit_user_content_manager_add_style_sheet):
        (webkit_user_content_manager_remove_all_style_sheets):
        (webkitUserContentManagerGetUserContentControllerProxy):
        * UIProcess/API/gtk/WebKitUserContentManager.h: Added.
        * UIProcess/API/gtk/WebKitUserContentManagerPrivate.h: Added.
        * UIProcess/API/gtk/WebKitUserContentPrivate.h: Added.
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (webkitWebContextCreatePageForWebView): Add a new parameter to allow
        passing the WebKitUserContentManager that the web view will use.
        * UIProcess/API/gtk/WebKitWebContextPrivate.h: Ditto.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewConstructed): Added handling of the
        "user-content-manager" property on construction.
        (webkitWebViewSetProperty): Added support for the
        "user-content-manager" property.
        (webkitWebViewGetProperty): Added support for the
        "user-content-manager" property.
        (webkit_web_view_class_init): Added the "user-content-manager"
        property definition to the WebKitWebView class.
        (webkit_web_view_new_with_related_view): Made related views share
        the same WebKitUserContentManager used by the view they are
        related to.
        (webkit_web_view_new_with_user_content_manager): Added.
        (webkit_web_view_get_user_content_manager): Added.
        * UIProcess/API/gtk/WebKitWebView.h: Add new API methods.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseCreate): Added a parameter to pass the user
        content manager.
        (webkitWebViewBaseCreateWebPage): Added a parameter to pass the user
        content manager.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Ditto.
        * UIProcess/API/gtk/WebKitWebViewGroup.cpp: Removed the bits related
        to user style sheet support from WebKitWebViewGroup.
        (webkit_web_view_group_set_settings):
        (toAPIArray): Deleted.
        (webkit_web_view_group_add_user_style_sheet): Deleted.
        (webkit_web_view_group_remove_all_user_style_sheets): Deleted.
        * UIProcess/API/gtk/WebKitWebViewGroup.h: Deleted the API methods
        for user style sheet handling.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Added the new API
        functions and types, and removed the methods which are no longer
        available in WebKitWebViewGroup.
        * UIProcess/API/gtk/webkit2.h: Add the new headers.
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp: Added
        methods to add and remove user style sheets, alike those used for
        user scripts.
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
        * UIProcess/UserContent/WebUserContentControllerProxy.h: Ditto.
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::platformCreateInspectorPage):
        Adapt to the additional webkitWebViewBaseCreateWebPage() parameter.
        * WebProcess/UserContent/WebUserContentController.cpp: Added methods
        to add and remove user style sheets, alike those used for user scripts.
        (WebKit::WebUserContentController::addUserStyleSheets):
        (WebKit::WebUserContentController::removeAllUserStyleSheets):
        * WebProcess/UserContent/WebUserContentController.h: Ditto.
        * WebProcess/UserContent/WebUserContentController.messages.in:
        Ditto.

2014-07-08  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Guard uses of RedirectedXCompositeWindow in WebKitWebViewBase with PLATFORM(X11)
        https://bugs.webkit.org/show_bug.cgi?id=133871

        Reviewed by Martin Robinson.

        Guard uses of the RedirectedXCompositeWindow object in WebKitWebViewBase with the
        PLATFORM(X11) build guard. This is required to properly support building the GTK
        port only for the Wayland target.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        (webkitWebViewRenderAcceleratedCompositingResults):
        (resizeWebKitWebViewBaseFromAllocation):
        (webkitWebViewBaseUpdatePreferences):
        (webkitWebViewBaseCreateWebPage):

2014-07-07  Tim Horton  <timothy_horton@apple.com>

        Turn on accelerated drawing for WebKit2 by default
        https://bugs.webkit.org/show_bug.cgi?id=134708
        <rdar://problem/17584642>

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesDefinitions.h:
        Make Mac match iOS, in that accelerated drawing is on by default.

2014-07-07  Timothy Horton  <timothy_horton@apple.com>

        Don't leak _WKRemoteObjectRegistry in WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=134703

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _remoteObjectRegistry]):
        Adoption is important!!

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

        [UI-side compositing] Support reflections on custom layers like video
        https://bugs.webkit.org/show_bug.cgi?id=134701

        Reviewed by Tim Horton.
        
        For video reflections, we have to support cloning of PlatformCALayerRemoteCustom
        in the web process. Do so by implementing PlatformCALayerRemoteCustom::clone(),
        which does the right gyrations to get AVPlayerLayers cloned, then makes a
        new PlatformCALayerRemoteCustom to wrap the new layer. This ends up getting
        its own context hosting ID, allowing the clone to show in the UI process.
        
        Attempt to do the same for WebGL, but turn it off because it breaks.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::encode): Unconditionally encode/decode
        the hostingContextID. It will be 0 for most layers.
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::description):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::create): Creation with a custom PlatformLayer* always
        creates a PlatformCALayerRemoteCustom.
        (WebKit::PlatformCALayerRemote::clone): Factor some code.
        (WebKit::PlatformCALayerRemote::updateClonedLayerProperties):
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::create):
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (WebKit::PlatformCALayerRemoteCustom::clone): Clone by making an instance of the 
        correct type of platform layer when possible, then wrapping a PlatformCALayerRemoteCustom
        around it.
        (WebKit::PlatformCALayerRemoteCustom::contents):
        (WebKit::PlatformCALayerRemoteCustom::setContents):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):

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

        [UI-side compositing] Crash when starting a filter transition on a reflected layer
        https://bugs.webkit.org/show_bug.cgi?id=134694

        Reviewed by Tim Horton.
        
        When cloned layers had animations, we would fire two animationDidStart callbacks,
        but the second would pass an empty animationKey string to the web process, resulting
        in a crash.
        
        Fix by not blindly copying all layer properties when cloning PlatformCALayerRemotes,
        since the clone would include addedAnimations, and then get the same animations
        added on top by the caller.
        
        Also protect against an empty animation key in the animationDidStart callback.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::animationDidStart):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::clone): Don't copy all the properties; copy
        them manually as PlatformCALayerMac does. Only copy the big things if they don't
        have their default values.
        (WebKit::PlatformCALayerRemote::copyFiltersFrom): Need an implementation of this
        for clone() to call.

2014-07-07  Tim Horton  <timothy_horton@apple.com>

        Nearly everything in the UIProcess "leaks" when WKWebView is torn down
        https://bugs.webkit.org/show_bug.cgi?id=134699
        <rdar://problem/17581777>

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Adoption is important!

2014-07-07  Enrica Casucci  <enrica@apple.com>

        REGRESSION(iOS WK2): arrow keys movements don't work.
        https://bugs.webkit.org/show_bug.cgi?id=134561
        <rdar://problem/16827629>

        Reviewed by Benjamin Poulain.

        This change add the implementations for cursor movement selectors.
        It also provides a mechanism to ensure that every selection
        change in WebKit is reflected in UIKit so that it can update the 
        autocorrection data. This way we ensure that the autocorraction state
        is consistent even when selection changes are originated by JavaScript.
        WebPageProxy::editorStateChanged now notifies the page client when the
        selection is about to change as well as when it actually changed.
        
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::selectionWillChange):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cut:]): Removed incorrect calls to textWillChange and
        textDidChange.
        (-[WKContentView paste:]):
        (-[WKContentView _moveUp:withHistory:]):
        (-[WKContentView _moveDown:withHistory:]):
        (-[WKContentView _moveLeft:withHistory:]):
        (-[WKContentView _moveRight:withHistory:]):
        (-[WKContentView _moveToStartOfWord:withHistory:]):
        (-[WKContentView _moveToStartOfParagraph:withHistory:]):
        (-[WKContentView _moveToStartOfLine:withHistory:]):
        (-[WKContentView _moveToStartOfDocument:withHistory:]):
        (-[WKContentView _moveToEndOfWord:withHistory:]):
        (-[WKContentView _moveToEndOfParagraph:withHistory:]):
        (-[WKContentView _moveToEndOfLine:withHistory:]):
        (-[WKContentView _moveToEndOfDocument:withHistory:]):
        (-[WKContentView _selectionWillChange]):
        (-[WKContentView _selectionChanged]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::notifySelectionWillChange):

2014-07-07  Anders Carlsson  <andersca@apple.com>

        Add SPI for saving and restoring a WKWebView's _WKSessionState
        https://bugs.webkit.org/show_bug.cgi?id=134693

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRestoreFromSessionState):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _sessionState]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreFromSessionState:]):
        (-[WKWebView _restoreSessionState:andNavigate:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKSessionState.mm:
        (-[_WKSessionState _initWithSessionState:]):
        * UIProcess/API/Cocoa/_WKSessionStateInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreFromSessionState):
        * UIProcess/WebPageProxy.h:

2014-07-07  Anders Carlsson  <andersca@apple.com>

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

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/_WKSessionState.h: Copied from Source/WebKit2/UIProcess/LegacySessionStateCoding.h.
        * UIProcess/API/Cocoa/_WKSessionState.mm: Copied from Source/WebKit2/UIProcess/LegacySessionStateCoding.h.
        (-[_WKSessionState initWithData:]):
        (-[_WKSessionState data]):
        * UIProcess/API/Cocoa/_WKSessionStateInternal.h: Copied from Source/WebKit2/UIProcess/LegacySessionStateCoding.h.
        * UIProcess/Cocoa/SessionStateCoding.h: Copied from Source/WebKit2/UIProcess/LegacySessionStateCoding.h.
        * UIProcess/Cocoa/SessionStateCoding.mm: Copied from Source/WebKit2/UIProcess/LegacySessionStateCoding.h.
        (WebKit::encodeSessionState):
        (WebKit::decodeSessionState):
        * UIProcess/LegacySessionStateCoding.h:
        * WebKit2.xcodeproj/project.pbxproj:

2014-07-07  Anders Carlsson  <andersca@apple.com>

        Some of the WKPreferences (API) property getters read like questions
        https://bugs.webkit.org/show_bug.cgi?id=134678
        <rdar://problem/17576847>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences javaScriptIsEnabled]):
        (-[WKPreferences javaIsEnabled]):
        (-[WKPreferences plugInsAreEnabled]):
        (-[WKPreferences isJavaScriptEnabled]): Deleted.
        (-[WKPreferences isJavaEnabled]): Deleted.
        (-[WKPreferences arePlugInsEnabled]): Deleted.

2014-07-07  Brady Eidson  <beidson@apple.com>

        ServicesOverlayController menus show up in the wrong place.
        <rdar://problem/17130576> and https://bugs.webkit.org/show_bug.cgi?id=134684

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::selectedTelephoneNumberRangesChanged): Handle cases where
          the telephone number is in a subframe.
        (WebKit::ServicesOverlayController::handleClick): The click point is always in main frame document
          coordinates, so convert it to window coordinates using the main frame’s FrameView.

2014-07-07  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Assertion failure in NavigationState::LoaderClient::didStartProvisionalLoadForFrame (navigationID) when navigating through the page cache
        https://bugs.webkit.org/show_bug.cgi?id=134682

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame): Replaced the
        assertion with a FIXME.
        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        Ditto.
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame): Ditto.

2014-07-07  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Fix cursor artifacts on naver map site.
        https://bugs.webkit.org/show_bug.cgi?id=134649

        Reviewed by Gyuyoung Kim.

        Old evas cursor and ecore x cursor are reset before new cursor is applied.

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

2014-07-06  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] The tap highlight ID is not invalidated when a long press ends
        https://bugs.webkit.org/show_bug.cgi?id=134660

        Reviewed by Darin Adler.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _cancelInteraction]):
        (-[WKContentView _finishInteraction]):
        (cancelPotentialTapIfNecessary):
        I messed that up in r170600. I only accounted for the web process being too fast.

        If the web process is too slow, _cancelInteraction or _finishInteraction happen before
        _didGetTapHighlightForRequest:, and we also need to nuke the tap highlight.

2014-07-06  Tim Horton  <timothy_horton@apple.com>

        [WK2] Don't support dynamically enabling the RemoteLayerTree debug indicator
        https://bugs.webkit.org/show_bug.cgi?id=134644

        Reviewed by Darin Adler.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setShouldShowDebugIndicator): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::preferencesDidChange):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::initializeDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setShouldShowDebugIndicator): Deleted.
        The indicator depends on the live layer tree commits coming in, including layer creation,
        so it can't be turned on after the root layer is created. Even a refresh is insufficient
        to get it working; the debug indicator really needs to exist from the first commit.
        So, don't even attempt to dynamically enable the indicator; create it at
        RemoteLayerTreeDrawingAreaProxy construction time if the pref is enabled.

2014-07-06  Yoav Weiss  <yoav@yoav.ws>

        Turn on img@sizes compile flag
        https://bugs.webkit.org/show_bug.cgi?id=134634

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Moved compile flag to alphabetical order.

2014-07-06  Brady Eidson  <beidson@apple.com>

        Speculative fix for: NetworkProcess sometimes hangs under copyDefaultCredentialForProtectionSpace
        https://bugs.webkit.org/show_bug.cgi?id=134666

        Reviewed by Tim Horton.

        * Shared/mac/SecItemRequestData.cpp:
        (WebKit::SecItemRequestData::encode): Encode whether or not the query dictionary exists.
        (WebKit::SecItemRequestData::decode): Only fail when query dictionary fails to decode if we expect one. 

        * UIProcess/mac/SecItemShimProxy.cpp:
        (WebKit::SecItemShimProxy::secItemRequest): If the request is of type Invalid, log an error message asking 
          for a bug, and respond with an "invalid parameter" error.

2014-07-06  Antti Koivisto  <antti@apple.com>

        Don't throttle layer flushes when the main resource is a GIF
        https://bugs.webkit.org/show_bug.cgi?id=134650

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::adjustLayerFlushThrottling):

2014-07-04  Rohit Kumar  <kumar.rohit@samsung.com>

        [EFL][WK2]Fix build break in EFL WK2
        https://bugs.webkit.org/show_bug.cgi?id=134629

        Unreviewed build fix.

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

2014-07-04  Dan Bernstein  <mitz@apple.com>

        [Cocoa] -[WKWebView _reload] is unused
        https://bugs.webkit.org/show_bug.cgi?id=134638

        Reviewed by Sam Weinig.

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

2014-07-04  Tim Horton  <timothy_horton@apple.com>

        [WK2] Take TopContentInset into account when sending dictionary lookup point to PluginView
        https://bugs.webkit.org/show_bug.cgi?id=134624
        <rdar://problem/17222041>

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::performDictionaryLookupAtLocation):
        Perform the same coordinate conversion we use for mouse events, which happens
        to take the top content inset into account.

2014-07-04  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK WK2 build fix after r170787.

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

2014-07-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Reverting the bad changes introduced in r170795.

        * Platform/IPC/ArgumentDecoder.cpp:
        (IPC::ArgumentDecoder::decode): Deleted.
        * Platform/IPC/ArgumentDecoder.h:
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::ArgumentEncoder::encode): Deleted.
        * Platform/IPC/ArgumentEncoder.h:

2014-07-04  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the build for ports on 64-bit Linux.

        Add IPC encoding and decoding overloads for the long long type, needed
        after r170755 started encoding and decoding long long variables in
        FormDataElement.

        * Platform/IPC/ArgumentDecoder.cpp:
        (IPC::ArgumentDecoder::decode):
        * Platform/IPC/ArgumentDecoder.h:
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::ArgumentEncoder::encode):
        * Platform/IPC/ArgumentEncoder.h:

2014-07-04  Timothy Horton  <timothy_horton@apple.com>

        [iOS][WK2] Black web view after un-suspending process
        https://bugs.webkit.org/show_bug.cgi?id=134623
        <rdar://problem/17513223>

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        Add an argument to viewStateDidChange that allows callers (-[WKContentView _applicationWillEnterForeground:])
        to force us to wait for a synchronous reply from the Web process after performing a view state change.

        (WebKit::WebPageProxy::dispatchViewStateChange):
        Move the has-been-in-window-and-now-is-newly-in-window check into dispatchViewStateChange.
        Adjust the logic surrounding going into/out of window by factoring out the IsInWindow-did-change check, for clarity.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _applicationWillEnterForeground:]):
        As previously mentioned, wait for a reply when foregrounding.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlushImmediately):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):
        (WebKit::RemoteLayerTreeDrawingArea::viewStateDidChange):
        Make sure to schedule a commit immediately if the UI process is waiting for a reply.
        Previously we assumed that a commit would be scheduled anyway because we would have to reparent the
        layer tree, but that doesn't happen in the suspension-without-unparenting case. Also, we want to skip
        all throttling in this case.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::scheduleCompositingLayerFlushImmediately):

2014-07-03  Gavin Barraclough  <baraclough@apple.com>

        Should not take background task assertion for NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=134622

        Reviewed by Tim Horton.

        When the WebContent wants to complete a task in the background we take a process assertion on the child process, and also need to prevent the UI process from suspending.
        However for the NetworkProcess we always just hold a process assertion, and don't want this to interfere with UIApp suspension.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
            - ProcessAssertion -> ProcessAndUIAssertion
        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::ProcessAssertion):
            - assignment -> initializer list.
        (WebKit::ProcessAndUIAssertion::ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::~ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::setState):
            - added no-op implementation.
        (WebKit::ProcessAssertion::~ProcessAssertion): Deleted.
        * UIProcess/ProcessAssertion.h:
            - removed ~ProcessAssertion, added ProcessAndUIAssertion class.
        * UIProcess/ProcessThrottler.cpp:
        (WebKit::ProcessThrottler::didConnnectToProcess):
            - ProcessAssertion -> ProcessAndUIAssertion
        * UIProcess/ProcessThrottler.h:
            - ProcessAssertion -> ProcessAndUIAssertion
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
            - assignment -> initializer list.
            - moved code to manage WKProcessAssertionBackgroundTaskManager
        (WebKit::ProcessAssertion::setState):
            - moved code to manage WKProcessAssertionBackgroundTaskManager
        (WebKit::ProcessAndUIAssertion::ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::~ProcessAndUIAssertion):
        (WebKit::ProcessAndUIAssertion::setState):
            - moved code to manage WKProcessAssertionBackgroundTaskManager from ProcessAssertion.
        (WebKit::ProcessAssertion::~ProcessAssertion): Deleted.
            - delete - moved code to manage WKProcessAssertionBackgroundTaskManager

2014-07-03  Simon Fraser  <simon.fraser@apple.com>

        Clean up Brady's mess on iOS.

        * Platform/mac/StringUtilities.h:
        * Platform/mac/StringUtilities.mm:

2014-07-03  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Compositing layers draw outside page bounds
        https://bugs.webkit.org/show_bug.cgi?id=134619
        <rdar://problem/16953222>

        Reviewed by Benjamin Poulain.
        
        With the new rubber-banding behavior, we no longer have the root content layer clipping all
        the web layers, but this resulted in web layers which were moved outside the viewport by CSS
        transforms not being clipped.
        
        Fix by adding a clipping layer inside the scroll view, above _rootContentView. This layer
        normally has the same bounds as the content, but when rubber-banding or pinching,
        it takes the union of the content bounds and the rect used for fixed positioning.
        To make scrolling work as expected in this scenario, when it has non-zero offset, it
        has to compensate by setting its bounds origin.

        The bounds of the clipping layer are updated on scrolling/zooming, and when the
        layer commit tells us that the content size changed.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:configuration:webView:]):
        (-[WKContentView updateFixedClippingView:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        (-[WKContentView _didCommitLayerTree:]):

2014-07-03  Brady Eidson  <beidson@apple.com>

        When showing the selection menu, include menu options for all selected phone numbers.
        <rdar://problem/16983434>, <rdar://problem/16874568>, and https://bugs.webkit.org/show_bug.cgi?id=134613

        Reviewed by Tim Horton.

        Move some telephone number menu logic from WebKitSystemInterface here.
        Also provide utility to get just the one menu item relevant to a telephone number.
        * Platform/mac/MenuUtilities.h:
        * Platform/mac/MenuUtilities.mm: Added.
        (WebKit::menuItemForTelephoneNumber):
        (WebKit::menuItemsForTelephoneNumber):

        * Platform/mac/StringUtilities.h:
        * Platform/mac/StringUtilities.mm:
        (WebKit::formattedPhoneNumberString): Return a localized formatted phone number.

        Add a member to track the selected phone numbers:
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::selectedTelephoneNumbers):

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu): Also add menu items for each phone number that is
          in the selection.

        Switch away from a WKSI method, and remove a lot of unneeded forward declarations and soft linking:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu):
        (WebKit::WebPageProxy::showSelectionServiceMenu):

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::drawSelectionHighlight):
        (WebKit::ServicesOverlayController::handleClick): Pass the phone numbers along.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleSelectionServiceClick): Pass the phone numbers along.

2014-07-03  Gavin Barraclough  <baraclough@apple.com>

        WKProcessAssertionBackgroundTaskManager should clear member if task expires
        https://bugs.webkit.org/show_bug.cgi?id=134618

        Reviewed by Anders Carlson.

        Failure to do so results in a warning, and could result in us erroneously completing a background task too soon.

        * UIProcess/ios/ProcessAssertionIOS.mm:
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
            - remove local variable, _backgroundTask = UIBackgroundTaskInvalid;

2014-07-03  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed iOS build fix for r170774.

        Remove some unnecessary WTF::moves on iOS:
        error: static_assert failed "T is not an lvalue reference; move() is unnecessary."

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

2014-07-03  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS build.

        Add WebPageProxyCocoa.mm for code shared between iOS and OS X. Put the recent searches save/restore code there.

        * UIProcess/Cocoa/WebPageProxyCocoa.mm: Added.
        (WebKit::autosaveKey):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2014-07-03  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16337741> The UI process needs to track the number of HTTP subresource loads in progress (or at least whether there are any)
        https://bugs.webkit.org/show_bug.cgi?id=134615

        Reviewed by Anders Carlsson.

        Added a _networkRequestsInProgress boolean property to WKWebView.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm: Added no-op overrides of new
        PageLoadStateObserver member functions.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _networkRequestsInProgress]): New getter that gets this state from the
        PageLoadState.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared new property.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeNetworkRequestsInProgress):: Override this new
        PageLoadState::Observer member function by sending the appropriate KVO change message to the
        WKWebView.
        (WebKit::NavigationState::didChangeNetworkRequestsInProgress): Ditto.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::commitChanges): Check for changes to networkRequestsInProgress
        and call the observers if needed.
        (WebKit::PageLoadState::reset): Reset networkRequestsInProgress in the uncommitted state.
        (WebKit::PageLoadState::setNetworkRequestsInProgress): Set networkRequestsInProgress in the
        uncommitted state.
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::networkRequestsInProgress): Added this getter.
        (WebKit::PageLoadState::Data::Data): Initialize new networkRequestsInProgress member.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setNetworkRequestsInProgress): Added. Updates the PageLoadState.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Added SetNetworkRequestsInProgress message.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::assignIdentifierToInitialRequest): Call
        WebPage::addResourceRequest.
        (WebKit::WebFrameLoaderClient::dispatchDidFinishLoading): Call
        WebPage::removeResourceRequest.
        (WebKit::WebFrameLoaderClient::dispatchDidFailLoading): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::addResourceRequest): Added. If the new request is for an HTTP-family URL,
        add its identifier to the set of network resourece request identifiers. If the set was
        previously empty, send the WebPageProxy a message.
        (WebKit::WebPage::removeResourceRequest): Added. Remove the identifier from the set. If it
        becomes empty, send the WebPageProxy a message.
        * WebProcess/WebPage/WebPage.h:

2014-07-03  Anders Carlsson  <andersca@apple.com>

        Remove two unused functions
        https://bugs.webkit.org/show_bug.cgi?id=134614

        Reviewed by Andreas Kling.

        * UIProcess/LegacySessionStateCoding.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeLegacySessionHistoryEntryData): Deleted.
        (WebKit::decodeLegacySessionHistoryEntryData): Deleted.

2014-07-03  Daniel Bates  <dabates@apple.com>

        Add WTF::move()
        https://bugs.webkit.org/show_bug.cgi?id=134500

        Rubber-stamped by Anders Carlsson.

        Substitute WTF::move() for std::move().

        * DatabaseProcess/DatabaseProcess.cpp:
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        * Platform/IPC/ArgumentCoders.h:
        * Platform/IPC/ArgumentDecoder.cpp:
        * Platform/IPC/Connection.cpp:
        * Platform/IPC/Connection.h:
        [...]

2014-07-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix small bugs of dynamicViewportSizeUpdate that were causing inaccuracies in the computed target
        https://bugs.webkit.org/show_bug.cgi?id=134582

        Reviewed by Tim Horton.

        This patch fixes two small bugs that were causing "jumpiness" on animated resize:
        1) The new scale was less accurate than the target scale, making the WebProcess force a worse scale on the content.
        2) The code putting back the rects in view was ignoring the obscured insets, constraining the scroll position more
           than it should be.

        The first problem was cause by a series of rounding issues accumulating to the fact that "scale != targetScale"
        was almost never true.

        The first issue is that the unobscured content size was stored in integer coordinates. Because of that, it was
        impossible to determine accurately how much content is in the view.
        The outcome was that visibleHorizontalFraction was very inaccurate compared to what the UIProcess computed.

        Another issue affecting the scale is that scaleAfterViewportWidthChange was computing the widthToKeepInView
        on floating point. Since ARM64 does all those computations on doubles in the UIProcess, the value would be quite
        different from the received targetScale.

        Finally, the code uses withinEpsilon() instead of a strict equality to reduce the effect of rounding errors.

        For the second issue, the problem was that I was bounding the exposed rect to the page bounds. It is completely
        valid to have an exposed rect outside the page bounds, that area is just under the obscured insets.

        On the other hand, the unobscured rect needs to be within the bounds as we do not want to rotate to a rubberbanding
        position. The fix is simply to put the right rect into bounds, and the horizontal/vertical adjustement applies on
        both rects.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::scaleAfterViewportWidthChange):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::updateVisibleContentRects):

2014-07-03  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/mac/WebPageProxyMac.mm:

2014-07-03  Anders Carlsson  <andersca@apple.com>

        Get rid of WebPageProxyCF.cpp
        https://bugs.webkit.org/show_bug.cgi?id=134609

        Reviewed by Dan Bernstein.

        * UIProcess/cf/WebPageProxyCF.cpp: Removed.
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::autosaveKey):
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):
        * WebKit2.xcodeproj/project.pbxproj:

2014-07-03  Tim Horton  <timothy_horton@apple.com>

        [WK2] Revise the flat find indicator secondary highlight shadows
        https://bugs.webkit.org/show_bug.cgi?id=134607
        <rdar://problem/17554828>

        Reviewed by Brady Eidson.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::drawRect):
        Bring back the secondary highlight shadow, with new constants.

2014-07-03  Tim Horton  <timothy_horton@apple.com>

        [iOS][WK2] Sometimes the swipe snapshot stays up too long
        https://bugs.webkit.org/show_bug.cgi?id=134506
        <rdar://problem/17496803>

        Reviewed by Simon Fraser.

        Implement a transaction callback mechanism.
        The UI process can register a callback at any point, generally immediately after sending a message to the Web process.
        It will then send another message (in-order) with the callback ID to the Web process, which will put it into the next transaction
        (scheduling a new one if needed). When the transaction comes back to the UI process, the callbacks are performed.
        This ensures that the callback fires alongside a commit that includes the results of whatever messages were sent before it was registered.
        For now, all callbacks are fired just before committing layer changes, but it's possible future patches will want post-commit callbacks.
        
        Make use of this to remove the ViewGestureControllerIOS snapshots at the right time.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::callbackIDs):
        (WebKit::RemoteLayerTreeTransaction::setCallbackIDs):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        Add a vector of callback IDs to the transaction; encode and decode as appropriate.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::dispatchAfterEnsuringDrawing):
        (WebKit::DrawingAreaProxy::lastVisibleTransactionID): Deleted.
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing):
        Add dispatchAfterEnsuringDrawing, which takes a function.
        When a callback is added, we send the callback ID to the Web process via the AddTransactionCallbackID message.
        Perform callbacks listed in the incoming transaction's vector of callback IDs.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::addTransactionCallbackID):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::addTransactionCallbackID):
        Keep track of the pending callback IDs on the drawing area, and move them into the transaction.
        We schedule a flush when installing a transaction callback on the premise that
        sometimes the action (goToBackForwardListItem in the swipe case) might have already occurred
        and been committed by the time the Web process receives AddTransactionCallbackID, so we need
        to cause another commit to send the callbacks across. If said commit is still pending, this is a no-op.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (allViewGestureControllers):
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::willCommitPostSwipeTransitionLayerTree):
        (WebKit::ViewGestureController::setRenderTreeSize):
        * UIProcess/mac/ViewGestureController.h:
        Keep a side-map of page IDs to ViewGestureControllers, so that we can safely get back to
        our ViewGestureController from the callback.

        When the callback fires, if it succeeded, set m_shouldRemoveSnapshotWhenTargetRenderTreeSizeHit,
        so that the commit (which is about to occur immediately after the callback returns) which calls
        setRenderTreeSize will (perhaps) remove the snapshot.

        If it failed, we remove the snapshot immediately, as this usually happens if the Web process crashed.

2014-07-03  Brady Eidson  <beidson@apple.com>

        Followup to "rects sent to ServicesOverlayController are wrong"
        https://bugs.webkit.org/show_bug.cgi?id=134568

        Rubberstamped by Tim Horton.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::drawSelectionHighlight): Don’t check to see if the
          proposed rect intersects the dirty rect. We always need to include all rects that form
          the selection when creating the DDHighlight.

2014-07-03  Tim Horton  <timothy_horton@apple.com>

        [WK2] RemoteLayerTreeDrawingAreaProxy re-checks a preference every commit for no reason
        https://bugs.webkit.org/show_bug.cgi?id=134586

        Reviewed by Benjamin Poulain.

        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::setShouldShowDebugIndicator):
        (WebKit::DrawingAreaProxy::showDebugIndicator): Deleted.
        (WebKit::DrawingAreaProxy::isShowingDebugIndicator): Remove this, nobody is using it.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::preferencesDidChange):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::setShouldShowDebugIndicator):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator): Deleted.
        Check the debug indicator pref at construction time, and update the state when it changes.
        Checking it every commit was surprisingly expensive.

2014-07-03  Antti Koivisto  <antti@apple.com>

        Ensure frame creation messages get through to UI process
        https://bugs.webkit.org/show_bug.cgi?id=134591
        <rdar://problem/16918218>

        Reviewed by Anders Carlsson.

        If we are middle of handling a synchronous message from UI process a frame creation message back gets delayed.
        The subsequent synchronous DecidePolicyForNavigationAction message expects that the frame creation
        message has arrived first and fails.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::createWithCoreMainFrame):
        (WebKit::WebFrame::createSubframe):
        
            Send messages with DispatchMessageEvenWhenWaitingForSyncReply so they always go through in order.

2014-07-03  Anders Carlsson  <andersca@apple.com>

        Get rid of DecoderAdapter and EncoderAdapter
        https://bugs.webkit.org/show_bug.cgi?id=134598

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DecoderAdapter.cpp: Removed.
        * WebProcess/WebPage/DecoderAdapter.h: Removed.
        * WebProcess/WebPage/EncoderAdapter.cpp: Removed.
        * WebProcess/WebPage/EncoderAdapter.h: Removed.
        * WebProcess/WebPage/WebPage.cpp:

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

        Stop using EncoderAdapter/DecoderAdapter for FormData
        https://bugs.webkit.org/show_bug.cgi?id=134571

        Reviewed by Andreas Kling.

        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):
        (WebKit::NetworkResourceLoadParameters::decode):

2014-07-03  Brady Eidson  <beidson@apple.com>

        Selection rects sent to ServicesOverlayController are wrong.
        <rdar://problem/16727796> and https://bugs.webkit.org/show_bug.cgi?id=134568

        Reviewed by Darin Adler (and Tim Horton and Ryosuke Niwa).

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectionRectsDidChange): Also pass the GapRects to the ServicesOverlayController.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

        * WebProcess/WebPage/ServicesOverlayController.h:
        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::expandForGap):
        (WebKit::compactRectsWithGapRects): Combine 3+ rects down to exactly 3 rects, then expand them based on GapRects.
        (WebKit::ServicesOverlayController::selectionRectsDidChange): Call compactRectsWithGapRects, then reverse the list.
        (WebKit::ServicesOverlayController::drawSelectionHighlight): Tell data detectors to flip this.
        (WebKit::ServicesOverlayController::drawTelephoneNumberHighlight): Tell data detectors to flip this.
        (WebKit::ServicesOverlayController::drawCurrentHighlight): No need to flip this anymore.

2014-07-03  Brady Eidson  <beidson@apple.com>

        Possible crash in IconDatabase in WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread
        <rdar://problem/17437687> and https://bugs.webkit.org/show_bug.cgi?id=134517

        Reviewed by Eric Carlson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext): Instead of directly deref’ing the WebIconDatabase, ask it to
          deref itself when appropriate.

        * UIProcess/WebIconDatabase.cpp:
        (WebKit::WebIconDatabase::WebIconDatabase):
        (WebKit::WebIconDatabase::didClose): If this WebIconDatabase is supposed to deref itself when
          appropriate, do so now.
        (WebKit::WebIconDatabase::derefWhenAppropriate): If the WebCore::IconDatabase is still open then
          defer this deref.
        * UIProcess/WebIconDatabase.h:

2014-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r170676): [GTK] UI process crashes when the Web Process crashes
        https://bugs.webkit.org/show_bug.cgi?id=134541

        Reviewed by Gyuyoung Kim.

        It happens when attaching a new web process, because it tries to
        encode a null SessionState.

        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::encodeLegacySessionState): Return an empty API::Data
        object instead of nullptr.
        (WebKit::encodeLegacySessionHistoryEntryData): Ditto.

2014-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r170743): [GTK] [EFL] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=134585

        Reviewed by Philippe Normand.

        Add ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC) guards where needed.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::initializePlugin):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):

2014-07-02  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Make is safe/fast to use the animated resize API without resizing anything
        https://bugs.webkit.org/show_bug.cgi?id=134570

        Reviewed by Enrica Casucci.

        Today, if someone calls _beginAnimatedResizeWithUpdates-_endAnimatedResize, it is always a very heavy process
        forcing a relayout and can cause synchronous operations.

        We should not force the caller of the API to maintain their own state tracking, we should do that for them.

        With this patch, we track everything we need for a resize and only do the heavy lifting if anything has actually changed.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (activeMinimumLayoutSize):
        (activeMinimumLayoutSizeForMinimalUI):
        (activeMaximumUnobscuredSize):
        (activeOrientation):
        This code is used in both _didRelaunchProcess and _beginAnimatedResizeWithUpdates. It is moved to static functions
        to avoid having it in two places.

        (-[WKWebView _didRelaunchProcess]):

        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        The updates now goes like this:
        1) Set _isAnimatingResize to prevent the undesired side effects updateBlock() if we really need to resize.
        2) Get all the original values before calling the update block.
        3) Call the update block.
        4a) If nothing useful for resize has changed, reset _isAnimatingResize to false.
            We also need to update the visible content rect because the update block may have changed something unrelated
            to the view size (scale, scroll position, etc).
        4b) If we really need to resize, proceed as usual.

        (-[WKWebView _endAnimatedResize]):
        With the changes in _beginAnimatedResizeWithUpdates:, _isAnimatingResize is only set for real cases of animated resize,
        bail out early if that flag isn't set.

        The remaining code is unchanged, it is just not indented due to the removal of the if() branch.

2014-07-02  Roger Fong  <roger_fong@apple.com>

        Improve handling of primary offscreen plugins.
        https://bugs.webkit.org/show_bug.cgi?id=134528.
        <rdar://problem/17471864>

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PluginView.cpp: 
        Determine whether or not the plugin starts offscreen when the plugin is initialized.
        (WebKit::PluginView::initializePlugin):
        (WebKit::PluginView::pluginSnapshotTimerFired):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::createPlugin):
        Use the PluginProcessTypeNormal for offscreen plugins that are potentially primary plugins.

2014-07-02  Enrica Casucci  <enrica@apple.com>

        REGRESSION(WK2): Undo does not work in text fields in Safari.
        https://bugs.webkit.org/show_bug.cgi?id=134572
        <rdar://problem/17542238>

        Reviewed by Benjamin Poulain.
        
        This patch adds for iOS the same implementation we have already for OS X.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (-[WKEditCommandObjC initWithWebEditCommandProxy:]):
        (-[WKEditCommandObjC command]):
        (-[WKEditorUndoTargetObjC undoEditing:]):
        (-[WKEditorUndoTargetObjC redoEditing:]):
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::registerEditCommand):
        (WebKit::PageClientImpl::clearAllEditCommands):
        (WebKit::PageClientImpl::canUndoRedo):
        (WebKit::PageClientImpl::executeUndoRedo):

2014-07-02  Gavin Barraclough  <baraclough@apple.com>

        ProcessAssertion should also prevent UIApp suspension
        https://bugs.webkit.org/show_bug.cgi?id=134563

        Reviewed by Dan Bernstein.

        If the application suspends then the child processes will, too.
        Use beginBackgroundTaskWithName:expirationHandler: to request that the application remain runnable
        while waiting for background tasks to complete.

        * UIProcess/ProcessAssertion.cpp:
        (WebKit::ProcessAssertion::~ProcessAssertion):
            - Added destructor.
        * UIProcess/ProcessAssertion.h:
            - Added destructor.
        * UIProcess/ios/ProcessAssertionIOS.mm:
        (+[WKProcessAssertionBackgroundTaskManager shared]):
            - singleton WKProcessAssertionBackgroundTaskManager.
        (-[WKProcessAssertionBackgroundTaskManager init]):
        (-[WKProcessAssertionBackgroundTaskManager dealloc]):
            - register/remove notification handlers.
        (-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
            - if we need to be runnable make sure we're holding a BackgroundTask, if not release it.
        (-[WKProcessAssertionBackgroundTaskManager _applicationDidEnterBackgroundOrWillEnterForeground:]):
            - detect when the app enters/leaves foreground; calls to _updateBackgroundTask.
        (-[WKProcessAssertionBackgroundTaskManager incrementNeedsToRunInBackgroundCount]):
        (-[WKProcessAssertionBackgroundTaskManager decrementNeedsToRunInBackgroundCount]):
            - interface to update the count; calls to _updateBackgroundTask.
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::~ProcessAssertion):
            - count ProcessAssertions in and out of existance.
        (WebKit::ProcessAssertion::setState):
            - count when the state changes.

2014-07-01  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/134522> Remove duplication in code that prepares the user agent string on Mac and iOS

        Reviewed by Simon Fraser.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::webKitBundleVersionString): Return the entire CFBundleVersion now that WebCore handles formatting it.
        (WebKit::WebPageProxy::standardUserAgent):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::webKitBundleVersionString): Ditto.
        (WebKit::WebPageProxy::standardUserAgent):

2014-06-28  Oliver Hunt  <oliver@apple.com>

       Restrict network process sandbox
       https://bugs.webkit.org/show_bug.cgi?id=134360

       Reviewed by Sam Weinig.

       Add more restrictions to the network process sandbox.

       * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
       (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
         Always use the cache directory provided in the initialization parameters,
         and make sure we consume the cookie directory extension.
       * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
         Make the sandbox profile much more restrictive.
       * Shared/Network/NetworkProcessCreationParameters.cpp:
       (WebKit::NetworkProcessCreationParameters::encode):
       (WebKit::NetworkProcessCreationParameters::decode):
       * Shared/Network/NetworkProcessCreationParameters.h:
         The network process now requires an extension to access
         its cookie storage.
       * Shared/mac/SandboxUtilities.cpp:
       (WebKit::pathForProcessContainer):
       * Shared/mac/SandboxUtilities.h:
         We need to be able to get hold of our container so
         that we can get the correct cookie storage directory.
       * UIProcess/WebContext.cpp:
       (WebKit::WebContext::ensureNetworkProcess):
         We have to pass in the an extension for the cookie storage directory when
       initalising the network process
       * UIProcess/mac/WebContextMac.mm:
       (WebKit::WebContext::platformDefaultCookieStorageDirectory):
         Make sure we provide the correct location on IOS
       * WebProcess/cocoa/WebProcessCocoa.mm:
       (WebKit::WebProcess::platformInitializeWebProcess):
         Consume the cookie storage extension

2014-07-02  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r170725.

        * CMakeLists.txt: Removed Shared/LegacySessionState.cpp.

2014-07-02  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r170719 for !CF platforms.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sessionStateData): Deleted.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Deleted.

2014-07-02  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/134521> iOS should use shared code to determine the system marketing version

        Reviewed by Simon Fraser.

        * Shared/ios/ChildProcessIOS.mm: Update #import.
        * Shared/mac/ChildProcessMac.mm: Ditto.

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

        Rip out more dead code
        https://bugs.webkit.org/show_bug.cgi?id=134562

        Reviewed by Andreas Kling.

        * Shared/LegacySessionState.cpp: Removed.
        * Shared/LegacySessionState.h: Removed.
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem): Deleted.
        (WebKit::WebBackForwardListItem::backForwardData): Deleted.
        (WebKit::WebBackForwardListItem::setBackForwardData): Deleted.
        (WebKit::WebBackForwardListItem::encode): Deleted.
        (WebKit::WebBackForwardListItem::decode): Deleted.
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::create): Deleted.
        (WebKit::WebBackForwardListItem::setOriginalURL): Deleted.
        (WebKit::WebBackForwardListItem::setURL): Deleted.
        (WebKit::WebBackForwardListItem::setTitle): Deleted.
        * UIProcess/WebPageProxy.cpp:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:

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

        RestoreSession should take a vector of BackForwardListItemStates
        https://bugs.webkit.org/show_bug.cgi?id=134558

        Reviewed by Tim Horton.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        (headers_for_type):
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::itemStates):
        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::restoreSession):
        (WebKit::WebPage::restoreSessionAndNavigateToCurrentItem): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Store the back forward list item id inside BackForwardListItemState
        https://bugs.webkit.org/show_bug.cgi?id=134557

        Reviewed by Tim Horton.

        * Shared/SessionState.cpp:
        (WebKit::BackForwardListItemState::encode):
        (WebKit::BackForwardListItemState::decode):
        * Shared/SessionState.h:
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::encode):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::itemID):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):

2014-07-02  Manuel Rego Casasnovas  <rego@igalia.com>

        Unreviewed. EFL and GTK build fix after r170716.

        * UIProcess/LegacySessionStateCodingNone.cpp:
        (WebKit::decodeLegacySessionState): Update method signature.

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

        Begin ripping out the old session state code
        https://bugs.webkit.org/show_bug.cgi?id=134556

        Reviewed by Andreas Kling.

        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/cf/WebBackForwardListCF.cpp: Removed.
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData): Deleted.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

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

        Use legacy state coding directly in WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=134553

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRestoreFromSessionState):
        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCreateFromData):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _sessionStateData]):
        (-[WKWebView _sessionState]):
        (-[WKWebView _restoreFromSessionStateData:]):
        (-[WKWebView _restoreFromSessionState:]):
        (releaseNSData): Deleted.
        * UIProcess/LegacySessionStateCoding.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreFromSessionState):
        (WebKit::WebPageProxy::restoreFromState): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeLegacySessionState):

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

        Add -[WKWebView _sessionStateData] and -[WKWebView _restoreFromSessionStateData:]
        https://bugs.webkit.org/show_bug.cgi?id=134549

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _sessionState]):
        (-[WKWebView _sessionStateData]):
        (-[WKWebView _restoreFromSessionState:]):
        (-[WKWebView _restoreFromSessionStateData:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitVersion.h should be shared between UI and Web Process APIs
        https://bugs.webkit.org/show_bug.cgi?id=134538

        Reviewed by Martin Robinson.

        To be able to check current version from web extensions too.

        * UIProcess/API/gtk/WebKitVersion.h.in: Allow to include WebKitVersion.h also from webkit-web-extension.h.
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h: Include WebKitVersion.h.

2014-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebView::create should receive information about the navigation action
        https://bugs.webkit.org/show_bug.cgi?id=133680

        Reviewed by Martin Robinson.

        Add WebKitNavigationAction boxed type representing a navigation
        action to be passed as parameter of WebKitWebView::create
        signal. In the future it could be also for the
        WebKitNavigationPolicyDecision class. The class contains
        information about a navigation action like the navigation type,
        the request, the mouse button and key modifiers and whether it was
        started by a user gesture. This information is needed to be able
        to implement a proper popup blocker. Since all that information is
        not provided by the C API, we have switched the UI client to use a
        custom client derived from API::UIClient. This also avoids a lot
        of toAPI -> toImpl unneeded conversions.

        * PlatformGTK.cmake: Add new files to compilation.
        * UIProcess/API/gtk/WebKitHitTestResult.cpp:
        (webkitHitTestResultCreate): Use a WebHitTestResult::Data const
        reference instead of a pointer to a WebHitTestResult.
        (webkitHitTestResultCompare): Ditto.
        * UIProcess/API/gtk/WebKitHitTestResultPrivate.h:
        * UIProcess/API/gtk/WebKitNavigationAction.cpp: Added.
        (webkitNavigationActionCreate): Create a WebKitNavigationAction
        for the given ResourceRequest and NavigationActionData.
        (webkit_navigation_action_copy):
        (webkit_navigation_action_free):
        (webkit_navigation_action_get_navigation_type):
        (webkit_navigation_action_get_mouse_button):
        (webkit_navigation_action_get_modifiers):
        (webkit_navigation_action_get_request):
        (webkit_navigation_action_is_user_gesture):
        * UIProcess/API/gtk/WebKitNavigationAction.h: Added.
        * UIProcess/API/gtk/WebKitNavigationActionPrivate.h: Added.
        * UIProcess/API/gtk/WebKitNavigationPolicyDecision.h:
        * UIProcess/API/gtk/WebKitPrivate.cpp:
        (toGdkModifiers):
        (toWebKitNavigationType):
        (toWebKitMouseButton):
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/API/gtk/WebKitUIClient.cpp:
        (UIClient::UIClient): Implement the UIClient using a custom class.
        (attachUIClientToView): Set the UIClient directly to the WebPageProxy.
        (createNewPage): Deleted.
        (showPage): Deleted.
        (closePage): Deleted.
        (runJavaScriptAlert): Deleted.
        (runJavaScriptConfirm): Deleted.
        (runJavaScriptPrompt): Deleted.
        (toolbarsAreVisible): Deleted.
        (setToolbarsAreVisible): Deleted.
        (menuBarIsVisible): Deleted.
        (setMenuBarIsVisible): Deleted.
        (statusBarIsVisible): Deleted.
        (setStatusBarIsVisible): Deleted.
        (isResizable): Deleted.
        (setIsResizable): Deleted.
        (getWindowFrame): Deleted.
        (setWindowFrame): Deleted.
        (mouseDidMoveOverElement): Deleted.
        (printFrame): Deleted.
        (runOpenPanel): Deleted.
        (decidePolicyForGeolocationPermissionRequest): Deleted.
        (runModal): Deleted.
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewCreate): Add WebKitNavigationAction parameter.
        (webkit_web_view_class_init): Add WebKitNavigationAction paramter
        to CREATE signal.
        (webkitWebViewCreateNewPage): Add WebKitNavigationAction parameter
        and pass it to the signal callbacks.
        (webkitWebViewMouseTargetChanged): Use a WebHitTestResult::Data
        const reference.
        (webkitWebViewPopulateContextMenu): Ditto.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
        * UIProcess/API/gtk/WebKitWindowProperties.cpp:
        (webkitWindowPropertiesUpdateFromWebWindowFeatures): Use a
        WebCore::WindowFeatures const reference.
        * UIProcess/API/gtk/WebKitWindowPropertiesPrivate.h:
        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section.
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols.
        * UIProcess/API/gtk/webkit2.h: Include WebKitNavigationAction.h.

2014-07-01  KwangHyuk Kim  <hyuki.kim@samsung.com>

        [EFL] Fix occurrence of two cursors on WK2 EFL.
        https://bugs.webkit.org/show_bug.cgi?id=134436

        Reviewed by Anders Carlsson.

        ecore_x_window_cursor is released when ecore_evas_object_cursor should be shown in order to avoid occurrence of two cursors.

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

2014-07-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break on EFL and GTK ports since r170683
        https://bugs.webkit.org/show_bug.cgi?id=134536

        Unreviewed, build fix.

        * CMakeLists.txt:

2014-07-01  Dean Jackson  <dino@apple.com>

        Make LogsPageMessagesToSystemConsoleEnabled a global debug preference
        https://bugs.webkit.org/show_bug.cgi?id=134534

        Reviewed by Joseph Pecoraro.

        * Shared/WebPreferencesDefinitions.h:

2014-07-01  Tim Horton  <timothy_horton@apple.com>

        Handle invalid data more gracefully.

        Reviewed by Anders Carlsson.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeFormData):
        (WebKit::decodeBackForwardTreeNode):

2014-07-01  Mark Rowe  <mrowe@apple.com>

        Add a missing return statement in WKPageCopySessionState.

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Don't encode/decode the snapshot UUID
        https://bugs.webkit.org/show_bug.cgi?id=134532

        Reviewed by Sam Weinig.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistory):
        (WebKit::decodeSessionHistoryEntry):

2014-07-01  Commit Queue  <commit-queue@webkit.org>

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

        Safari keeps crashing on device due to sandbox violation.
        (Requested by enrica on #webkit).

        Reverted changeset:

        "Restrict network process sandbox"
        https://bugs.webkit.org/show_bug.cgi?id=134360
        http://trac.webkit.org/changeset/170608

2014-07-01  Pratik Solanki  <psolanki@apple.com>

        Encode/decode CFURLRequestRefs when USE(CFNETWORK) is enabled
        https://bugs.webkit.org/show_bug.cgi?id=134454
        <rdar://problem/17510980>

        Reviewed by Andreas Kling.

        Use new helper methods to serialize/deserialize CFURLRequestRef directly so we can avoid
        creating NSURLRequest.

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

2014-07-01  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Fix a race between the short tap and long tap highlight
        https://bugs.webkit.org/show_bug.cgi?id=134530

        Reviewed by Enrica Casucci.

        There was a potential race of event that can theoretically cause WKContentViewInteraction
        to call [WKContentView _showTapHighlight] after all interactions have been cancelled.

        The race would be like this:
        1) On a short tap, _singleTapRecognized: is called, a tap highlight ID is defined and
           _potentialTapInProgress is set to YES.
        2) For some reason, the gesture is cancelled. The method _singleTapDidReset is called, 
           setting _potentialTapInProgress but leaving the tap highlight ID as valid.
        3) The UIProcess receives the tap highlight information from the WebProcess, _didGetTapHighlightForRequest:
           has a valid ID, _potentialTapInProgress is false -> the highlight is shown right away as if a long tap
           was in progress.

        The missing piece that causes this is _singleTapDidReset: must also invalidate the tap highlight ID. This is done
        in the new static function cancelPotentialTapIfNecessary().

        Just invalidating the ID would create another race:
        1) Short tap gesture recognizer starts.
        2) The long press recognizer starts before (1) is commited.
        3) The long press recognizers sets up its own tap highlight ID.
        4) The short tap gesture recognizer resets, erasing the tap highlight ID defined in (3).

        To avoid this, the long press gesture recognizers immediately cancels any potential tap in progress.
        If _singleTapDidReset: is called before (3), this does nothing. If the reset is called after (3),
        _singleTapDidReset does nothing.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _highlightLongPressRecognized:]):
        (cancelPotentialTapIfNecessary):
        (-[WKContentView _singleTapDidReset:]):

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Add ABI hacks to allow WKPageRef to use WKSessionStateRef
        https://bugs.webkit.org/show_bug.cgi?id=134529

        Reviewed by Sam Weinig.

        * UIProcess/API/APISessionState.h:
        Add a sessionState() getter.
        
        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        Add a hack where we return a WKSessionStateRef if the least significant bit of the context pointer
        is 1, and a WKDataRef otherwise.

        (WKPageRestoreFromSessionState):
        Handle both WKDataRef and WKSessionStateref.

        * UIProcess/API/C/WKPage.h:
        Use WKTypeRefs for state saving and restoration.

        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCopyData):
        Add helper function.

2014-07-01  Anders Carlsson  <andersca@apple.com>

        WKPageRestoreFromSessionState should use the new session state restore code path
        https://bugs.webkit.org/show_bug.cgi?id=134526

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRestoreFromSessionState):
        Use the new code path.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreFromState):
        Only restore the back-forward state if we have a back-forward list.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistory):
        Save the original URL string as well.

        (WebKit::decodeV1SessionHistory):
        If we don't have a current index, set it to Nullopt instead of 0.

2014-07-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed. EFL and GTK build fix since r170654.

        * UIProcess/LegacySessionStateCodingNone.cpp: Add a dummy encodeLegacySessionState(const SessionState&).
        (WebKit::encodeLegacySessionState):

2014-07-01  Dan Bernstein  <mitz@apple.com>

        Crash in WebDocumentLoader::setNavigationID
        https://bugs.webkit.org/show_bug.cgi?id=134520

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision): Null-check the policy document loader.

2014-07-01  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didDestroyNavigation):

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Use the new legacy session state coding in WKPageCopySessionState
        https://bugs.webkit.org/show_bug.cgi?id=134516

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        Call encodeLegacySessionState.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistoryEntryData):
        Use leakPtr() so we won't attempt to double-free the buffer.

        (WebKit::createDictionary):
        Fix a typo.

        (WebKit::encodeLegacySessionState):
        Don't encode the provisional URL if it's empty.

2014-07-01  Chris Fleizach  <cfleizach@apple.com>

        AX: [iOS WebKit2] Support for Speak selection
        https://bugs.webkit.org/show_bug.cgi?id=134512

        Reviewed by Darin Adler.

        Implement a method that Speak Selection can use to retrieve the selected content.

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

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Update the highest back-forward list item ID in the other WebBackForwardListItem constructor
        https://bugs.webkit.org/show_bug.cgi?id=134515

        Reviewed by Tim Horton.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):

2014-07-01  Brady Eidson  <beidson@apple.com>

        Fix ServicesOverlayController teardown
        <rdar://problem/17523998> and https://bugs.webkit.org/show_bug.cgi?id=134510

        Reviewed by Mark Rowe.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm:
        (WebKit::ServicesOverlayController::~ServicesOverlayController): Flipped logic on null-checking the overlay.

2014-07-01  Sam Weinig  <sam@webkit.org>

        [Cocoa][Mac] WKWebView should automatically set topContentInset when beneath a toolbar
        <rdar://problem/17523159>
        https://bugs.webkit.org/show_bug.cgi?id=134496

        Reviewed by Beth Dakin.

        - Adds _automaticallyAdjustsContentInsets SPI to both WKView and WKWebView.
        - Defaults _automaticallyAdjustsContentInsets to NO for WKView to keep legacy clients working.
        - Defaults _automaticallyAdjustsContentInsets to YES for WKWebView.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Add _automaticallyAdjustsContentInsets SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Default _automaticallyAdjustsContentInsets to YES for WKWebView.

        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        Change to forward to the WKView, since we now do coalescing and caching there.

        (-[WKWebView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKWebView _automaticallyAdjustsContentInsets]):
        Forward to the WKView.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Add _automaticallyAdjustsContentInsets SPI.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView renewGState]):
        Ensure the contentInset is updated when the view changes, as its relative location to the toolbar may have changed.

        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView observeValueForKeyPath:ofObject:change:context:]):
        Add observers for the contentLayoutRect and titlebarAppearsTransparent properties on the window. If either of them
        change, we need to recalculate the content inset.

        (-[WKView _updateContentInsetsIfAutomatic]):
        If _automaticallyAdjustsContentInsets is YES, follow the same rules as AppKit in setting the top content inset. Like
        AppKit this is only done when:
            - The window's style mask has the NSFullSizeContentViewWindowMask bit.
            - The window does not have titlebarAppearsTransparent set.
            - And we are not in an enclosing NSScrollView.

        (-[WKView _setTopContentInset:]):
        (-[WKView _topContentInset]):
        Coalesce setting the topContentInset to avoid a visual lag when resizing the window that was caused by us sending
        multiple topContentInsets to the WebContentProcess per runloop cycle. The reason for the lag was that at the time
        we observe the contentLayoutRect changing, our view may not yet be in its final position yet, so the inset will be
        temporarily wrong. When the view is finally positioned correctly, we will get a renewGState, at which point we will
        again calculate the inset, which now will be correct. Since these both happen in the same runloop iteration, we can
        just defer sending the inset to the WebContentProcess.

        (-[WKView _setAutomaticallyAdjustsContentInsets:]):
        (-[WKView _automaticallyAdjustsContentInsets]):
        Add the new SPI.

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Add a function for restoring page state given a SessionState object
        https://bugs.webkit.org/show_bug.cgi?id=134509

        Reviewed by Tim Horton.

        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::itemState):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::saveState):
        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::saveState):
        * UIProcess/WebPageProxy.h:

2014-07-01  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Navigation parameter in navigation delegate messages is nil for navigations started by the Web Content process
        https://bugs.webkit.org/show_bug.cgi?id=134482

        Reviewed by Tim Horton.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didDestroyNavigation): New client function, called when a navigation ID
        is not going to be used anymore.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _restoreFromSessionState:]): If restoring triggered a navigation, create a
        WKNavigation for its ID.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createLoadRequestNavigation): Removed FIXME, because we now remove
        navigations from the map in LoaderClient::didDestroyNavigation.
        (WebKit::NavigationState::createBackForwardNavigation): Ditto.
        (WebKit::NavigationState::createReloadNavigation): Ditto.
        (WebKit::NavigationState::createLoadDataNavigation): Ditto.
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): If we are only
        getting a navigation ID now, create a WKNavigation for it. Also changed to create the
        NSURLRequest lazily.
        (WebKit::NavigationState::LoaderClient::didStartProvisionalLoadForFrame): Assert that
        navigationID is not zero and that it maps to an existing WKNavigation.
        (WebKit::NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        Ditto.
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didCommitLoadForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame): Ditto.
        (WebKit::NavigationState::LoaderClient::didDestroyNavigation): Override the new client
        function to remove the navigation from the map.
        (WebKit::NavigationState::LoaderClient::processDidCrash): Clear the navigations map.

        * UIProcess/WebFrameListenerProxy.cpp:
        (WebKit::WebFrameListenerProxy::WebFrameListenerProxy): Initialize new m_navigationID
        member variable.
        (WebKit::WebFrameListenerProxy::receivedPolicyDecision): Pass the navigation ID to
        WebFrame::receivedPolicyDecision.
        * UIProcess/WebFrameListenerProxy.h:
        (WebKit::WebFrameListenerProxy::navigationID): Added this accessor.
        (WebKit::WebFrameListenerProxy::setNavigationID): Ditto.

        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::receivedPolicyDecision): Added navigationID parameter, which is
        passed along to the WebPageProxy.
        * UIProcess/WebFrameProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision): Added navigationID parameter, which is
        passed along in the message to the Web Content process.
        (WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID of 0.
        (WebKit::WebPageProxy::restoreFromState): Changed to return a navigation ID if one was
        started.
        (WebKit::WebPageProxy::didDestroyNavigation): Added. Calls the new client function.
        (WebKit::WebPageProxy::decidePolicyForNavigationAction): Added navigationID and
        newNavigationID parameters. If a main-frame navigation doesn’t already have an ID, assign it
        a new ID and return it in the newNavigationID parmeter as well as setting it on the listener
        for the asynchronous case.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Added navigationID and newNavigationID parameters.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData): Changed to return a navigation ID if
        one was started.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): Updated for additional
        parameter.
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Send the navigation
        ID to the UI process, get the new navigation ID from the reply, and set it on the document
        loader.

        * WebProcess/WebPage/WebDocumentLoader.cpp:
        (WebKit::WebDocumentLoader::detachFromFrame): Override to let the UI process know that the
        navigation ID will not be used anymore.
        * WebProcess/WebPage/WebDocumentLoader.h:

        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::didReceivePolicyDecision): Added navigationID parameter, set it on the
        document loader.
        (WebKit::WebFrame::documentLoaderDetached): Pass the message along to the UI process.
        * WebProcess/WebPage/WebFrame.h:

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didReceivePolicyDecision): Pass new navigationID parameter along.
        * WebProcess/WebPage/WebPage.h:

        * WebProcess/WebPage/WebPage.messages.in: Added navigationID parameter.

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebKit2.xcodeproj/project.pbxproj:

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Temporarily encode and decode the snapshot UUID
        https://bugs.webkit.org/show_bug.cgi?id=134507

        Reviewed by Tim Horton.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistory):
        (WebKit::decodeSessionHistoryEntry):
        (WebKit::decodeSessionHistoryEntries):

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Implement encodeSessionHistoryEntryData
        https://bugs.webkit.org/show_bug.cgi?id=134505

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        Add back a missing null check for the filter pointer.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistoryEntryData):

2014-07-01  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Bad spinner on news.google.com: animations need to be ordered
        https://bugs.webkit.org/show_bug.cgi?id=134504
        <rdar://problem/17507892>

        Reviewed by Tim Horton.
        
        The layer's addedAnimations property needs to maintain order, since the order
        in which transforms are applied is important.

        * Shared/mac/RemoteLayerTreeTransaction.h: Use a Vector<pair<>> for addedAnimations.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::updateLayerAnimations):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::addAnimationForKey): If this is a new entry, we
        can just append to addedAnimations, otherwise we have to find the existing one
        and update its properties.
        (WebKit::PlatformCALayerRemote::removeAnimationForKey): Do linear search to
        find the animation to remove (this list will normally be short).

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Add a encodeLegacySessionState function
        https://bugs.webkit.org/show_bug.cgi?id=134502

        Reviewed by Tim Horton.

        * UIProcess/LegacySessionStateCoding.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::encodeSessionHistoryEntryData):
        (WebKit::encodeLegacySessionHistoryEntryData):
        (WebKit::createDictionary):
        (WebKit::encodeSessionHistory):
        (WebKit::encodeLegacySessionState):

2014-07-01  Alexey Proskuryakov  <ap@apple.com>

        [Cocoa] WebProcess doesn't follow localization of UI process when run as a service
        https://bugs.webkit.org/show_bug.cgi?id=133126
        <rdar://problem/13396515>

        Patch by Alexey Proskuryakov.
        Reviewed by Tim Horton.

        * Configurations/WebContentService.Development.xcconfig:
        * Configurations/WebContentService.xcconfig:
        Figure out which of the two keys to use. CFBundleAllowMixedLocalizations was
        a workaround before we got CFBundleFollowParentLocalization, and these cannot be
        used together.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::connectToService): Set up
        XPC bootstrap for CFBundle to use.

        * WebKit2.xcodeproj/project.pbxproj: Added a script that applies the key to Info.plist.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-iOS.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:
        Removed CFBundleAllowMixedLocalizations, we now add it programmatically.

2014-07-01  Alex Christensen  <achristensen@webkit.org>

        [iOS] Unreviewed build fix after r170640.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectedTelephoneNumberRangesChanged):
        (WebKit::WebEditorClient::selectionRectsDidChange):
        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebPage/WebPage.h:
        Add ifdefs to make everything compile and link.

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Add WKSessionStateGetTypeID
        https://bugs.webkit.org/show_bug.cgi?id=134499

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateGetTypeID):
        * UIProcess/API/C/WKSessionStateRef.h:

2014-07-01  Daniel Bates  <dabates@apple.com>

        Remove unnecessary calls to std::move()
        https://bugs.webkit.org/show_bug.cgi?id=134493

        Reviewed by Anders Carlsson.

        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::Handle::tryWrapInCFData):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::certificateInfo): Return a WebCore::CertificateInfo instead
        of const WebCore::CertificateInfo& to avoid returning a dangling reference to
        a local variable. Also, remove the unnecessary calls to std::move() as the compiler
        will invoke the move constructor for WebCore::CertificateInfo on return from the
        function.
        * WebProcess/WebPage/WebFrame.h:

2014-07-01  Anders Carlsson  <andersca@apple.com>

        Add a BackForwardListItemState struct and put the snapshot UUID there
        https://bugs.webkit.org/show_bug.cgi?id=134497

        Reviewed by Sam Weinig.

        * Shared/SessionState.cpp:
        (WebKit::PageState::encode):
        (WebKit::PageState::decode):
        (WebKit::BackForwardListItemState::encode):
        (WebKit::BackForwardListItemState::decode):
        * Shared/SessionState.h:
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::backForwardData):
        (WebKit::WebBackForwardListItem::setBackForwardData):
        (WebKit::WebBackForwardListItem::encode):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::setPageState):
        (WebKit::WebBackForwardListItem::setOriginalURL):
        (WebKit::WebBackForwardListItem::originalURL):
        (WebKit::WebBackForwardListItem::setURL):
        (WebKit::WebBackForwardListItem::url):
        (WebKit::WebBackForwardListItem::setTitle):
        (WebKit::WebBackForwardListItem::title):
        (WebKit::WebBackForwardListItem::setSnapshotUUID):
        (WebKit::WebBackForwardListItem::snapshotUUID):
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeSessionHistoryEntries):

2014-07-01  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add encodeInteger and decodeInteger for remote object encoder and decoder.
        https://bugs.webkit.org/show_bug.cgi?id=134453

        In 64bit system, encodeInteger/decodeInteger is by default mapped into encodeInt64/decodeInt64.  For
        32bit system, they are mapped to encodeInt32/decodeInt32.  However, since we don't have encodeInt32/decodeInt32
        implementation in WKRemoteObjectCoder, we could hit crash in 32bit systems.

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (-[WKRemoteObjectEncoder encodeInteger:forKey:]): Instead of creating a new number type UInt32, use encodeInt64 for
            encoding NSInteger.
        (-[WKRemoteObjectDecoder decodeIntegerForKey:]):

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Use an std::function for filtering session state data
        https://bugs.webkit.org/show_bug.cgi?id=134481

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopySessionState):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _sessionState]):
        * UIProcess/WebBackForwardList.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::sessionStateData):
        * UIProcess/WebPageProxy.h:
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::sessionStateData):

2014-07-01  Rohit Kumar  <kumar.rohit@samsung.com>

        Clean up the WebKit build from unused parameter warning in Webkit2/UIProcess module
        https://bugs.webkit.org/show_bug.cgi?id=134294

        Reviewed by Darin Adler.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::reachedApplicationCacheOriginQuota):

2014-07-01  Brady Eidson  <beidson@apple.com>

        Followup for: Combine the Telephone and Selection overlay controllers, updating UI behavior.
        https://bugs.webkit.org/show_bug.cgi?id=134461

        Rubberstamped by Tim Horton.

        * WebProcess/WebPage/mac/ServicesOverlayController.mm: Include the correct constant.

2014-07-01  Brady Eidson  <beidson@apple.com>

        Build fix.

        Forgot to commit locally before pushing.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::servicesOverlayController): s/this/*this/

2014-07-01  Brady Eidson  <beidson@apple.com>

        Combine the Telephone and Selection overlay controllers, updating UI behavior.
        https://bugs.webkit.org/show_bug.cgi?id=134461

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectedTelephoneNumberRangesChanged):
        (WebKit::WebEditorClient::selectionRectsDidChange):

        Remove the separate Selection overlay controller:
        * WebProcess/WebPage/SelectionOverlayController.cpp: Removed.
        * WebProcess/WebPage/ServicesOverlayController.h: Renamed from Source/WebKit2/WebProcess/WebPage/SelectionOverlayController.h.
        (WebKit::ServicesOverlayController::create):
        * WebProcess/WebPage/mac/SelectionOverlayControllerMac.mm: Removed.

        Remove the separate TelephoneNumber overlay controller:
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: Removed.
        * WebProcess/WebPage/TelephoneNumberOverlayController.h: Removed.
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm: Removed.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::servicesOverlayController):
        (WebKit::WebPage::telephoneNumberOverlayController): Deleted.
        (WebKit::WebPage::selectionOverlayController): Deleted.
        (WebKit::WebPage::didChangeScrollOffsetForFrame): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::serviceControlsEnabled): Deleted.

        ServicesOverlayController is a combination of the old TelephoneNumber and Selection overlay controllers.
        A lot of code duplication is resolved, and things are generally easier to follow.
        It enforces displaying a telephone number highlight if precisely one telephone number is selected, or
        the selection highlight if the selection contains more than a single phone number
        * WebProcess/WebPage/mac/ServicesOverlayController.mm: Added.
        (WebKit::textQuadsToBoundingRectForRange):
        (WebKit::ServicesOverlayController::ServicesOverlayController):
        (WebKit::ServicesOverlayController::destroyOverlay):
        (WebKit::ServicesOverlayController::pageOverlayDestroyed):
        (WebKit::ServicesOverlayController::willMoveToWebPage):
        (WebKit::ServicesOverlayController::didMoveToWebPage):
        (WebKit::ServicesOverlayController::createOverlayIfNeeded):
        (WebKit::ServicesOverlayController::selectionRectsDidChange):
        (WebKit::ServicesOverlayController::selectedTelephoneNumberRangesChanged):
        (WebKit::ServicesOverlayController::clearHighlightState):
        (WebKit::ServicesOverlayController::drawRect):
        (WebKit::ServicesOverlayController::drawSelectionHighlight):
        (WebKit::ServicesOverlayController::drawTelephoneNumberHighlight):
        (WebKit::ServicesOverlayController::drawCurrentHighlight):
        (WebKit::ServicesOverlayController::mouseEvent):
        (WebKit::ServicesOverlayController::handleClick):

2014-07-01  Zan Dobersek  <zdobersek@igalia.com>

        [WK2] IPC messages' arguments() method returns const std::tuple<> copies
        https://bugs.webkit.org/show_bug.cgi?id=131975

        Reviewed by Darin Adler.

        The arguments() method of the different IPC message objects should return a const reference
        to the std::tuple<> containing the arguments, instead of a const value. This avoids copying
        the std::tuple<> every time the arguments are encoded, and works best with the
        ArgumentEncoder::encode<std::tuple<...>>(const std::tuple<...>&) template instantiation.

        The unit test baselines are updated accordingly.

        * Scripts/webkit2/LegacyMessages-expected.h:
        (Messages::WebPage::LoadURL::arguments):
        (Messages::WebPage::LoadSomething::arguments):
        (Messages::WebPage::TouchEvent::arguments):
        (Messages::WebPage::AddEvent::arguments):
        (Messages::WebPage::LoadSomethingElse::arguments):
        (Messages::WebPage::DidReceivePolicyDecision::arguments):
        (Messages::WebPage::Close::arguments):
        (Messages::WebPage::PreferencesDidChange::arguments):
        (Messages::WebPage::SendDoubleAndFloat::arguments):
        (Messages::WebPage::SendInts::arguments):
        (Messages::WebPage::CreatePlugin::arguments):
        (Messages::WebPage::RunJavaScriptAlert::arguments):
        (Messages::WebPage::GetPlugins::arguments):
        (Messages::WebPage::GetPluginProcessConnection::arguments):
        (Messages::WebPage::TestMultipleAttributes::arguments):
        (Messages::WebPage::TestParameterAttributes::arguments):
        (Messages::WebPage::TemplateTest::arguments):
        (Messages::WebPage::SetVideoLayerID::arguments):
        (Messages::WebPage::DidCreateWebProcessConnection::arguments):
        (Messages::WebPage::InterpretKeyEvent::arguments):
        (Messages::WebPage::DeprecatedOperation::arguments):
        (Messages::WebPage::ExperimentalOperation::arguments):
        * Scripts/webkit2/Messages-expected.h:
        (Messages::WebPage::LoadURL::arguments):
        (Messages::WebPage::LoadSomething::arguments):
        (Messages::WebPage::TouchEvent::arguments):
        (Messages::WebPage::AddEvent::arguments):
        (Messages::WebPage::LoadSomethingElse::arguments):
        (Messages::WebPage::DidReceivePolicyDecision::arguments):
        (Messages::WebPage::Close::arguments):
        (Messages::WebPage::PreferencesDidChange::arguments):
        (Messages::WebPage::SendDoubleAndFloat::arguments):
        (Messages::WebPage::SendInts::arguments):
        (Messages::WebPage::CreatePlugin::arguments):
        (Messages::WebPage::RunJavaScriptAlert::arguments):
        (Messages::WebPage::GetPlugins::arguments):
        (Messages::WebPage::GetPluginProcessConnection::arguments):
        (Messages::WebPage::TestMultipleAttributes::arguments):
        (Messages::WebPage::TestParameterAttributes::arguments):
        (Messages::WebPage::TemplateTest::arguments):
        (Messages::WebPage::SetVideoLayerID::arguments):
        (Messages::WebPage::DidCreateWebProcessConnection::arguments):
        (Messages::WebPage::InterpretKeyEvent::arguments):
        (Messages::WebPage::DeprecatedOperation::arguments):
        (Messages::WebPage::ExperimentalOperation::arguments):
        * Scripts/webkit2/MessagesSuperclass-expected.h:
        (Messages::WebPage::LoadURL::arguments):
        * Scripts/webkit2/messages.py:
        (message_to_struct_declaration):

2014-07-01  Evan Nemerson  <evan@nemerson.com>

        [GTK] Annotations for WebResource.get_data produce wrong signature in Vala binding
        https://bugs.webkit.org/show_bug.cgi?id=134476

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebResource.cpp: Add array length and
        element-type annotations to return value of webkit_web_resource_get_data_finish().

2014-07-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Can not convert ‘sessionState.WebKit::SessionState::provisionalURL’ from ‘WebCore::URL’ to ‘bool’
        https://bugs.webkit.org/show_bug.cgi?id=134487

        Rubber-stamped by Carlos Garcia Campos.

        * UIProcess/WebPageProxy.cpp: Use isNull().
        (WebKit::WebPageProxy::restoreFromState):

2014-07-01  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break on EFL and GTK ports since r170611 and r170614
        https://bugs.webkit.org/show_bug.cgi?id=134479

        Reviewed by Carlos Garcia Campos.

        Add LegacySessionStateCodingNone.cpp in order to fix build break on EFL and GTK ports. Additionally
        SessionStateConversion.cpp is added to CMakeLists.txt as well.

        * CMakeLists.txt:
        * UIProcess/LegacySessionStateCoding.h: Copied from Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.h.
        * UIProcess/LegacySessionStateCodingNone.cpp: Renamed from Source/WebKit2/UIProcess/mac/LegacySessionStateCoding.h.
        (WebKit::encodeLegacySessionHistoryEntryData):
        (WebKit::decodeLegacySessionState):
        (WebKit::decodeLegacySessionHistoryEntryData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadFile):
        (WebKit::WebPageProxy::restoreFromState):
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-30  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] The long press gesture recognizers should not block the pinch gesture
        https://bugs.webkit.org/show_bug.cgi?id=134477
        <rdar://problem/17514936>

        Reviewed by Tim Horton.

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

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Add WebPageProxy::restoreFromState
        https://bugs.webkit.org/show_bug.cgi?id=134480

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::restoreFromState):
        * UIProcess/WebPageProxy.h:

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Add a function to restore a WebBackForwardList object from a BackForwardListState object
        https://bugs.webkit.org/show_bug.cgi?id=134478

        Reviewed by Tim Horton.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::generateWebBackForwardItemID):
        (WebKit::WebBackForwardList::restoreFromState):
        * UIProcess/WebBackForwardList.h:
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::generateWebBackForwardItemID): Deleted.

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Change the AddBackForwardItem message to take a page state object
        https://bugs.webkit.org/show_bug.cgi?id=134475

        Reviewed by Andreas Kling.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        (headers_for_type):
        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::create):
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::setPageState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::addBackForwardItem):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::updateBackForwardItem):

2014-06-30  Tim Horton  <timothy_horton@apple.com>

        [WK2] Add a flatter find-in-page current match indicator style
        https://bugs.webkit.org/show_bug.cgi?id=134434
        <rdar://problem/16225673>

        Reviewed by Simon Fraser.

        * UIProcess/FindIndicator.cpp:
        (WebKit::findIndicatorsForTextRectsOverlap):
        (WebKit::FindIndicator::frameRect):
        (WebKit::flatHighlightColor):
        (WebKit::flatRimShadowColor):
        (WebKit::flatDropShadowColor):
        (WebKit::FindIndicator::draw):
        Add a flatter find indicator, with a bigger shadow.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::getFindIndicatorBitmapAndRect):
        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::drawRect):
        Don't paint a shadow behind the secondary matches if we're using the new style.

2014-06-30  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Improve double-tap-to-scroll on image documents
        https://bugs.webkit.org/show_bug.cgi?id=134474
        <rdar://problem/17496778>

        Reviewed by Enrica Casucci.

        On image document, we were always rendering the center of the image as the origin, which broke
        double tap to scroll.

        This patch improves on this in two ways:
        1) If the hit testing already got the image, only change the type to replaced (to get the right
           scaling behavior for images since the type is block on iOS's image document).
        2) If the hit testing is outside the image, only center the axis that is not in the image.
           This way, we "fix" the component that is not valid, and keep the vali component.
           This works great for viewing comics on iPad.

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

2014-06-30  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WK2): Weird selection behavior on autos.yahoo.com, en.wikipedia.org.
        https://bugs.webkit.org/show_bug.cgi?id=134466
        <rdar://problem/16817263>

        Reviewed by Benjamin Poulain.

        Avoid selecting blocks across frame boundaries and skip non-selectable
        blocks. If the only block we find is almost the same height as the
        visible area, we should not select at all.
        This patch also fixes the logic to compute the next block when
        shrinking the selection. When calculating the new range after shrinking,
        we should not include the block that corresponds to the current handle position.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::updateSelectionWithTouches):

2014-06-30  Anders Carlsson  <andersca@apple.com>

        WebBackForwardListItem should not store back-forward data
        https://bugs.webkit.org/show_bug.cgi?id=134469

        Reviewed by Darin Adler.

        Change WebBackForwardListItem::backForwardData to encode the main frame state lazily,
        and change WebBackForwardListItem::setBackForwardData to decode it into the main frame state.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::backForwardData):
        (WebKit::WebBackForwardListItem::setBackForwardData):
        (WebKit::WebBackForwardListItem::encode):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::backForwardData): Deleted.
        * UIProcess/cf/WebBackForwardListCF.cpp:
        (WebKit::WebBackForwardList::createCFDictionaryRepresentation):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSession):

2014-06-30  Anders Carlsson  <andersca@apple.com>

        WebBackForwardListItems should hold on to PageState objects
        https://bugs.webkit.org/show_bug.cgi?id=134467

        Reviewed by Darin Adler.

        * Shared/WebBackForwardListItem.cpp:
        (WebKit::WebBackForwardListItem::WebBackForwardListItem):
        (WebKit::WebBackForwardListItem::encode):
        * Shared/WebBackForwardListItem.h:
        (WebKit::WebBackForwardListItem::setOriginalURL):
        (WebKit::WebBackForwardListItem::originalURL):
        (WebKit::WebBackForwardListItem::setURL):
        (WebKit::WebBackForwardListItem::url):
        (WebKit::WebBackForwardListItem::setTitle):
        (WebKit::WebBackForwardListItem::title):

2014-06-30  Benjamin Poulain  <benjamin@webkit.org>

        Add a missing semicolon in WKContentViewInteraction

        * UIProcess/ios/WKContentViewInteraction.mm:
        (nsSizeForTapHighlightBorderRadius):
        I messed up this when fixing the patch on landing.

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Adopt the legacy session decoding inside WebPage::restoreSession for now
        https://bugs.webkit.org/show_bug.cgi?id=134465

        Reviewed by Sam Weinig.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeLegacySessionHistoryEntryData):
        * UIProcess/mac/LegacySessionStateCoding.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSession):

2014-06-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Don't crash on status bar tap with overflow scroll views
        https://bugs.webkit.org/show_bug.cgi?id=134459

        Reviewed by Tim Horton.
        
        The tiled scrolling indicator parents UIViews under CALayers, but that causes
        those views to miss -willMoveToWindow:nil notifications on teardown. This can leave
        deleted UIScrollViews in UIKit's "scroll to top" list.
        
        Fix by not making UIScrollViews in the debug layer tree host.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):

2014-06-28  Oliver Hunt  <oliver@apple.com>

       Restrict network process sandbox
       https://bugs.webkit.org/show_bug.cgi?id=134360

       Reviewed by Sam Weinig.

       Add more restrictions to the network process sandbox.

       * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
       (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
         Always use the cache directory provided in the initialization parameters,
         and make sure we consume the cookie directory extension.
       * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
         Make the sandbox profile much more restrictive.
       * Shared/Network/NetworkProcessCreationParameters.cpp:
       (WebKit::NetworkProcessCreationParameters::encode):
       (WebKit::NetworkProcessCreationParameters::decode):
       * Shared/Network/NetworkProcessCreationParameters.h:
         The network process now requires an extension to access
         its cookie storage.
       * Shared/mac/SandboxUtilities.cpp:
       (WebKit::pathForProcessContainer):
       * Shared/mac/SandboxUtilities.h:
         We need to be able to get hold of our container so
         that we can get the correct cookie storage directory.
       * UIProcess/WebContext.cpp:
       (WebKit::WebContext::ensureNetworkProcess):
         We have to pass in the an extension for the cookie storage directory when
       initalising the network process
       * UIProcess/mac/WebContextMac.mm:
       (WebKit::WebContext::platformDefaultCookieStorageDirectory):
         Make sure we provide the correct location on IOS
       * WebProcess/cocoa/WebProcessCocoa.mm:
       (WebKit::WebProcess::platformInitializeWebProcess):
         Consume the cookie storage extension

2014-06-30  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Turn off scrollsToTop on overflow UIScrollViews
        https://bugs.webkit.org/show_bug.cgi?id=134456

        Reviewed by Tim Horton.
        
        Set scrollsToTop to NO on our UIScrollViews created for overflow scrolling, since
        we don't have a good strategy for when to allow it, and doing so would also require
        some smarts in the main UIScrollView.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):

2014-06-30  Enrica Casucci  <enrica@apple.com>

        REGRESSION (Okemo): The contextual menu on tap and hold does not cancel the other gestures.
        https://bugs.webkit.org/show_bug.cgi?id=134463
        <rdar://problem/17388907>

        Reviewed by Benjamin Poulain.

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

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Implement the last pieces of encodeFrameStateNode
        https://bugs.webkit.org/show_bug.cgi?id=134460

        Reviewed by Andreas Kling.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataEncoder::operator<<):
        (WebKit::isValidEnum):
        (WebKit::encodeFormDataElement):
        (WebKit::encodeFormData):
        (WebKit::encodeFrameStateNode):

2014-06-30  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Move tap highlight to the inverseScaleRootView
        https://bugs.webkit.org/show_bug.cgi?id=134424
        <rdar://problem/17480880>

        Reviewed by Tim Horton.

        Enrica introduced the inverseScaleRootView that is a dynamic version of _highlightRootView.

        This patch moves the tap highlight from its own inverse root to inverseScaleRootView. This provides better handling
        of scale, better behavior on crash, and remove one extra view from the hierarchy.

        The code is pretty much the same, just moved around. Some of the changes:

        Now the code needs to handle repainting live when the view scale. To do that, _showTapHighlightXXX was split in two:
        -_showTapHighlight to setup the view.
        -_updateTapHighlight to update the view based on the current scale.

        Since the view updates live on scaling, we need to recompute the coordinates for each update. To do that, the _potentialTapHighlightInformation
        was generalized to handle all cases of highlight.

        Since we can no longer test for the nullity of _potentialTapHighlightInformation,
        a new attribute is introduced for that: _hasTapHighlightForPotentialTap.

        The last bit of change concern reentering the tap highlight. This becomes quite simple:
        1) _isTapHighlightIDValid is updated before the animation starts
           so that it can be set again during an animation.
        2) The animation checks the "finished" flags before removing the view from its superview
           to avoid breaking the new animation.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (withinEpsilon): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        Make _updateUnscaledView conditional to scale changes, that thing isn't cheap!

        * UIProcess/ios/WKContentViewInteraction.h:
        (withinEpsilon):
        Move withinEpsilon() from WKContentView to use it from both classes.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _updateUnscaledView]):
        (-[WKContentView _updateTapHighlight]):
        (-[WKContentView _showTapHighlight]):
        (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]):
        (-[WKContentView _cancelInteraction]):
        (-[WKContentView _finishInteraction]):
        (-[WKContentView _singleTapDidReset:]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _showTapHighlightWithColor:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]): Deleted.

2014-06-30  Anders Carlsson  <andersca@apple.com>

        Add code for encoding legacy session history entries
        https://bugs.webkit.org/show_bug.cgi?id=134452

        Reviewed by Andreas Kling.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataEncoder::HistoryEntryDataEncoder):
        (WebKit::HistoryEntryDataEncoder::operator<<):
        (WebKit::HistoryEntryDataEncoder::finishEncoding):
        (WebKit::HistoryEntryDataEncoder::encodeArithmeticType):
        (WebKit::HistoryEntryDataEncoder::encodeFixedLengthData):
        (WebKit::HistoryEntryDataEncoder::grow):
        (WebKit::HistoryEntryDataEncoder::growCapacity):
        (WebKit::encodeFrameStateNode):
        (WebKit::encodeLegacySessionHistoryEntryData):
        (WebKit::decodeSessionHistoryEntryData):
        (WebKit::decodeLegacySessionHistoryEntryData):
        * UIProcess/mac/LegacySessionStateCoding.h:

2014-06-29  Yoav Weiss  <yoav@yoav.ws>

        Add support for HTMLImageElement's sizes attribute
        https://bugs.webkit.org/show_bug.cgi?id=133620

        Reviewed by Dean Jackson.

        Added an ENABLE_PICTURE_SIZES compile flag.

        * Configurations/FeatureDefines.xcconfig:

2014-06-28  Tim Horton  <timothy_horton@apple.com>

        [iOS][WK2] PDFs never load inline again after the Web process crashes
        https://bugs.webkit.org/show_bug.cgi?id=134432
        <rdar://problem/17484205>

        Reviewed by Dan Bernstein.

        After a crash, the WebPage never gets mimeTypesWithCustomContentProviders filled back in.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Add mimeTypesWithCustomContentProviders to WebPageCreationParameters.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.h:
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry addPage:]):
        We don't need to send the MIME types across when a page is added, because it already got them in its creation parameters.

        (-[WKWebViewContentProviderRegistry removePage:]):
        (-[WKWebViewContentProviderRegistry _mimeTypesWithCustomContentProviders]):
        Return a vector of all registered MIME types.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::mimeTypesWithCustomContentProviders):
        * UIProcess/PageClient.h:
        Add (iOS only for now) mimeTypesWithCustomContentProviders to PageClient.

2014-06-28  Dan Bernstein  <mitz@apple.com>

        REGRESSION: WebPageProxy::attributedSubstringForCharacterRangeAsync never calls its callback function
        https://bugs.webkit.org/show_bug.cgi?id=134429

        Reviewed by Tim Horton.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):

2014-06-27  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] position:fixed inside accelerated overflow:scroll is jumpy
        https://bugs.webkit.org/show_bug.cgi?id=134426
        <rdar://problem/17474523>

        Reviewed by Tim Horton.

        After committing a new layer tree (with possibly stale position:fixed layer
        positions), we need the scrolling tree to update those positions based on
        the current scroll offset.
        
        To achieve that, implement ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterAncestorChange()
        and have it add to the cumulative delta the difference between the last committed scroll
        position and the current scroll position.
        
        Also make sure that ScrollingTreeOverflowScrollingNodeIOS doesn't call back to scrollViewDidScroll()
        when we're updating its scroll position inside a scrolling tree commit.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterAncestorChange):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollViewDidScroll):

2014-06-27  Antti Koivisto  <antti@apple.com>

        Flush throttling with remote layers
        https://bugs.webkit.org/show_bug.cgi?id=134398

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::adjustLayerFlushThrottling):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::adjustLayerFlushThrottling):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):
        (WebKit::RemoteLayerTreeDrawingArea::scheduleCompositingLayerFlush):

            Delay layer flushes during page loading.
            If use interacts with the page the next flush in unthrottled even if loading is in progress.

        (WebKit::RemoteLayerTreeDrawingArea::adjustLayerFlushThrottling):
        
            Compute the new delay. The first visual flush uses a shorter delay.
            Flush immediately when we are no longer throttling.

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

2014-06-27  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS][WK2] <select> tapping "next" does not save new picker value
        https://bugs.webkit.org/show_bug.cgi?id=134409

        Reviewed by Enrica Casucci.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryTab:]):
        We know the assisted node will change, so call endEditing
        before the assisted node changes in the WebProcess.

        (-[WKContentView _stopAssistingNode]):
        Ensure we call endEditing to trigger controlEndEditing.

        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKMultipleSelectPicker initWithView:]):
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKSelectSinglePicker dealloc]):
        Style fixes.

2014-06-27  Peyton Randolph  <prandolph@apple.com>

         Add feature flag for link long-press gesture.                                                                   
         https://bugs.webkit.org/show_bug.cgi?id=134262                                                                  
                                                                                                                         
         Reviewed by Enrica Casucci.                                                                                     
                                                                                                                         
         * Configurations/FeatureDefines.xcconfig:                                                                       
         Add ENABLE_LINK_LONG_PRESS. 

2014-06-26  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix touch-scrollable elements with overflow:scroll on just one axis, and RTL scrolling
        https://bugs.webkit.org/show_bug.cgi?id=134377
        <rdar://problem/16762224>

        Reviewed by Tim Horton.

        Make -webkit-overflow-scrolling:touch scrolling work correctly when one axis
        has overflow:scroll and the other overflow:hidden. Also fix scrolling in RTL
        contexts.
        
        An RTL scroller with overflow-x:hidden will have a non-zero scroll origin,
        and needs to truncate the scrolled content on the left side. To pass the
        correct geometry to the UI process, we need to introduce the concept of
        "reachable" size as well as total content size; normally these are the same,
        but will differ when scrolling is only allowed on one axis but there is overflow
        on both axes.
        
        ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren() uses the total and
        reachable content sizes to set a negative edge inset on the left (for RTL) or top
        (for bottom-to-top) so prevent scrolling into these areas.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        (WebKit::RemoteScrollingTreeTextStream::dump):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren): 

2014-06-27  Joseph Pecoraro  <pecoraro@apple.com>

        Fix various leaks, RetainPtrs should adopt allocs
        https://bugs.webkit.org/show_bug.cgi?id=134308

        Reviewed by Alexey Proskuryakov.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _remoteObjectRegistry]):

2014-06-27  Dan Bernstein  <mitz@apple.com>

        Remove unused definitions that were mistakenly added back in r170323 and then again in r170329
        https://bugs.webkit.org/show_bug.cgi?id=134397

        Reviewed by Geoff Garen.

        * UIProcess/API/Cocoa/WKBackForwardList.mm:

2014-06-26  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] Distant focusable element may not be scrolled into view when focused using keyboard
        https://bugs.webkit.org/show_bug.cgi?id=134309
        <rdar://problem/17427385>

        Reviewed by Darin Adler.

        Fixes an issue where the focusable element may not be scrolled into view when it's focused by
        using the keyboard accessory (i.e. the < and > buttons). In particular, we don't scroll a
        keyboard focused text field into view when it's positioned significantly outside the visible region.

        * UIProcess/ios/WKContentViewInteraction.h: Added an instance variable called _didAccessoryTabInitiateFocus
        to track whether an accessory tab initiated the focus of the focusable element.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]): Clear _didAccessoryTabInitiateFocus so that we're in a good state
        should the WebProcess crash between the time the UIProcess receives the accessory tab request and the
        WebProcess calls back to the UIProcess to zoom/scroll to the newly focused element.
        (-[WKContentView _displayFormNodeInputView]): Modified to pass an empty rectangle for the selection
        rectangle to -_zoomToFocusRect to avoid constraining the scroll to the newly focused element when it
        was focused using the keyboard accessory tab buttons
        (-[WKContentView accessoryTab:]): Modified to set _didAccessoryTabInitiateFocus to YES. We'll set
        this boolean to NO in -_displayFormNodeInputView.

2014-06-26  Timothy Horton  <timothy_horton@apple.com>

        [iOS][WK2] Implement WKPDFView smart magnification
        https://bugs.webkit.org/show_bug.cgi?id=134269
        <rdar://problem/17272825>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _currentContentView]):
        (contentZoomScale):
        Factor _currentContentView out of contentZoomScale.

        (-[WKWebView _zoomToRect:WebCore::atScale:origin:WebCore::]):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _contentRectForUserInteraction]):
        Use it in a bunch more places so we query the right view when zooming/scrolling for smart magnification.

        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView scrollViewDidScroll:]):
        (-[WKPDFView _revalidateViews]):
        (-[WKPDFView zoom:to:atPoint:kind:]):
        (-[WKPDFView resetZoom:]):
        Implement zoom:to:atPoint:kind: and resetZoom: UIPDFPageViewDelegate methods.
        Convert the rects/points and forward them on to the WKWebView to do the zoom.
        resetZoom: doesn't provide the gesture origin, so we zoom out using the view center as our origin.
        Avoid parenting new UIPDFPageViews while starting a zoom; they'll end up with a bizarre
        animation on them and go flying across the screen (even before _isAnimatingZoom is set).

2014-06-26  Tim Horton  <timothy_horton@apple.com>

        [WK2] Pinch-zoom shadows can overlap headers and footers
        https://bugs.webkit.org/show_bug.cgi?id=134372
        <rdar://problem/16004095>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::shadowLayerPositionForFrame):
        (WebKit::shadowLayerBoundsForFrame):
        Compute the initial shadow layer and shadow bounds exactly as RenderLayerCompositor does
        (in updateRootLayerPosition and friends). Also, clip the shadow layer to the old document rect,
        otherwise it can extend over top of the header/footers. The content is automatically clipped to
        this rect by the root content layer, but the shadow is outside of that.

        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToLayers):
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
        Pass all of the arguments to constrainScrollPositionForOverhang, not just half of them.
        There's still a bug where we constrain incorrectly with header/footer layers, but that
        will be addressed elsewhere.

        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):
        Make use of the new helpers.

2014-06-26  Tim Horton  <timothy_horton@apple.com>

        Don't leak WKBrowsingContextControllers
        https://bugs.webkit.org/show_bug.cgi?id=134368
        <rdar://problem/17476582>

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView browsingContextController]):
        Adoption is important.

2014-06-26  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION: Mountain Lion: Gmail's "in new window" view of mail threads is very slow to load its content
        https://bugs.webkit.org/show_bug.cgi?id=133882
        <rdar://problem/17271965>

        Reviewed by Brady Eidson.

        * NetworkProcess/mac/NetworkResourceLoadSchedulerMac.mm:
        (WebKit::NetworkResourceLoadScheduler::platformInitializeMaximumHTTPConnectionCountPerHost):
        Same fix as in WebCore.

2014-06-26  Brady Eidson  <beidson@apple.com>

        Remove use of PlatformStrategies for Gamepad API.
        https://bugs.webkit.org/show_bug.cgi?id=134348

https://bugs.webkit.org/show_bug.cgi?id=134348
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createGamepadStrategy): Deleted.
        * NetworkProcess/NetworkProcessPlatformStrategies.h:

        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createGamepadStrategy): Deleted.
        (WebKit::WebPlatformStrategies::startMonitoringGamepads): Deleted.
        (WebKit::WebPlatformStrategies::stopMonitoringGamepads): Deleted.
        (WebKit::WebPlatformStrategies::platformGamepads): Deleted.
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2014-06-26  Dan Bernstein  <mitz@apple.com>

        [iOS] Add API for opting into character selection granularity
        https://bugs.webkit.org/show_bug.cgi?id=134354

        Reviewed by Geoff Garen.

        * Shared/API/Cocoa/WKFoundation.h: Added a definition of WK_ENUM_AVAILABLE_IOS.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        (WKSelectionGranularity): Added this enum with two values, one representing dynamic
        granularity( the current, default behavior) and one representing character granularity.
        Delcared new selectionGranularity property.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]): Copy the _selectionGranularity ivar.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (toUIWebSelectionMode): Added this helper function for mapping WKSelectionGranularity values
        to UIWebSelectionMode values.
        (-[WKContentView setupInteraction]): Use a selection assistant with the mode specified in
        the configuration.
        (-[WKContentView _stopAssistingKeyboard]): Ditto.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture): Changed the behavior of the loupe gesture type in
        non-editable text to select a word, rather than an empty range, matching the UITextView
        behavior.

2014-06-26  Ada Chan  <adachan@apple.com>

        Change the target membership of WKBackForwardListPrivate.h from WebKit2 to WebKit.

        Rubber-stamped by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:

2014-06-26  Benjamin Poulain  <bpoulain@apple.com>

        Remove a useless return in WebPageProxyIOS

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):
        Darin caught this mistake in r170460.

2014-06-26  Chris Fleizach  <cfleizach@apple.com>

        Add an undo group for each dictated utterance in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=134086

        Applied review comments from Sam Weinig.

        Move the associated USE #define into Platform.h.

        * UIProcess/PageClient.h:

2014-06-24  Roger Fong  <roger_fong@apple.com>

        Don't allow sudden termination while writing to local storage.
        https://bugs.webkit.org/show_bug.cgi?id=134254.
        <rdar://problem/15093854>.

        Reviewed by Darin Adler.

        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::scheduleDatabaseUpdate):
        Disable sudden termination when a database update is scheduled.
        (WebKit::LocalStorageDatabase::updateDatabase):
        Re-enable sudden termination when the update completes.
        * UIProcess/Storage/LocalStorageDatabase.h:

2014-06-25  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Update the long press interactions correctly when an overflow scroll view scrolls
        https://bugs.webkit.org/show_bug.cgi?id=134334

        Reviewed by Simon Fraser.

        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::overflowScrollViewWillStartPanGesture):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollViewWillStartPanGesture): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::overflowScrollViewWillStartPanGesture):
        (WebKit::PageClientImpl::overflowScrollViewDidScroll):
        (WebKit::PageClientImpl::scrollViewWillStartPanGesture): Deleted.
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartPanGesture):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::overflowScrollViewWillStartPanGesture):
        (WebKit::WebPageProxy::overflowScrollViewDidScroll):
        (WebKit::WebPageProxy::scrollViewWillStartPanGesture): Deleted.

2014-06-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Page jumps when rubber-banding on azuremagazine.com 
        https://bugs.webkit.org/show_bug.cgi?id=134238
        <rdar://problem/16918228>

        Reviewed by Benjamin Poulain.
        
        If the scroll view is in the process of rubber-banding when -setContentSize: is called,
        it clamps the scroll offsets between zero and the max value, which visibly interrupts the
        rubberband. This can easily happen now that we continually send scroll events to the page
        on scrolling, especially when pages like azuremagazine.com do fake sticky by toggling
        in-flow elements into position:fixed.
        
        Fix by computing the amount of rubber-band before calling -setContentSize:, and then
        restoring the contentOffset with the same amount of rubber-band even when the content size
        is different, for top/left rubberbands.
        
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView _currentTopLeftRubberbandAmount]):
        (-[WKScrollView _restoreContentOffsetWithRubberbandAmount:]):
        (-[WKScrollView _setContentSizePreservingContentOffsetDuringRubberband:]):

2014-06-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fixed position elements jump around when zooming
        https://bugs.webkit.org/show_bug.cgi?id=134328
        <rdar://problem/17447048>

        Reviewed by Zalan Bujtas.

        If a given remote layer tree commit contains changes of layers for viewport-constrained
        objects, then the associated scrolling tree also needs to show that the layers changed,
        since we need to re-run the "viewport changed" logic in the UI process to get the
        layers correctly positioned for the current zoom level.
        
        The bug was that page scale changes resulted in small "pixel alignment" position
        changes which touched layers, but we didn't commit any scrolling tree changes. So
        the scrolling tree commit would result in visibly stale layer positions, with no scrolling tree
        update to adjust them for the current transient zoom.

        Fix by making use of the existing "alignment offset" field in the ViewportConstraints
        data, and having RemoteScrollingCoordinatorProxy::connectStateNodeLayers() note that
        fixed or sticky layers changed if any properties of fixed or sticky scrolling tree
        nodes were updated.

        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2014-06-25  Benjamin Poulain  <bpoulain@apple.com>

        REGRESSION (r170325): UI process crashes in lastCommittedLayerTreeTransactionID() when the Web Content process crashes
        https://bugs.webkit.org/show_bug.cgi?id=134284

        Reviewed by Simon Fraser.

        The crash was caused by the access to the Drawing Area after the crash.
        This lead to discovering another bug: m_lastVisibleContentRectUpdate could have been updated after WebPageProxy::resetState(),
        which in turn would prevent valid updates when a new WebProcess is created.

        This patch fixes both issues by moving the VisibleContentRectUpdateInfo to be internal to WebPageProxy,
        then early return if we get there in an invalid state.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):

2014-06-25  Brady Eidson  <beidson@apple.com>

        Add new platform gamepad abstractions
        https://bugs.webkit.org/show_bug.cgi?id=134325

        Reviewed by Dean Jackson.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        (WebKit::NetworkProcessPlatformStrategies::createGamepadStrategy):
        * NetworkProcess/NetworkProcessPlatformStrategies.h:

        Actually return a GamepadStrategy in WK2 with no implementation for now:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::createGamepadStrategy):
        (WebKit::WebPlatformStrategies::startMonitoringGamepads):
        (WebKit::WebPlatformStrategies::stopMonitoringGamepads):
        (WebKit::WebPlatformStrategies::platformGamepads):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

2014-06-25  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, CMake build fix after r170450

        * CMakeLists.txt: Add ProcessAssertion.cpp and ProcessThrottler.cpp.
        * UIProcess/ProcessAssertion.cpp: Replace #import with #include.

2014-06-25  Tim Horton  <timothy_horton@apple.com>

        [WK2] Shadow layer is in the wrong place while pinch-zooming
        https://bugs.webkit.org/show_bug.cgi?id=134321

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToLayers):
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):
        The anchor point of the shadow layer changed, so we no longer need to shift our position to the center.

2014-06-25  Dan Bernstein  <mitz@apple.com>

        Fixed crashes after r170450.

        Reviewed by Tim Horton.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy): Removed iOS platform #ifdef around
        initialization of m_throttler.

2014-06-25  Beth Dakin  <bdakin@apple.com>

        Crash in ScrollingTree::isRubberBandInProgress()
        https://bugs.webkit.org/show_bug.cgi?id=134316
        -and corresponding-
        <rdar://problem/16247911>

        Reviewed by Geoffrey Garen.

        Move all ScrollingTreeNode creation from ScrollingCoordinator subclasses into 
        ScrollingTree subclasses.

        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createScrollingTreeNode):
        (WebKit::RemoteScrollingTree::createNode): Deleted.
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::createScrollingTreeNode): Deleted.

2014-06-25  Dan Bernstein  <mitz@apple.com>

        Web process should become active when sent a message that requires a callback
        https://bugs.webkit.org/show_bug.cgi?id=134315

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): Removed one-off code to
        acquire an activity token, now that WebPageProxy::takeSnapshot does it automatically for us.

        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::CallbackBase): Made this constructor take and adopt an activity
        token.
        (WebKit::GenericCallback::create): Added an optional activity token parameter.
        (WebKit::GenericCallback::GenericCallback): Pass the activity token to the CallbackBase
        constructor.
        (WebKit::CallbackMap::put): Added an activity token parameter, which is passed along to
        GenericCallback::create.

        * UIProcess/ProcessAssertion.cpp: Moved from Source/WebKit2/UIProcess/ios/ProcessAssertion.mm.
        This copy includes generic no-op implementations for platforms that don’t have assertions.
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::setState):
        * UIProcess/ProcessAssertion.h: Moved from Source/WebKit2/UIProcess/ios/ProcessAssertion.h.
        Changed platform #ifdefs to make this usable by all platforms.

        * UIProcess/ProcessThrottler.cpp: Moved from Source/WebKit2/UIProcess/ios/ProcessThrottler.mm.
        Removed iOS platform #ifdef.
        * UIProcess/ProcessThrottler.h: Moved from Source/WebKit2/UIProcess/ios/ProcessThrottler.h.
        Ditto.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateCommand): Create a background activity token and pass it
        along to CallbackMap::put.
        (WebKit::WebPageProxy::runJavaScriptInMainFrame): Ditto.
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation): Ditto.
        (WebKit::WebPageProxy::getSourceForFrame): Ditto.
        (WebKit::WebPageProxy::getContentsAsString): Ditto.
        (WebKit::WebPageProxy::getBytecodeProfile): Ditto.
        (WebKit::WebPageProxy::getSelectionOrContentsAsString): Ditto.
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData): Ditto.
        (WebKit::WebPageProxy::getMainResourceDataOfFrame): Ditto.
        (WebKit::WebPageProxy::getResourceDataFromFrame): Ditto.
        (WebKit::WebPageProxy::getWebArchiveOfFrame): Ditto.
        (WebKit::WebPageProxy::getMarkedRangeAsync): Ditto.
        (WebKit::WebPageProxy::getSelectedRangeAsync): Ditto.
        (WebKit::WebPageProxy::characterIndexForPointAsync): Ditto.
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync): Ditto.
        (WebKit::WebPageProxy::takeSnapshot): Ditto.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::sendProcessWillSuspend): Moved from WebProcessProxyIOS.mm.
        (WebKit::WebProcessProxy::sendCancelProcessWillSuspend): Ditto.
        (WebKit::WebProcessProxy::processReadyToSuspend): Ditto.
        (WebKit::WebProcessProxy::didCancelProcessSuspension): Ditto.
        * UIProcess/WebProcessProxy.h: Removed iOS platform #ifdef.
        * UIProcess/WebProcessProxy.messages.in: Ditto.

        * UIProcess/ios/ProcessAssertionIOS.mm: Renamed from Source/WebKit2/UIProcess/ios/ProcessAssertion.mm.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectWithGesture): Changed to pass the function directly to
        CallbackMap::put, along with a background activity token.
        (WebKit::WebPageProxy::updateSelectionWithTouches): Ditto.
        (WebKit::WebPageProxy::requestAutocorrectionData): Ditto.
        (WebKit::WebPageProxy::applyAutocorrection): Ditto.
        (WebKit::WebPageProxy::requestDictationContext): Ditto.
        (WebKit::WebPageProxy::requestAutocorrectionContext): Ditto.
        (WebKit::WebPageProxy::selectWithTwoTouches): Ditto.

        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::sendProcessWillSuspend): Moved to WebProcessProxy.cpp.
        (WebKit::WebProcessProxy::sendCancelProcessWillSuspend): Ditto.
        (WebKit::WebProcessProxy::processReadyToSuspend): Ditto.
        (WebKit::WebProcessProxy::didCancelProcessSuspension): Ditto.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync): Create a background
        activity token and pass it along to CallbackMap::put.

        * WebKit2.xcodeproj/project.pbxproj: Updated for moves and copies.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess): Moved iOS platform #ifdef.
        * WebProcess/WebProcess.h: Ditto.
        * WebProcess/WebProcess.messages.in: Ditto.

2014-06-25  Chris Fleizach  <cfleizach@apple.com>

        Add an undo group for each dictated utterance in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=134086

        Reviewed by Enrica Casucci.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView validAttributesForMarkedText]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::registerInsertionUndoGrouping):
        (WebKit::WebPageProxy::insertTextAsync):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::registerInsertionUndoGrouping):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::registerInsertionUndoGrouping):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::insertTextAsync):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::insertDictatedTextAsync):

2014-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS]: WK2 Inspector Node Search
        https://bugs.webkit.org/show_bug.cgi?id=134279

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKInspectorNodeSearchGestureRecognizer.h: Added.
        * UIProcess/ios/WKInspectorNodeSearchGestureRecognizer.mm: Added.
        (-[WKInspectorNodeSearchGestureRecognizer locationInView:]):
        (-[WKInspectorNodeSearchGestureRecognizer _processTouches:state:]):
        (-[WKInspectorNodeSearchGestureRecognizer touchesBegan:withEvent:]):
        (-[WKInspectorNodeSearchGestureRecognizer touchesMoved:withEvent:]):
        (-[WKInspectorNodeSearchGestureRecognizer touchesEnded:withEvent:]):
        (-[WKInspectorNodeSearchGestureRecognizer touchesCancelled:withEvent:]):
        (-[WKInspectorNodeSearchGestureRecognizer reset]):
        Gesture recognizer that tracks a single touch, updates as that touch
        moves, and ends when that touch is cancelled or ends. The location
        of the gesture recognizer is the location of the touch it was tracking.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        Handle the inspector node search gesture recognizer if needed.

        (-[WKContentView _removeDefaultGestureRecognizers]):
        (-[WKContentView _addDefaultGestureRecognizers]):
        Helpers to add and remove the default gestures.

        (-[WKContentView _enableInspectorNodeSearch]):
        (-[WKContentView _disableInspectorNodeSearch]):
        When node search is enabled, remove all gesture recognizers and
        replace with a single inspector node search gesture recognizer.
        Likewise, inverse that when disabled.

        (-[WKContentView _inspectorNodeSearchRecognized:]):
        Notify the WebProcess of new touch positions during node search.

        (-[WKContentView hasSelectablePositionAtPoint:]):
        When inspector node search is enabled, disable selection.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::inspectorNodeSearchMovedToPosition):
        Send a mouse move to the new location. WebCore will update the highlight.

        (WebKit::WebPage::inspectorNodeSearchEndedAtPosition):
        Inspect the node at the location.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _enableInspectorNodeSearch]):
        (-[WKWebView _disableInspectorNodeSearch]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::enableInspectorNodeSearch):
        (WebKit::PageClientImpl::disableInspectorNodeSearch):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::inspectorNodeSearchMovedToPosition):
        (WebKit::WebPageProxy::inspectorNodeSearchEndedAtPosition):
        (WebKit::WebPageProxy::enableInspectorNodeSearch):
        (WebKit::WebPageProxy::disableInspectorNodeSearch):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::didSetSearchingForNode):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::enableInspectorNodeSearch):
        (WebKit::WebPage::disableInspectorNodeSearch):
        Pass the inspector node search state up from the WebProcess
        to the WKContentView in the UIProcess. Likewise some messages
        in the reverse direction.

2014-06-25  Dana Burkart  <dburkart@apple.com>

        Add support for 5-tuple versioning.

        Reviewed by David Farler.

        * Configurations/Version.xcconfig:

2014-06-25  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17448049> REGRESSION (r170254): Input methods don’t work
        https://bugs.webkit.org/show_bug.cgi?id=134311

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getSelectedRangeAsync): Removed code that accidentally put the
        callback function into a throwaway EditingRangeCallback.

2014-06-25  Timothy Horton  <timothy_horton@apple.com>

        [iOS][WK2] Rotating a zoomed PDF leads to weird scrolling behavior
        https://bugs.webkit.org/show_bug.cgi?id=134286

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView _computePageAndDocumentFrames]):
        The WKPDFView frame and scroll view content size need to be scaled.

        (-[WKPDFView web_setScrollView:]): Deleted.

        (-[WKPDFView web_initWithFrame:webView:]):
        Get rid of _documentFrame, and don't set it at initWithFrame: time (it's not useful yet).

2014-06-25  Laszlo Gombos  <l.gombos@samsung.com>

        Remove build guard for progress element
        https://bugs.webkit.org/show_bug.cgi?id=134292

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2014-06-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Windowed plugins visibility doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=131487

        Reviewed by Anders Carlsson.

        Implement plugins visibility changes and add a new message to
        notify the UI process when a windowed plugin is shown/hidden to
        show/hide the plugin widget.

        * PluginProcess/PluginControllerProxy.cpp:
        (WebKit::PluginControllerProxy::visibilityDidChange): Add
        implementation to notify the plugin about visibility change.
        (WebKit::PluginControllerProxy::windowedPluginVisibilityDidChange):
        Send WindowedPluginVisibilityDidChange to the plugin proxy.
        * PluginProcess/PluginControllerProxy.h:
        * PluginProcess/PluginControllerProxy.messages.in: Add VisibilityDidChange message.
        * UIProcess/WebPageProxy.h: Add windowedPluginVisibilityDidChange
        to handle WindowedPluginVisibilityDidChange message.
        * UIProcess/WebPageProxy.messages.in: Add WindowedPluginVisibilityDidChange message.
        * UIProcess/efl/WebPageProxyEfl.cpp:
        (WebKit::WebPageProxy::windowedPluginVisibilityDidChange):
        * UIProcess/gtk/WebPageProxyGtk.cpp:
        (WebKit::WebPageProxy::createPluginContainer): Do not show the
        plugins by default.
        (WebKit::WebPageProxy::windowedPluginVisibilityDidChange): Show or hide the plugin widget.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::NetscapePlugin): Initialize m_isVisible.
        (WebKit::NetscapePlugin::visibilityDidChange): Add visible parameter and save it in m_isVisible
        member, calling platformVisibilityDidChange() only when it has actually changed.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformVisibilityDidChange): Notify the controller about visibility change.
        * WebProcess/Plugins/PDF/PDFPlugin.h:
        * WebProcess/Plugins/Plugin.h:
        * WebProcess/Plugins/PluginController.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::visibilityDidChange): Send VisibilityDidChange message to the plugin controller proxy.
        (WebKit::PluginProxy::windowedPluginVisibilityDidChange): Notify the controller about visibility change.
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginProxy.messages.in: Add WindowedPluginVisibilityDidChange message.
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin): Also call viewVisibilityDidChange() when the plugin is initialized.
        (WebKit::PluginView::setParentVisible): Override this Widget method to update the plugin visibility when parent
        widget is shown/hidden.
        (WebKit::PluginView::viewVisibilityDidChange): Pass visible parameter to visibilityDidChange().
        (WebKit::PluginView::windowedPluginVisibilityDidChange): Send WindowedPluginVisibilityDidChange message to the UI process.
        * WebProcess/Plugins/PluginView.h:

2014-06-24  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] We should not start potential tap activation unless the tap gesture recognizer succeed
        https://bugs.webkit.org/show_bug.cgi?id=134277
        <rdar://problem/17439973>

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.m:
        (-[WKSyntheticClickTapGestureRecognizer setState:]):
        We were calling the _gestureRecognizedAction even for failure states. The potential activation work
        is not light on the Web Process, we should not start if we don't care about the result.

2014-06-24  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Adopt the C API of UIWebTouchEventsGestureRecognizer for touch event mapping
        https://bugs.webkit.org/show_bug.cgi?id=134234

        Reviewed by Tim Horton.

        The C API is more efficient and expose properties we will need for other patches. This patch moves from
        getting each value independently on UIWebTouchEventsGestureRecognizer to the single structure exposed
        by _UIWebTouchEvent.

        * Shared/NativeWebTouchEvent.h:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::convertTouchPhase):
        (WebKit::extractWebTouchPoint):
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):

2014-06-24  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS]: WK2 Inspector Node Highlighting
        https://bugs.webkit.org/show_bug.cgi?id=134257

        Reviewed by Timothy Hatcher.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        (headers_for_type):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Highlight>::encode):
        (IPC::ArgumentCoder<Highlight>::decode):
        Add a way to encode a WebCore::Highlight struct.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showInspectorHighlight:WebCore::]):
        (-[WKWebView _hideInspectorHighlight]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showInspectorHighlight):
        (WebKit::PageClientImpl::hideInspectorHighlight):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showInspectorHighlight):
        (WebKit::WebPageProxy::hideInspectorHighlight):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        (WebKit::WebInspectorClient::hideHighlight):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::showInspectorHighlight):
        (WebKit::WebPage::hideInspectorHighlight):
        Send web process highlight / hideHighlight messages up to
        the UIProcess so it can highlight in the WKContentView.
        Pass up a WebCore::Highlight in Document coordinates.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKInspectorHighlightView initWithFrame:]):
        (-[WKInspectorHighlightView dealloc]):
        (-[WKInspectorHighlightView _removeAllLayers]):
        (-[WKInspectorHighlightView _createLayers:]):
        (findIntersectionOnLineBetweenPoints):
        (quadIntersection):
        (layerPathWithHole):
        (layerPath):
        (-[WKInspectorHighlightView _layoutForNodeHighlight:]):
        (-[WKInspectorHighlightView _layoutForRectsHighlight:]):
        (-[WKInspectorHighlightView update:]):
        Reuse the WebKit1 code to turn highlight float quads into CAShapeLayers.

        (-[WKContentView _showInspectorHighlight:WebCore::]):
        (-[WKContentView _hideInspectorHighlight]):
        Show and hide the highlight view with the respective WebCore::Highlight.

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Simplify decodeLegacySessionState
        https://bugs.webkit.org/show_bug.cgi?id=134280

        Reviewed by Andreas Kling.

        There's no need to use a LegacySessionStateDecoder object with a single member,
        just make all functions static and only export a single entry point; decodeLegacySessionState.

        No functionality change, just moving code around.

        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCreateFromData):
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeSessionHistoryEntryData):
        (WebKit::decodeSessionHistoryEntry):
        (WebKit::decodeSessionHistoryEntries):
        (WebKit::decodeV0SessionHistory):
        (WebKit::decodeV1SessionHistory):
        (WebKit::decodeSessionHistory):
        (WebKit::decodeLegacySessionState):
        (WebKit::LegacySessionStateDecoder::LegacySessionStateDecoder): Deleted.
        (WebKit::LegacySessionStateDecoder::~LegacySessionStateDecoder): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeSessionState): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeSessionHistory): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeV0SessionHistory): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeV1SessionHistory): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntries): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntry): Deleted.
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntryData): Deleted.
        * UIProcess/mac/LegacySessionStateCoding.h:

2014-06-24  Brady Eidson  <beidson@apple.com>

        Enable GAMEPAD in the Mac build, but disabled at runtime.
        https://bugs.webkit.org/show_bug.cgi?id=134255

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

        * Shared/WebPreferencesDefinitions.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetGamepadsEnabled):
        (WKPreferencesGetGamepadsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

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

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Add support for v0 legacy decoding
        https://bugs.webkit.org/show_bug.cgi?id=134275

        Reviewed by Andreas Kling.

        * Shared/SessionState.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::LegacySessionStateDecoder::decodeV0SessionHistory):
        (WebKit::LegacySessionStateDecoder::decodeV1SessionHistory):

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Add SPI for clearing an entire back-forward list
        https://bugs.webkit.org/show_bug.cgi?id=134274

        Reviewed by Dan Bernstein.

        Add -[WKBackForwardList _clear] which only clears the back-forward items, and
        change -[WKBackForwardList _removeAllItems] to remove all items including the current one.

        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        (-[WKBackForwardList _removeAllItems]):
        (-[WKBackForwardList _clear]):
        * UIProcess/API/Cocoa/WKBackForwardListPrivate.h:
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::removeAllItems):
        * UIProcess/WebBackForwardList.h:

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Add iOS specific frame state member variables
        https://bugs.webkit.org/show_bug.cgi?id=134268

        Reviewed by Andreas Kling.

        * Shared/SessionState.cpp:
        (WebKit::FrameState::encode):
        (WebKit::FrameState::decode):
        * Shared/SessionState.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataDecoder::operator>>):
        (WebKit::decodeBackForwardTreeNode):
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toFrameState):
        (WebKit::applyFrameState):

2014-06-24  Enrica Casucci  <enrica@apple.com>

        iOS WebKit2: block selection tends to prefer block to single words even when the page is zoomed.
        https://bugs.webkit.org/show_bug.cgi?id=134267
        <rdar://problem/17138059>

        Reviewed by Benjamin Poulain.

        When trying to find the best selection match for the position where the tap occurs,
        we need to take into account the page scale. This patch applies the scale factor
        to the selection rect before comparing it with the desired size.

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

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Add code to convert HistoryItem to PageState
        https://bugs.webkit.org/show_bug.cgi?id=134263

        Reviewed by Andreas Kling.

        * WebProcess/WebCoreSupport/SessionStateConversion.cpp:
        (WebKit::toHTTPBody):
        (WebKit::toFrameState):
        (WebKit::toPageState):
        * WebProcess/WebCoreSupport/SessionStateConversion.h:

2014-06-24  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Disable screen font substitution by default.
        <https://webkit.org/b/134266>
        <rdar://problem/17427740>

        Just like OS X >= 10.9, screen font substitution should be disabled
        by default in WebKit2 for iOS.

        Reviewed by Anders Carlsson.

        * Shared/WebPreferencesDefinitions.h:

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Add PageState to HistoryItem conversion code
        https://bugs.webkit.org/show_bug.cgi?id=134259

        Reviewed by Andreas Kling.

        * Shared/SessionState.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::decodeBackForwardTreeNode):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/SessionStateConversion.cpp: Added.
        (WebKit::toFormData):
        (WebKit::applyFrameState):
        (WebKit::toHistoryItem):
        * WebProcess/WebCoreSupport/SessionStateConversion.h: Added.

2014-06-24  Antti Koivisto  <antti@apple.com>

        Only flush layers when the exposed rect actually changes
        https://bugs.webkit.org/show_bug.cgi?id=134248

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setExposedContentRect):

2014-06-24  Martin Hock  <mhock@apple.com>

        [iOS] DOMWindow::outerWidth and outerHeight don't return useful values, so return 0.
        Also, revert r169281.
        https://bugs.webkit.org/show_bug.cgi?id=134233
        <rdar://problem/17060183>

        Reviewed by Benjamin Poulain.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::windowFrame): Deleted.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::convertToUserSpace):

2014-06-24  Jeremy Jones  <jeremyj@apple.com>

        Initialize WKWebViewConfiguration properties to their default values.
        https://bugs.webkit.org/show_bug.cgi?id=134216

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        add -init method to initialize _mediaPlaybackRequiresUserAction and _mediaPlaybackAllowsAirPlay.

2014-06-24  Anders Carlsson  <andersca@apple.com>

        Add missing semicolon.

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

2014-06-24  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Fix unused parameter warnings if inspector is disabled
        https://bugs.webkit.org/show_bug.cgi?id=134244

        Reviewed by Zalan Bujtas.

        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorShow):
        (WKBundleInspectorClose):
        (WKBundleInspectorEvaluateScriptForTest):
        (WKBundleInspectorSetPageProfilingEnabled):

2014-06-24  Anders Carlsson  <andersca@apple.com>

        WKWebView doesn't respect -[UIScrollView contentInset]
        https://bugs.webkit.org/show_bug.cgi?id=134230
        <rdar://problem/17429107>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:WTF::]):
        Call initWithFrame and pass the WKWebView along.

        (-[WKWebView _adjustedContentOffset:]):
        New helper method that takes a content offset as a CGPoint and offsets it by the computed content inset.

        (-[WKWebView _computedContentInset]):
        New helper method that returns the _obscuredInsets, or if it's zero, the scroll view's content inset.

        (-[WKWebView _processDidExit]):
        Use _computedContentInset.

        (-[WKWebView _didCommitLayerTree:WebKit::]):
        use _computedContentInset.

        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:]):
        Use _computedContentInset.

        (-[WKWebView _scrollToContentOffset:WebCore::]):
        Use _computedContentInset.

        (-[WKWebView _updateVisibleContentRects]):
        If we have a custom content view, call web_computedContentInsetDidChange.

        (-[WKWebView _setObscuredInsets:]):
        Don't call web_setObscuredInsets: if we have a custom content view.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Add new methods.

        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        Add new methods.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_initWithFrame:webView:]):
        Set the _webView and _scrollView ivars.

        (-[WKPDFView _offsetForPageNumberIndicator]):
        Get the computed content offset from the WKWebView.

        (-[WKPDFView web_computedContentInsetDidChange]):
        Update the page indicator.
        
        (-[WKPDFView initWithFrame:]): Deleted.
        (-[WKPDFView web_setObscuredInsets:]): Deleted.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollView setContentInset:]):
        Call _updateVisibleContentRects.

2014-06-23  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, fix build warning.

        Source/WebKit2/WebProcess/WebPage/DrawingArea.h:117:18: warning: unused parameter ‘wantsDidUpdateViewState’ [-Wunused-parameter]

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::viewStateDidChange):

2014-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Replace RefPtr<Evas_Object> with UniquePtrEfl
        https://bugs.webkit.org/show_bug.cgi?id=134236

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::updateCursor):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/SnapshotImageGL.cpp:
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (ewk_favicon_database_icon_get):
        * UIProcess/API/efl/tests/test_ewk2_refptr_evas_object.cpp: Removed.

2014-06-23  Daniel Bates  <dabates@apple.com>

        [iOS][WK2] REGRESSION (r169324): Page jumps to top when you type into a text field
        https://bugs.webkit.org/show_bug.cgi?id=134219
        <rdar://problem/17279113>

        Reviewed by Benjamin Poulain.

        Fixes an issue where typing into a text field may cause a noticeable jump to the top of
        the page.

        Currently when updating the visual content rectangles we always constrain the scroll offset
        (s_x, s_y) such that 0 <= s_x <= "content width" - "visible width" and 0 <= s_y <= "content height" - "visible height".
        However the UIProcess may want to scroll the page by an offset outside of this range to
        create a visually pleasing result. In particular, on iOS we may scroll the page slightly
        outside of this range (e.g. s_y > 0 = "content height" - "visible height") when a form
        control is focused so as to be consistent with platform convention.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects): Temporarily disable content edge constraint when
        updating scroll offset.

2014-06-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17413374> [iOS] Application cache size per origin is not limited
        https://bugs.webkit.org/show_bug.cgi?id=134229

        Reviewed by Anders Carlsson.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess): Set the default quota per origin to the same
        value it is set in Legacy WebKit.

2014-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed, EFL build fix after r170330.

        * WebProcess/WebPage/WebPage.cpp: Guard WKStringCF.h with PLATFORM(COCOA) macro.

2014-06-23  Timothy Horton  <timothy_horton@apple.com>

        [WK2] Use the page background color instead of white when swipe snapshots were purged (134218)
        https://bugs.webkit.org/show_bug.cgi?id=134218
        <rdar://problem/17426454>

        Reviewed by Benjamin Poulain.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView WebKit::]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::shouldUseSnapshotForSize):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::retrieveSnapshotForItem): Deleted.
        * UIProcess/mac/ViewSnapshotStore.h:
        Store a color along with each snapshot.
        Set the background color of the swipe snapshot layer accordingly.

2014-06-23  Anders Carlsson  <andersca@apple.com>

        Add -[WKBackForwardList _removeAllItems]
        https://bugs.webkit.org/show_bug.cgi?id=134227
        <rdar://problem/17291623>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        (-[WKBackForwardList _removeAllItems]):
        * UIProcess/API/Cocoa/WKBackForwardListPrivate.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17413498> [Cocoa] Expose WebPreferences::offlineWebApplicationCacheEnabled
        https://bugs.webkit.org/show_bug.cgi?id=134217

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _offlineApplicationCacheIsEnabled]):
        (-[WKPreferences _setOfflineApplicationCacheIsEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Added _offlineWebApplicationCacheIsEnabled
        property.

2014-06-23  Grant Kennell  <gkennell@apple.com>

        Add SPI for Injected Bundle to provide user agent for a given URL.
        https://bugs.webkit.org/show_bug.cgi?id=133562

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: 
          Added delegate method to WebProcess PluIn protocol to provide UserAgent per URL.
        * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h:
          Added new typedef for function pointer for this new delegate call.
          Added new version (V8) of bundle loader client struct containing
          a function pointer of that new type.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (userAgentForURL): Makes delegate call with the new method.
        (setUpPageLoaderClient): Sets the struct's new function pointer to the new method.
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp:
        (WebKit::InjectedBundlePageLoaderClient::userAgentForURL):
        * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::userAgent):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userAgent): Began using the new API to ask for user agent
          instead of simply returning what had been stored.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userAgent): Deleted.

2014-06-23  Commit Queue  <commit-queue@webkit.org>

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

        lots of build breakage (Requested by bradeeoh on #webkit).

        Reverted changeset:

        "Unreviewed, revert an unintentional change committed with
        r170323."
        http://trac.webkit.org/changeset/170324

2014-06-23  Timothy Horton  <timothy_horton@apple.com>

        [iOS][wk2] Don't use view snapshots if the destination layer is a different size
        https://bugs.webkit.org/show_bug.cgi?id=134210
        <rdar://problem/17369463>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Only use the view snapshot if the snapshot is the same (in device space) size
        as the layer it's going to be put into, and only if the device scale factor is
        the same as it was when the snapshot was taken.

2014-06-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Make the state restore from HistoryItem more precise and reliable
        https://bugs.webkit.org/show_bug.cgi?id=134150

        Reviewed by Tim Horton.

        This patch make several little improvements to improve how we restore the visible content rect and scale
        from the HistoryItem.

        The biggest architectural change is that the exposed rect is now restored on the UIProcess instead of the WebProcess,
        this ensure we restore the same position regardless of any modification of obscured areas.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::lastLayerTreeTransactionId):
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        A race between the UIProcess and the WebProcess could cause the viewport of the next page to be influenced by updates
        of the previous page. To avoid that, VisibleContentRectUpdateInfo keeps track of the last transaction seen at the time
        of the update.

        The WebProcess updates the size and scale of the content through layer tree updates. If an update was generated for a layer tree
        update of the old page, none of the information is valid for the current content. Since the UIProcess drives the state in case of conflicts,
        the WebProcess was updating the scale of the current page based on incorrect information.

        To avoid the problems, we save the layer tree transaction ID when we commit a new page. Only updates after that transaction are useful
        for the current page.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        (withinEpsilon):
        (changeContentOffsetBoundedInValidRange):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _restorePageStateToExposedRect:WebCore::scale:]):
        (-[WKWebView _restorePageStateToUnobscuredCenter:WebCore::scale:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::restorePageState):
        (WebKit::PageClientImpl::restorePageCenterAndScale):
        Restoring the state is now done by WKWebView. The state is only updated on the next layer tree commit,
        this is done to avoid any jumping if the page has scrolled since we tried to restore its state.

        Both update path end up calling _updateVisibleContentRects. This is because the update on the WebProcess
        never sets the ScrollPosition (because it does not know the current state of the obscured insets). Pushing
        a new VisibleContentRect will nicely udpates the exposed rect, scroll position, fixed elements, etc.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::restorePageState):
        (WebKit::WebPageProxy::restorePageCenterAndScale):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::lastCommittedLayerTreeTransactionID):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::saveViewStateToItem):
        (WebKit::WebFrameLoaderClient::restoreViewState):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        Get rid of m_obscuredTopInset. It was a bad idea. The UIProcess updates the obscured insets a lot during
        page load, the value we used to restore the scroll position was frequently stale.

        (WebKit::WebPage::userHasChangedPageScaleFactor): Deleted.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::savePageState):
        (WebKit::scaleAfterViewportWidthChange):
        (WebKit::relativeCenterAfterContentSizeChange):
        (WebKit::adjustExposedRectForNewScale):
        Extract this out of dynamicViewportSizeUpdate(). It is useful to adjust the exposed rect when restoring a HistoryItem
        to a ViewportConfiguration that is different from when it was saved.

        (WebKit::WebPage::restorePageState):
        There are two variations of restorePage:
        1) If the viewport configuration is compatible, restore the exact scale and position of the page.
        2) Otherwise, restore the scale and position similarily to dynamicViewportSizeUpdate().

        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::adjustExposedRectForBoundedScale):
        (WebKit::RemoteLayerTreeDrawingArea::currentTransactionID):
        Expose the transactionID for the race issue on VisibleRectUpdate.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setExposedContentRect):
        Store the exposed rect in floating point coordinates. This makes it possible to restore that exact
        position when needed.

2014-06-23  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, revert an unintentional change committed with r170323.

        * UIProcess/API/Cocoa/WKBackForwardList.mm:

2014-06-23  Anders Carlsson  <andersca@apple.com>

        Policy delegate methods should use CompletionHandlerCallChecker
        https://bugs.webkit.org/show_bug.cgi?id=134215

        Reviewed by Dan Bernstein.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-06-23  Anders Carlsson  <andersca@apple.com>

        Don't use the WK prefix for internal C++ types
        https://bugs.webkit.org/show_bug.cgi?id=134214

        Reviewed by Dan Bernstein.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::OptionItem::encode):
        (WebKit::OptionItem::decode):
        (WebKit::WKOptionItem::encode): Deleted.
        (WebKit::WKOptionItem::decode): Deleted.
        * Shared/AssistedNodeInformation.h:
        (WebKit::OptionItem::OptionItem):
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        (WebKit::WKOptionItem::WKOptionItem): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView inputView]):
        (-[WKContentView requiresAccessoryView]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView assistedNodeSelectOptions]):
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/forms/WKFormInputControl.mm:
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKFormInputControl initWithView:]):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (adjustedFontSize):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKOptionPickerCell initWithOptionItem:]):
        (-[WKOptionGroupPickerCell initWithOptionItem:]):
        (-[WKMultipleSelectPicker initWithView:]):
        (-[WKMultipleSelectPicker pickerView:viewForRow:forComponent:reusingView:]):
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKSelectSinglePicker pickerView:attributedTitleForRow:forComponent:]):
        (-[WKSelectSinglePicker pickerView:didSelectRow:inComponent:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController initWithView:hasGroups:]):
        (-[WKSelectTableViewController tableView:numberOfRowsInSection:]):
        (-[WKSelectTableViewController tableView:titleForHeaderInSection:]):
        (-[WKSelectTableViewController populateCell:withItem:]):
        (-[WKSelectTableViewController findItemIndexAt:]):
        (-[WKSelectTableViewController findItemAt:]):
        (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]):
        (-[WKSelectTableViewController tableView:didSelectRowAtIndexPath:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2014-06-23  Dan Bernstein  <mitz@apple.com>

        [Cocoa] No way to grant storage quotas for web application cache
        https://bugs.webkit.org/show_bug.cgi?id=134213

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::reachedApplicationCacheOriginQuota): Added this new client function, with
        a default implementation that calls the completion handler with the current quota.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Declared a new delegate method.

        * UIProcess/API/Cocoa/_WKSecurityOrigin.mm:
        (-[_WKSecurityOrigin _initWithSecurityOrigin:WebCore::]): Changed the parameter into a const
        reference, since we copy it.
        * UIProcess/API/Cocoa/_WKSecurityOriginInternal.h:

        * UIProcess/Cocoa/UIDelegate.h: Override API::UIClient::reachedApplicationCacheOriginQuota.
        Added flag to m_delegateMethods struct for new delegate method.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate): Set new flag in m_delegateMethods struct.
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota): Updated for change in
        _WKSecurityOrigin initializer.
        (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota): Added. Calls the new
        delegate method.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reachedApplicationCacheOriginQuota): Added. Forwards the message to
        the UI client.
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebPageProxy.messages.in: Added ReachedApplicationCacheOriginQuota message.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::didReachApplicationCacheOriginQuota): Changed the return
        type to bool, indicating whether the client handled the callback.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::didReachApplicationCacheOriginQuota): Return the
        appropriate value.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h:

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): If the bundle client didn’t
        handle the callback, send a message the the UI process, and update the quota with the reply.

2014-06-23  Tim Horton  <timothy_horton@apple.com>

        [wk2] Synchronously wait a short time for a layer tree update after bringing a web view in-window
        https://bugs.webkit.org/show_bug.cgi?id=134189

        Reviewed by Simon Fraser.

        Make the old behavior of -[WKView endDeferringViewInWindowChangesSync] the default; synchronously wait
        for a fraction of a second when a page that was previously in-window but currently isn't comes back in-window,
        until new content is painted (or we hit a timeout).
        
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::waitForDidUpdateViewState):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateViewState):
        Delegate waitForDidUpdateViewState to the DrawingAreaProxys, because behavior is very dependent on them.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::coreAnimationDidCommitLayers):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateViewState):
        Implement waitForDidUpdateViewState for the RemoteLayerTree; it waits for CommitLayerTree.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::updateViewState):
        (WebKit::WebPageProxy::viewStateDidChange):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        (WebKit::WebPageProxy::waitForDidUpdateViewState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        (WebKit::WebPageProxy::viewSize): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didUpdateViewState):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView endDeferringViewInWindowChangesSync]):
        Always waitForDidUpdateViewState when a page that was previously in-window but currently isn't comes back in-window.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::viewStateDidChange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setViewState):
        (WebKit::WebPage::didUpdateViewStateTimerFired): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::viewStateDidChange):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::viewStateDidChange):
        (WebKit::TiledCoreAnimationDrawingArea::didUpdateViewStateTimerFired):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::didUpdateViewStateTimerFired): Deleted.
        Delegate sending of didUpdateViewState to the DrawingAreas (RemoteLayerTreeDrawingArea won't send it,
            because the UI process waits for CommitLayerTree instead).

2014-06-23  Timothy Horton  <timothy_horton@apple.com>

        [iOS][wk2] Ensure that layers are marked volatile before allowing the process to suspend
        https://bugs.webkit.org/show_bug.cgi?id=134004
        <rdar://problem/17186342>

        Reviewed by Simon Fraser.

        WebKit tries to make layers volatile when unparented, but sometimes isn't given
        a chance to do so before the process gets suspended, so we end up with lots of
        non-volatile surfaces that should really be volatile.

        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::markBackingStoreVolatileImmediately):
        (WebKit::RemoteLayerBackingStoreCollection::markAllBackingStoreVolatileImmediatelyIfPossible):
        Add markAllBackingStoreVolatileImmediatelyIfPossible, which tries to mark *all*
        buffers of *all* backing store, (live and unreachable), (front, back, and secondary),
        volatile right away. It returns false if any buffer isn't marked volatile (because it was in-use).

        * UIProcess/ios/ProcessThrottler.h:
        * UIProcess/ios/ProcessThrottler.mm:
        (WebKit::ProcessThrottler::updateAssertion):
        (WebKit::ProcessThrottler::processReadyToSuspend):
        (WebKit::ProcessThrottler::didCancelProcessSuspension):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::sendCancelProcessWillSuspend):
        (WebKit::WebProcessProxy::didCancelProcessSuspension):
        * UIProcess/WebProcessProxy.h:
        * UIProcess/WebProcessProxy.messages.in:
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:
        If the UI process is waiting for the Web process to confirm that it can suspend
        and something happens (the view is reparented) that cancels the suspension, inform
        the Web process that this happened, so that it can cancel any cleanup that might still be taking place.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        If a view goes in-window, dispatch the view state change immediately without delay,
        to minimize the latency between coming in-window and being ready to go.

        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::markLayersVolatileImmediatelyIfPossible):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
        Schedule a flush when we change the root layer; otherwise, we can end up
        detaching the root layer but changing nothing else, and never committing that change.

        (WebKit::RemoteLayerTreeDrawingArea::markLayersVolatileImmediatelyIfPossible):

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::processWillSuspend):
        (WebKit::WebProcess::cancelProcessWillSuspend):
        (WebKit::WebProcess::markAllLayersVolatileIfPossible):
        (WebKit::WebProcess::processSuspensionCleanupTimerFired):
        When the UI process is going to suspend the process, it sends us ProcessWillSuspend,
        and defers the suspension until we send a ProcessReadyToSuspend back.
        Delay ProcessReadyToSuspend until all layers in our process have been marked volatile.
        We'll keep trying every 20ms until they're all volatile. For safety, the UI process will eventually
        stop waiting for us, but the volatility change is usually applied successfully within the first
        or second timer callback.

2014-06-23  Oliver Hunt  <oliver@apple.com>

        Ensure that we always use symlink free paths when specifying cache directories
        https://bugs.webkit.org/show_bug.cgi?id=134206

        Reviewed by Anders Carlsson.

        Sandboxing will deny symlink based paths, so we use realpath to create extensions.
        This leaves us in the position of an extension using a visually different path
        from other parts of the process code.  This patch simply makes sure that we always
        use the realpath for cache directories, so making debugging easier and also ensuring
        that we don't ever accidentally try to use a path with symlinks that will thus get
        denied.

        * Shared/SandboxExtension.h:
        (WebKit::stringByResolvingSymlinksInPath):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::stringByResolvingSymlinksInPath):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureNetworkProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory):
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        (WebKit::WebContext::platformDefaultWebSQLDatabaseDirectory):
        (WebKit::WebContext::platformDefaultIconDatabasePath):
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):

2014-06-23  Roger Fong  <roger_fong@apple.com>

        Unregister notification observer registered in r170156.
        https://bugs.webkit.org/show_bug.cgi?id=134204.

        Reviewed by Tim Horton.

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

2014-06-23  Dan Bernstein  <mitz@apple.com>

        [Cocoa] No way to grant storage quotas for WebSQL
        https://bugs.webkit.org/show_bug.cgi?id=134175

        Reviewed by Anders Carlsson.

        * Shared/WebSecurityOrigin.h:
        (WebKit::WebSecurityOrigin::securityOrigin): Changed to return a non-const reference.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::exceededDatabaseQuota): Added a completion handler parameter than takes the
        new quota, and changed the return type to void.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient): Changed the override of exceededDatabaseQuota to call the
        completion handler with the new quota, or with the existing quota if the client doesn’t
        implement the callback.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Declared new delegate method.

        * UIProcess/API/Cocoa/_WKSecurityOrigin.h: Added.
        * UIProcess/API/Cocoa/_WKSecurityOrigin.mm: Added.
        (-[_WKSecurityOrigin _initWithSecurityOrigin:WebCore::]): Store the origin in an ivar.
        (-[_WKSecurityOrigin protocol]): Added this accessor.
        (-[_WKSecurityOrigin host]): Ditto.
        (-[_WKSecurityOrigin port]): Ditto.
        * UIProcess/API/Cocoa/_WKSecurityOriginInternal.h: Added.

        * UIProcess/Cocoa/UIDelegate.h: Override API::UIClient::exceededDatabaseQuota. Added flag
        to m_delegateMethods struct for new delegate method.
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate): Set new flag in m_delegateMethods struct.
        (WebKit::UIDelegate::UIClient::exceededDatabaseQuota): Added. Calls the new delegate method.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exceededDatabaseQuota): Updated for the new client interface: now
        passing a completion handler that replies with the new quota.

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files, sorted a group.

2014-06-23  Simon Fraser  <simon.fraser@apple.com>

        More build fixing after r170295.

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

2014-06-23  Anders Carlsson  <andersca@apple.com>

        Give read-only properties proper ownership attributes
        https://bugs.webkit.org/show_bug.cgi?id=134197
        <rdar://problem/16830117>

        Reviewed by Dan Bernstein.

        Also, make WKFrameInfo conform to NSCopying since it's a data-only object and thus intended to be copied.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKFrameInfo.mm:
        (-[WKFrameInfo copyWithZone:]):
        (-[WKFrameInfo setRequest:]): Deleted.
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction setSourceFrame:]):
        (-[WKNavigationAction setTargetFrame:]):
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserScript.h:
        * UIProcess/API/Cocoa/WKWebView.h:

2014-06-23  Gwang Yoon Hwang  <yoon@igalia.com>

        Unreviewed, GTK build fix after r170274.

        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        Drawing::m_webPage changed to reference.

        (WebKit::DrawingAreaImpl::DrawingAreaImpl):
        (WebKit::DrawingAreaImpl::setNeedsDisplay):
        (WebKit::DrawingAreaImpl::setNeedsDisplayInRect):
        (WebKit::DrawingAreaImpl::forceRepaint):
        (WebKit::DrawingAreaImpl::updatePreferences):
        (WebKit::DrawingAreaImpl::layerHostDidFlushLayers):
        (WebKit::DrawingAreaImpl::updateBackingStoreState):
        (WebKit::DrawingAreaImpl::sendDidUpdateBackingStoreState):
        (WebKit::DrawingAreaImpl::enterAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::exitAcceleratedCompositingMode):
        (WebKit::DrawingAreaImpl::display):
        * WebProcess/WebPage/DrawingAreaImpl.h:

2014-06-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        REGRESSION(r170163): It made everything crash on EFL
        https://bugs.webkit.org/show_bug.cgi?id=134097

        Unreviewed EFL layout test and perforamcne crash fix.

        * WebProcess/WebPage/WebPage.cpp: Add a null check for m_mainFrame.
        (WebKit::WebPage::didCompletePageTransition):

2014-06-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed EFL build fix since r170274. Use reference for m_webPage member variable.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::CoordinatedDrawingArea):
        (WebKit::CoordinatedDrawingArea::setNeedsDisplay):
        (WebKit::CoordinatedDrawingArea::setNeedsDisplayInRect):
        (WebKit::CoordinatedDrawingArea::forceRepaint):
        (WebKit::CoordinatedDrawingArea::updatePreferences):
        (WebKit::CoordinatedDrawingArea::mainFrameContentSizeChanged):
        (WebKit::CoordinatedDrawingArea::layerHostDidFlushLayers):
        (WebKit::CoordinatedDrawingArea::updateBackingStoreState):
        (WebKit::CoordinatedDrawingArea::sendDidUpdateBackingStoreState):
        (WebKit::CoordinatedDrawingArea::suspendPainting):
        (WebKit::CoordinatedDrawingArea::resumePainting):
        (WebKit::CoordinatedDrawingArea::enterAcceleratedCompositingMode):
        (WebKit::CoordinatedDrawingArea::display):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:

2014-06-22  Tim Horton  <timothy_horton@apple.com>

        [iOS][wk2] Swiping back sometimes results in a missing (not blank) swipe snapshot
        https://bugs.webkit.org/show_bug.cgi?id=134181

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::setRenderTreeSize):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewGestureController.h:
        Make it explicit that we should only remove the swipe snapshot when a
        big-enough render tree size arrives *after the swipe ends*.

2014-06-22  Tim Horton  <timothy_horton@apple.com>

        Thread some references through the remote layer tree code
        https://bugs.webkit.org/show_bug.cgi?id=134177

        Reviewed by Zalan Bujtas.

        A first pass at references for never-null things (first pass because I didn't touch the collections).
        Things that aren't straightforward reference-threading:

        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        Remove the unimplemented/nonexistant RemoteLayerBackingStoreCollection::create.
        Make RemoteLayerBackingStoreCollection constructor not take a context, because m_context is never used.

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        Factor out grabbing the PlatformLayerID in a few places.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        Use WebPage::mainFrameView() instead of WebPage::corePage()->mainFrame().view().

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        * WebProcess/WebPage/DrawingArea.cpp:
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:om):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        References.
        
2014-06-22  Anders Carlsson  <andersca@apple.com>

        Replace a couple of uses of bind with lambdas
        https://bugs.webkit.org/show_bug.cgi?id=134172

        Reviewed by Sam Weinig.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::postConnectionDidCloseOnConnectionWorkQueue):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::dispatchMessage):
        (IPC::Connection::dispatchConnectionDidClose): Deleted.
        * Platform/IPC/Connection.h:
        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::NP_Deallocate):
        * UIProcess/Storage/LocalStorageDatabase.cpp:
        (WebKit::LocalStorageDatabase::scheduleDatabaseUpdate):
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        (WebKit::NetscapePlugin::handlePluginThreadAsyncCall): Deleted.
        * WebProcess/Plugins/Netscape/NetscapePlugin.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::forceRepaintAsync):
        (WebKit::TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition):

2014-06-20  Simon Fraser  <simon.fraser@apple.com>

        Have scrollingTreeAsText() dump the non-fast-scrollable region
        https://bugs.webkit.org/show_bug.cgi?id=134149

        Reviewed by Sam Weinig.

        Dump the non-fast-scrollable region (as an array of rects).

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingTreeTextStream::dump):

2014-06-22  Anders Carlsson  <andersca@apple.com>

        Add IPC decoding support to BackForwardListState
        https://bugs.webkit.org/show_bug.cgi?id=134171

        Reviewed by Dan Bernstein.

        * Shared/SessionState.cpp:
        (WebKit::isValidEnum):
        (WebKit::HTTPBody::Element::decode):
        (WebKit::HTTPBody::decode):
        (WebKit::FrameState::decode):
        (WebKit::PageState::decode):
        (WebKit::BackForwardListState::decode):
        * Shared/SessionState.h:

2014-06-22  Anders Carlsson  <andersca@apple.com>

        Address a review comment.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataDecoder::markInvalid):
        (WebKit::decodeFormDataElement):

2014-06-21  Anders Carlsson  <andersca@apple.com>

        Implement the rest of back forward tree decoding
        https://bugs.webkit.org/show_bug.cgi?id=134166

        Reviewed by Sam Weinig.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataDecoder::operator>>):
        (WebKit::decodeFormDataElement):
        (WebKit::decodeFormData):
        (WebKit::decodeBackForwardTreeNode):

2014-06-22  Dan Bernstein  <mitz@apple.com>

        [iOS] WKWebViewConfiguration.allowsInlineMediaPlayback has no effect
        https://bugs.webkit.org/show_bug.cgi?id=134170

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Fixed a typo.

2014-06-21  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the GTK+ build after r170253.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate): WebPreferences::create()
        now takes an additional String argument.

2014-06-21  Dan Bernstein  <mitz@apple.com>

        CallbackMap::put should be able to take an unwrapped function
        https://bugs.webkit.org/show_bug.cgi?id=134104

        Reviewed by Anders Carlsson.

        * UIProcess/GenericCallback.h:
        (WebKit::CallbackMap::put): Added an overload that takes a function and creates and puts a
        callback. Changed both overloads of put() to return the callback ID.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::takeSnapshot):

2014-06-21  Anders Carlsson  <andersca@apple.com>

        Make it possible to override debug preferences on a per-identifier basis as well as globally
        https://bugs.webkit.org/show_bug.cgi?id=134164

        Reviewed by Dan Bernstein.

        * Shared/WebPreferencesDefinitions.h:
        * Shared/WebPreferencesKeys.cpp:
        * Shared/WebPreferencesKeys.h:
        * Shared/WebPreferencesStore.cpp:
        (WebKit::defaults):
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreate):
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::create):
        (WebKit::WebPreferences::createWithLegacyDefaults):
        (WebKit::WebPreferences::WebPreferences):
        * UIProcess/WebPreferences.h:
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::makeKey):
        (WebKit::debugUserDefaultsValue):
        (WebKit::setDebugBoolValueIfInUserDefaults):
        (WebKit::WebPreferences::platformInitializeStore):

2014-06-21  Anders Carlsson  <andersca@apple.com>

        Begin work on decoding form data
        https://bugs.webkit.org/show_bug.cgi?id=134163

        Reviewed by Sam Weinig.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataDecoder::operator>>):
        (WebKit::HistoryEntryDataDecoder::isValid):
        (WebKit::isValidEnum):
        (WebKit::decodeFormDataElement):
        (WebKit::decodeFormData):
        (WebKit::decodeBackForwardTreeNode):

2014-06-21  Anders Carlsson  <andersca@apple.com>

        Only initialize WebPreferences from NSUserDefaults if there's an identifier
        https://bugs.webkit.org/show_bug.cgi?id=134162

        Reviewed by Sam Weinig.

        We don't want to allow changing preferences by registering user defaults.

        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::makeKey):
        (WebKit::WebPreferences::platformInitializeStore):

2014-06-21  Anders Carlsson  <andersca@apple.com>

        Begin work on decoding the back/forward tree
        https://bugs.webkit.org/show_bug.cgi?id=134161

        Reviewed by Sam Weinig.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntries):
        (WebKit::HistoryEntryDataDecoder::operator>>):
        (WebKit::HistoryEntryDataDecoder::decodeArithmeticType):
        (WebKit::HistoryEntryDataDecoder::bufferIsLargeEnoughToContain):
        (WebKit::decodeBackForwardTreeNode):
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntryData):
        (WebKit::HistoryEntryDataDecoder::decode): Deleted.

2014-06-21  Brady Eidson  <beidson@apple.com>

        Gamepad API - Deprecate the existing implementation
        https://bugs.webkit.org/show_bug.cgi?id=134108

        Reviewed by Timothy Hatcher.

        -Add new "GAMEPAD_DEPRECATED" build flag, moving the existing implementation to use it
        -Move some implementation files into a "deprecated" subdirectory.

        * Configurations/FeatureDefines.xcconfig:

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Implement more of HistoryEntryDataDecoder
        https://bugs.webkit.org/show_bug.cgi?id=134146

        Reviewed by Sam Weinig.

        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::HistoryEntryDataDecoder::HistoryEntryDataDecoder):
        (WebKit::HistoryEntryDataDecoder::operator>>):
        (WebKit::HistoryEntryDataDecoder::decode):
        (WebKit::HistoryEntryDataDecoder::decodeFixedLengthData):
        (WebKit::HistoryEntryDataDecoder::alignBufferPosition):
        (WebKit::HistoryEntryDataDecoder::alignedBuffer):
        (WebKit::HistoryEntryDataDecoder::alignedBufferIsLargeEnoughToContain):
        (WebKit::HistoryEntryDataDecoder::markInvalid):
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntryData):

2014-06-21  Commit Queue  <commit-queue@webkit.org>

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

        GTK/EFL bindings generator works differently, making this
        patch not work there.  Will fix entire patch after a rollout.
        (Requested by bradee-oh on #webkit).

        Reverted changeset:

        "Gamepad API - Deprecate the existing implementation"
        https://bugs.webkit.org/show_bug.cgi?id=134108
        http://trac.webkit.org/changeset/170244

2014-06-21  Brady Eidson  <beidson@apple.com>

        Gamepad API - Deprecate the existing implementation
        https://bugs.webkit.org/show_bug.cgi?id=134108

        Reviewed by Timothy Hatcher.

        -Add new "GAMEPAD_DEPRECATED" build flag, moving the existing implementation to use it
        -Add the "Deprecated" suffix to some implementation files

        * Configurations/FeatureDefines.xcconfig:

2014-06-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][WK2][EFL] Page is moved to (0,0) position before rendering content
        https://bugs.webkit.org/show_bug.cgi?id=133300

        Reviewed by Csaba Osztrogonác.

        When new page is loaded, PageViewportController::didCommitLoad() calls PageViewportController::syncVisibleContents()
        with initial position via applyPositionAfterRenderingContents() before starting to render
        new page by PageViewportController::didRenderFrame(). This call flow causes that webview shows
        incomplete tiles to the user during a few milliseconds. To fix showing incomplete tiles during
        the page loading, this patch adds a flag so that we don't show the incomplete tiles until showing
        new page.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::setWaitingForNewPage):
        (EwkView::waitingForNewPage):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didCommitLoadForFrame):
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::didChangeVisibleContents):
        * UIProcess/efl/ViewClientEfl.cpp:
        (WebKit::ViewClientEfl::didRenderFrame):
        (WebKit::ViewClientEfl::didCompletePageTransition):

2014-06-21  Ryosuke Niwa  <rniwa@webkit.org>

        Commit queue has been failing due to a build failure in WKFoundation.h
        https://bugs.webkit.org/show_bug.cgi?id=134152

        Reviewed by Csaba Osztrogonác.
        Landed by Brady Eidson.

        The build failure was caused by WKFoundation.h erroneously redefining
        NSURLSessionAuthChallengeDisposition even when building with 10.9 SDK.

        The availability of this type depends on the version of SDK,
        not the target operating system.

        * Shared/API/Cocoa/WKFoundation.h:

2014-06-21  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Removing PAGE_VISIBILITY_API compile guard.
        https://bugs.webkit.org/show_bug.cgi?id=133844

        Reviewed by Gavin Barraclough.

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

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Implement more of LegacySessionStateDecoder
        https://bugs.webkit.org/show_bug.cgi?id=134145

        Reviewed by Sam Weinig.

        * Shared/SessionState.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntry):
        (WebKit::HistoryEntryDataDecoder::HistoryEntryDataDecoder):
        (WebKit::HistoryEntryDataDecoder::finishDecoding):
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntryData):
        * UIProcess/mac/LegacySessionStateCoding.h:

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Implement more of LegacySessionStateDecoder
        https://bugs.webkit.org/show_bug.cgi?id=134144

        Reviewed by Sam Weinig.

        * Shared/SessionState.cpp:
        (WebKit::BackForwardListState::encode):
        (WebKit::SessionState::encode): Deleted.
        * Shared/SessionState.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::LegacySessionStateDecoder::decodeSessionState):
        (WebKit::LegacySessionStateDecoder::decodeSessionHistory):
        (WebKit::LegacySessionStateDecoder::decodeV0SessionHistory):
        (WebKit::LegacySessionStateDecoder::decodeV1SessionHistory):
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntries):
        (WebKit::LegacySessionStateDecoder::decodeSessionHistoryEntry):
        * UIProcess/mac/LegacySessionStateCoding.h:

2014-06-20  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed. build fix for the cmake based ports since r170188

        * CMakeLists.txt: Added LegacySessionState.cpp in source list.

2014-06-20  Dan Bernstein  <mitz@apple.com>

        [Cocoa] No way to get the main frame’s main resource’s data
        https://bugs.webkit.org/show_bug.cgi?id=134113

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getMainResourceDataWithCompletionHandler:]): Added. Calls
        WebPageProxy::getMainResourceDataOfFrame and invokes the completion handler form the
        callback.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared new method.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getMainResourceDataOfFrame): Made it safe to pass a NULL frame into
        this function.

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Introduce a WKSessionStateRef object
        https://bugs.webkit.org/show_bug.cgi?id=134136

        Reviewed by Tim Horton.

        WKSessionStateRef is going to hold session state, making it possible to migrate state from one 
        webpage to another without having to do any serialization/deserialization.

        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/SessionState.cpp:
        (WebKit::SessionState::encode):
        * Shared/SessionState.h:
        * UIProcess/API/APISessionState.cpp: Added.
        (API::SessionState::create):
        (API::SessionState::SessionState):
        (API::SessionState::~SessionState):
        * UIProcess/API/APISessionState.h:
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKSessionStateRef.cpp:
        (WKSessionStateCreateFromData):
        * UIProcess/API/C/WKSessionStateRef.h:
        * UIProcess/mac/LegacySessionStateCoding.cpp:
        (WebKit::LegacySessionStateDecoder::LegacySessionStateDecoder):
        (WebKit::LegacySessionStateDecoder::~LegacySessionStateDecoder):
        (WebKit::LegacySessionStateDecoder::decodeSessionState):
        * UIProcess/mac/LegacySessionStateCoding.h:
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-19  Enrica Casucci  <enrica@apple.com>

        iOS WebKit2: selection handles become too large when zooming a page.
        https://bugs.webkit.org/show_bug.cgi?id=134084
        <rdar://problem/16799164>

        Reviewed by Benjamin Poulain.

        Since the document view is zoomed, we add a subview that has the inverse transform
        of the document view. This new view becomes the root for the selection hierarchy.
        The new view has zero size, not to interfere with the existing gestures on the WKContenView
        therefore we implement hitTest to detect interaction with the selection elements.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView unscaledView]):
        (-[WKContentView inverseScale]):
        (-[WKContentView _updateUnscaledView]):
        (-[WKContentView hitTest:withEvent:::]):
        (-[WKContentView selectedTextRange]):

2014-06-20  Timothy Horton  <timothy_horton@apple.com>

        Snapshotting WKThumbnailViews should not tell Web processes backing unparented WKViews that they're in window
        https://bugs.webkit.org/show_bug.cgi?id=134134
        <rdar://problem/17402119>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setThumbnailView:]):
        Re-evaluating our in-window state is only useful if we're going to use the live layer tree;
        snapshots can be taken of unparented views with no trouble. Plus, doing so sets off a chain of
        expensive things in the Web process which we can avoid if using snapshots.

2014-06-20  Timothy Horton  <timothy_horton@apple.com>

        WKThumbnailView should only use live layer trees before the snapshot arrives for parented WKViews
        https://bugs.webkit.org/show_bug.cgi?id=134129
        <rdar://problem/17401591>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        Add a white background to WKThumbnailView, so that if we have no snapshot and no layer tree,
        the view isn't transparent.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _updateThumbnailViewLayer]):
        We currently pull the live layer tree into the WKThumbnailView even in snapshot mode,
        before the snapshot arrives, to avoid flashing when transitioning a live WKView to a thumbnail view.
        This is, however, not useful for unparented WKViews, because their layer tree will be detached
        and we'll flash anyway. So, only do that when the WKView is parented.

2014-06-20  Geoffrey Garen  <ggaren@apple.com>

        WebKit delegate methods should document their default behaviors
        https://bugs.webkit.org/show_bug.cgi?id=134132

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:

2014-06-20  Simon Fraser  <simon.fraser@apple.com>

        Fix lots of WK2 test crashes.

        We don't always have a ScrollingCoordinator.

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

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Always use XPC on iOS
        https://bugs.webkit.org/show_bug.cgi?id=134130

        Reviewed by Sam Weinig.

        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::platformGetLaunchOptions):
        (WebKit::shouldUseXPC): Deleted.

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Shared/SessionState.cpp:

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Add ArgumentEncoder support to PageState and friends
        https://bugs.webkit.org/show_bug.cgi?id=134128

        Reviewed by Andreas Kling.

        Change the classes to structs, get rid of the constructors/destructors
        and add encode member functions.

        * Shared/SessionState.cpp:
        (WebKit::HTTPBody::Element::encode):
        (WebKit::HTTPBody::encode):
        (WebKit::FrameState::encode):
        (WebKit::PageState::encode):
        (WebKit::HTTPBody::Element::Element): Deleted.
        (WebKit::HTTPBody::Element::~Element): Deleted.
        (WebKit::FrameState::FrameState): Deleted.
        (WebKit::FrameState::~FrameState): Deleted.
        (WebKit::PageState::PageState): Deleted.
        (WebKit::PageState::~PageState): Deleted.
        * Shared/SessionState.h:
        (WebKit::HTTPBody::Element::type): Deleted.

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Add encoding and decoding support for WTF::Optional
        https://bugs.webkit.org/show_bug.cgi?id=134125

        Reviewed by Andreas Kling.

        * Platform/IPC/ArgumentCoders.h:
        (IPC::ArgumentCoder<WTF::Optional<T>>::encode):
        (IPC::ArgumentCoder<WTF::Optional<T>>::decode):

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Give NPAPI post requests a default content type
        https://bugs.webkit.org/show_bug.cgi?id=134120

        Reviewed by Andreas Kling.

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

2014-06-20  Simon Fraser  <simon.fraser@apple.com>

        Always commit the scrolling tree when we flush layers
        https://bugs.webkit.org/show_bug.cgi?id=134115

        Reviewed by Beth Dakin.
        
        The scrolling state tree contains bare pointers to GraphicsLayers, which get
        converted to CALayers at commit time. To avoid a window of time where those
        GraphicsLayer pointers go stale, commit the scrolling tree whenever we flush the
        compositing layer tree.

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

2014-06-19  Simon Fraser  <simon.fraser@apple.com>

        [iOS WebKit2] Make -webkit-overflow-scrolling:touch work in iframes (breaks MSWord previews)
        https://bugs.webkit.org/show_bug.cgi?id=134085
        <rdar://problem/16440586>

        Reviewed by Tim Horton.
        
        Add some debug-only assertions that check that the number of nodes we encoded is
        the expected number.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::encode):

2014-06-19  Simon Fraser  <simon.fraser@apple.com>

        Handle scrolling tree modifications which remove intermediate nodes
        https://bugs.webkit.org/show_bug.cgi?id=134082

        Reviewed by Tim Horton.

        When updating the scrolling tree from the state tree, we failed to maintain
        the children arrays correctly. Fix by removing all children on scrolling nodes,
        and allowing the calls on children to add them back. A temporary hash map
        keeps the nodes alive.
        
        The state tree's m_nodesRemovedSinceLastCommit was also made into a HashSet,
        to make it easier to handle removal followed by re-insertion.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::RemoteScrollingTreeTextStream::dump):

2014-06-19  Simon Fraser  <simon.fraser@apple.com>

        Make ScrollingTreeNodes refounted, for easier tree reconfiguration
        https://bugs.webkit.org/show_bug.cgi?id=134075

        Reviewed by Tim Horton.

        Make ScrollingTreeNode be ref-counted.

        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createNode):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::create):
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::createScrollingTreeNode):

2014-06-20  Dan Bernstein  <mitz@apple.com>

        [Cocoa] No way to get the MIME type of the main frame
        https://bugs.webkit.org/show_bug.cgi?id=134111

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _MIMEType]): Added. Returns the MIME type of the main frame, or nil.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-06-20  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS]: Overrelease of RetainPtr object in file upload
        https://bugs.webkit.org/show_bug.cgi?id=134072

        Reviewed by Brady Eidson.

        This ivar is a RetainPtr, the release will be done automatically
        for us when we assign to nil or destruct.

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

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out new session state classes
        https://bugs.webkit.org/show_bug.cgi?id=134110

        Reviewed by Geoffrey Garen.

        The basic idea is that these classes will replace the data blobs representing HistoryItems
        that we currently send back and forth between the web and UI processes.
        
        * Shared/SessionState.cpp: Added.
        (WebKit::HTTPBody::Element::Element):
        (WebKit::HTTPBody::Element::~Element):
        (WebKit::FrameState::FrameState):
        (WebKit::FrameState::~FrameState):
        (WebKit::PageState::PageState):
        (WebKit::PageState::~PageState):
        * Shared/SessionState.h: Added.
        (WebKit::HTTPBody::Element::type):
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Rename SessionState to LegacySessionState
        https://bugs.webkit.org/show_bug.cgi?id=134107

        Reviewed by Dan Bernstein.

        * Shared/LegacySessionState.cpp: Renamed from Source/WebKit2/Shared/SessionState.cpp.
        (IPC::ArgumentCoder<RefPtr<T>>::encode):
        (IPC::ArgumentCoder<RefPtr<T>>::decode):
        (WebKit::LegacySessionState::LegacySessionState):
        (WebKit::LegacySessionState::isEmpty):
        (WebKit::LegacySessionState::encode):
        (WebKit::LegacySessionState::decode):
        * Shared/LegacySessionState.h: Renamed from Source/WebKit2/Shared/SessionState.h.
        (WebKit::LegacySessionState::list):
        (WebKit::LegacySessionState::currentIndex):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::restoreSession):
        (WebKit::WebPage::restoreSessionAndNavigateToCurrentItem):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-06-20  Anders Carlsson  <andersca@apple.com>

        Document the underlying types of the WKWindowFeatures rect properties
        https://bugs.webkit.org/show_bug.cgi?id=134103

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWindowFeatures.h:

2014-06-20  Zan Dobersek  <zdobersek@igalia.com>

        PluginProcessMainUnix should only scan for plugins when X11 plugin architecture is enabled
        https://bugs.webkit.org/show_bug.cgi?id=134098

        Reviewed by Carlos Garcia Campos.

        * PluginProcess/unix/PluginProcessMainUnix.cpp: Guard the call to NetscapePluginModule::scanPlugin()
        with PLUGIN_ARCHITECTURE(X11) since the declaration has the same build guard. In case the X11 plugin
        architecture is not enabled the program exits with EXIT_FAILURE.

2014-06-20  Tim Horton  <timothy_horton@apple.com>

        LayerPool’d PlatformCALayerRemote/RemoteLayerBackingStore can have stale context pointers
        https://bugs.webkit.org/show_bug.cgi?id=134050
        <rdar://problem/17315114>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::layerPool):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        (WebKit::RemoteLayerTreeContext::layerPool):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::buildTransaction):
        Ensure that layers being committed are always in the context that is committing them.
        Use a LayerPool per RemoteLayerTreeContext, to avoid moving layers between contexts.

2014-06-20  Tim Horton  <timothy_horton@apple.com>

        WKContentViewInteraction isn't cleaned up when the Web Content process crashes
        https://bugs.webkit.org/show_bug.cgi?id=134080
        <rdar://problem/17387652> and <rdar://problem/16848360>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _processDidExit]):
        Tear down WKContentViewInteraction when the process crashes.

        (-[WKContentView _didRelaunchProcess]):
        Set WKContentViewInteraction back up when the process is relaunched.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        Clear the SmartMagnificationController, which is a message receiver and thus must be re-created with the new page.
        Remove all gesture recognizers from the content view.
        Clear _fileUploadPanel, else we'll get an assert the next time we try to open one.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Give the PageClient a chance to clean up *before* we clean up internals;
        it is at a higher level and some cleanup depends on WebPageProxy members
        not having been cleared yet.

2014-06-19  Dan Bernstein  <mitz@apple.com>

        Removed unused SPI -[WKWebView _runJavaScriptInMainFrame:].

        Rubber-stamped by Simon Fraser.

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

2014-06-19  Dan Bernstein  <mitz@apple.com>

        Use a single map for all callback types in WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=134069

        Reviewed by Tim Horton.

        * UIProcess/GenericCallback.h:
        (WebKit::CallbackMap::take):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::printFinishedCallback):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::drawPagesForPrinting):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::attributedStringForCharacterRangeCallback):

2014-06-19  Anders Carlsson  <andersca@apple.com>

        Another build fix attempt.

        * Shared/API/Cocoa/WKFoundation.h:

2014-06-19  Dan Bernstein  <mitz@apple.com>

        [iOS] Legacy processes are installed inside WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=134079

        Reviewed by Anders Carlsson.

        * Configurations/All.xcconfig: Exclude the legacy processes on iOS so they don’t get copied.
        * Configurations/BaseLegacyProcess.xcconfig: Set SKIP_INSTALL to YES on iOS.

2014-06-19  Anders Carlsson  <andersca@apple.com>

        It's OS X, not OSX...

        * Shared/API/Cocoa/WKFoundation.h:

2014-06-19  Antti Koivisto  <antti@apple.com>

        Unfreeze the layer tree on DidFirstVisuallyNonEmptyLayout
        https://bugs.webkit.org/show_bug.cgi?id=134073

        Reviewed by Simon Fraser.
        
        DidFirstLayout is too early and we usually get a blank page. This doesn't match the existing iOS behavior either.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2014-06-19  Anders Carlsson  <andersca@apple.com>

        Try to fix the Mavericks build.

        * Shared/API/Cocoa/WKFoundation.h:

2014-06-19  Sam Weinig  <sam@webkit.org>

        [Cocoa] Need SPI to determine if the WKWebView is displaying a standalone image
        https://bugs.webkit.org/show_bug.cgi?id=134071

        Reviewed by Anders Carlsson.

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

2014-06-19  Dan Bernstein  <mitz@apple.com>

        Use a single map for all callback types in WebPageProxy
        https://bugs.webkit.org/show_bug.cgi?id=134069

        Reviewed by Anders Carlsson.

        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::as): Added. Performs a dynamic cast to a specific callback type.
        (WebKit::CallbackBase::CallbackBase): Added a type parameter, which is used to initialize
        the new m_type member.
        (WebKit::GenericCallback::GenericCallback): Pass the type to the base class constructor.
        (WebKit::GenericCallback::type): Added. Returns a unique type.
        (WebKit::GenericCallback::invalidate): Now virtual.

        (WebKit::CallbackMap::put): Adds the callback to the map.
        (WebKit::CallbackMap::take): Removes the callback from the map, and dynamically casts it to
        the specified type.
        (WebKit::CallbackMap::invalidate): Invalidates the map.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::clearLoadDependentCallbacks):
        (WebKit::WebPageProxy::voidCallback):
        (WebKit::WebPageProxy::dataCallback):
        (WebKit::WebPageProxy::imageCallback):
        (WebKit::WebPageProxy::stringCallback):
        (WebKit::WebPageProxy::scriptValueCallback):
        (WebKit::WebPageProxy::computedPagesCallback):
        (WebKit::WebPageProxy::validateCommandCallback):
        (WebKit::WebPageProxy::unsignedCallback):
        (WebKit::WebPageProxy::editingRangeCallback):
        (WebKit::WebPageProxy::rectForCharacterRangeCallback):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::computePagesForPrinting):
        (WebKit::WebPageProxy::drawRectToImage):
        (WebKit::WebPageProxy::drawPagesToPDF):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::gestureCallback):
        (WebKit::WebPageProxy::touchesCallback):
        (WebKit::WebPageProxy::autocorrectionDataCallback):
        (WebKit::WebPageProxy::dictationContextCallback):
        (WebKit::WebPageProxy::autocorrectionContextCallback):
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::requestAutocorrectionData):
        (WebKit::WebPageProxy::applyAutocorrection):
        (WebKit::WebPageProxy::requestDictationContext):
        (WebKit::WebPageProxy::requestAutocorrectionContext):
        (WebKit::WebPageProxy::selectWithTwoTouches):

2014-06-19  Anders Carlsson  <andersca@apple.com>

        No way to handle HTTP Authentication with WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=134067
        <rdar://problem/17317874>

        Reviewed by Dan Bernstein.

        Add a public webView:didReceiveAuthenticationChallenge:completionHandler: delegate method and get rid of the SPI.
        
        * Shared/API/Cocoa/WKFoundation.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame):

2014-06-18  Roger Fong  <roger_fong@apple.com>

        Don't kill the UIProcess until all local storage transactions have been committed.
        https://bugs.webkit.org/show_bug.cgi?id=134042.
        <rdar://problem/16660724>.

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm: Add a listener for the application will terminate notification.
        (-[WKView _applicationWillTerminate:]):
        (-[WKView initWithFrame:context:configuration:webView:]):
        * UIProcess/WebContext.cpp: Calls code in StorageManager to cleanup local storage transactions upon application termination.
        (WebKit::WebContext::applicationWillTerminate):
        * UIProcess/WebContext.h:

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::applicationWillTerminate):
        Dispatch local storage cleanup task to background thread and make sure the UIProcess can't exit early.
        * UIProcess/Storage/StorageManager.h:

2014-06-19  Oliver Hunt  <oliver@apple.com>

        Switch to using the process parameters during initialisation
        to determine whether we hsould be using the network process.

        RS=Sam Weinig

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-06-19  Pratik Solanki  <psolanki@apple.com>

        Copy SharedBuffer data into IPC message directly
        https://bugs.webkit.org/show_bug.cgi?id=133920

        Reviewed by Anders Carlsson.

        When data array callbacks are enabled, we currently merge all the CFDataRefs in SharedBuffer
        into one contiguous memory buffer when creating IPC::DataReference. This patch creates a
        subclass of DataReference that uses SharedBuffer::getSomeData() to copy the data directly
        into the IPC message.

        * NetworkProcess/AsynchronousNetworkLoaderClient.cpp:
        (WebKit::AsynchronousNetworkLoaderClient::didReceiveBuffer):
        * Platform/IPC/ArgumentEncoder.cpp:
        (IPC::ArgumentEncoder::reserve): Added.
        (IPC::ArgumentEncoder::grow):
        * Platform/IPC/ArgumentEncoder.h:
        * Platform/IPC/DataReference.cpp:
        (IPC::SharedBufferDataReference::encode):
        * Platform/IPC/DataReference.h:
        (IPC::DataReference::~DataReference):

2014-06-18  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the GTK+ build after r170114.

        * UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:
        (webkit_authentication_request_get_proposed_credential):
        The core() accessor has been renamed to credential().

2014-06-18  Dan Bernstein  <mitz@apple.com>

        Try to fix the Mountain Lion build.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame):

2014-06-18  Tim Horton  <timothy_horton@apple.com>

        Remove RemoteLayerBackingStore’s RemoteLayerTreeContext pointer
        https://bugs.webkit.org/show_bug.cgi?id=134055

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::~RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::drawInContext):
        Remove RemoteLayerBackingStore's RemoteLayerTreeContext pointer. Instead, use the PlatformCALayer's.
        Pass the PlatformCALayer in to the constructor, and remove it from ensureBackingStore();
        RemoteLayerBackingStore is (for now) strictly tied to a single layer.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::ensureBackingStore):
        (WebKit::PlatformCALayerRemote::updateBackingStore):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        (WebKit::PlatformCALayerRemote::context):

2014-06-18  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Modernize one-method authentication
        https://bugs.webkit.org/show_bug.cgi?id=134051

        Reviewed by Anders Carlsson.

        Instead of an NSURLConnection-style delegate method that takes a challenge and responds to
        its sender, provide an NSURLSession-style method that takes a challenge and a completion
        handler.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Declared new delegate method, replacing
        old unused method.
        * UIProcess/Cocoa/NavigationState.h: Renamed flag in m_navigationDelegateMethods struct.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Check for new delegate method and update
        new flag.

        (WebKit::NavigationState::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame): If
        the delegate implements the new method, return true (if it cannot handle the protection
        space, it can reject it through the completion handler), except for server-trust
        authentication, which is not supported yet.
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): If the
        delegate implements the new method, call it, passing a completion handler that calls the
        right AuthenticationDecisionListener function based on its disposition and credential
        parameters.

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Make FrameLoadType a strongly typed enum
        https://bugs.webkit.org/show_bug.cgi?id=134047

        Reviewed by Andreas Kling.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        (WebKit::shouldReuseCommittedSandboxExtension):
        (WebKit::WebPage::didCommitLoad):

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Simplify WebSecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=134049

        Reviewed by Andreas Kling.

        * Shared/API/c/WKSecurityOrigin.cpp:
        (WKSecurityOriginCreateFromString):
        (WKSecurityOriginCreateFromDatabaseIdentifier):
        (WKSecurityOriginCopyDatabaseIdentifier):
        (WKSecurityOriginCopyToString):
        (WKSecurityOriginCopyProtocol):
        (WKSecurityOriginCopyHost):
        (WKSecurityOriginGetPort):
        * Shared/WebSecurityOrigin.h:
        (WebKit::WebSecurityOrigin::securityOrigin):
        (WebKit::WebSecurityOrigin::createFromDatabaseIdentifier): Deleted.
        (WebKit::WebSecurityOrigin::protocol): Deleted.
        (WebKit::WebSecurityOrigin::host): Deleted.
        (WebKit::WebSecurityOrigin::port): Deleted.
        (WebKit::WebSecurityOrigin::databaseIdentifier): Deleted.
        (WebKit::WebSecurityOrigin::toString): Deleted.
        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::providerDidUpdateNotificationPolicy):
        (WebKit::WebNotificationManagerProxy::providerDidRemoveNotificationPolicies):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::deleteEntriesForOrigin):
        * UIProcess/Storage/StorageManager.h:
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::deleteEntriesForOrigin):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::didGetDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::didGetDatabaseOrigins):
        (WebKit::WebDatabaseManagerProxy::deleteDatabaseWithNameForOrigin):
        (WebKit::WebDatabaseManagerProxy::deleteDatabasesForOrigin):
        (WebKit::WebDatabaseManagerProxy::setQuotaForOrigin):
        (WebKit::WebDatabaseManagerProxy::didModifyOrigin):
        (WebKit::WebDatabaseManagerProxy::didModifyDatabase):
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::didGetStorageDetailsByOrigin):
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::deleteEntriesForOrigin):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::exceededDatabaseQuota):
        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::clearCacheForOrigin):
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:request:window:]):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::exceededDatabaseQuota):

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Add back WKPageRunJavaScriptInMainFrame_b for now
        https://bugs.webkit.org/show_bug.cgi?id=134045
        <rdar://problem/17368879>

        Reviewed by Tim Horton.

        Reverted changeset:

        "Remove WKPageRunJavaScriptInMainFrame_b"
        https://bugs.webkit.org/show_bug.cgi?id=133926
        http://trac.webkit.org/changeset/169991

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Simplify WebPageProxy::saveRecentSearches and WebPageProxy::loadRecentSearches
        https://bugs.webkit.org/show_bug.cgi?id=134041

        Reviewed by Andreas Kling.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::saveRecentSearches):
        (WebKit::WebPageProxy::loadRecentSearches):

2014-06-18  Simon Fraser  <simon.fraser@apple.com>

        Make ScrollingStateNodes refcounted, and other minor cleanup
        https://bugs.webkit.org/show_bug.cgi?id=134040

        Reviewed by Beth Dakin.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::encodeNodeAndDescendants):

2014-06-18  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Do not add padding when magnifying replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=134019

        Reviewed by Tim Horton.

        Having margins for regular blocks make sense to improve readability. For replaced elements,
        we should follow iOS's UI and display edge to edge.

        * UIProcess/ios/SmartMagnificationController.mm:
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):

2014-06-18  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Re-sync didCommitLoadForMainFrame with its corresponding tile update
        https://bugs.webkit.org/show_bug.cgi?id=134009

        Reviewed by Tim Horton.

        WKWebView assumed the first _didCommitLayerTree: after _didCommitLoadForMainFrame
        had the state of the page being loaded.

        This is not always true. Sometimes, a set of tiles can be rendering asynchronously while the next
        page is loaded, and does not flush the queue until after didCommitLoadForMainFrame is executed.

        Tim introduced a transactionID with each layer tree update. This patch uses that to synchronize
        WKWebView with the right set of tiles.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLoadForMainFrame]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::nextLayerTreeTransactionID):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.messages.in:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::willCommitLayerTree):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Simplify WebCredential
        https://bugs.webkit.org/show_bug.cgi?id=134036

        Reviewed by Andreas Kling.

        * UIProcess/API/C/WKCredential.cpp:
        (WKCredentialCreate):
        (WKCredentialCreateWithCertificateInfo):
        (WKCredentialCopyUser):
        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::useCredential):
        * UIProcess/Authentication/WebCredential.cpp:
        (WebKit::WebCredential::credential):
        (WebKit::WebCredential::core): Deleted.
        (WebKit::WebCredential::user): Deleted.
        * UIProcess/Authentication/WebCredential.h:
        (WebKit::WebCredential::create): Deleted.

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Adopt modern C++11 loops and fix WebArchive creation functions
        https://bugs.webkit.org/show_bug.cgi?id=134032

        Reviewed by Andreas Kling.

        * Shared/APIWebArchive.cpp:
        (API::WebArchive::WebArchive):

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Give WKWebView on iOS a mobile user agent
        https://bugs.webkit.org/show_bug.cgi?id=134034
        <rdar://problem/17346489>

        Reviewed by Enrica Casucci.

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

2014-06-18  Joseph Pecoraro  <pecoraro@apple.com>

        Remove stale include, header was removed in r170101.

        Unreviewed build fix.

        * Shared/API/Cocoa/WebKitPrivate.h:

2014-06-18  Anders Carlsson  <andersca@apple.com>

        Add CF type cast function templates and use them in KeyedDecoder in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=134033

        Reviewed by Sam Weinig.

        * Shared/cf/KeyedDecoder.cpp:
        (WebKit::KeyedDecoder::KeyedDecoder):
        (WebKit::KeyedDecoder::decodeBytes):
        (WebKit::KeyedDecoder::decodeBool):
        (WebKit::KeyedDecoder::decodeInt32):
        (WebKit::KeyedDecoder::decodeInt64):
        (WebKit::KeyedDecoder::decodeFloat):
        (WebKit::KeyedDecoder::decodeDouble):
        (WebKit::KeyedDecoder::decodeString):
        (WebKit::KeyedDecoder::beginObject):
        (WebKit::KeyedDecoder::beginArray):
        (WebKit::KeyedDecoder::beginArrayElement):

2014-06-18  Dan Bernstein  <mitz@apple.com>

        Remove the unused _WKBackForwardListDidChangeNotification.

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        * UIProcess/API/Cocoa/WKBackForwardListInternal.h:
        * UIProcess/API/Cocoa/WKBackForwardListPrivate.h: Removed.
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didChangeBackForwardList): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-18  Andreas Kling  <akling@apple.com>

        Set main thread QoS policies after IPC initialization.
        <https://webkit.org/b/134014>

        Something was flipping the QoS level back to "unspecified" after
        setting it in the ChildProcess initialization code. Pending a better
        understanding of what really happens, move the code to a later stage,
        after IPC channels are up and running. Now the priority sticks.

        Reviewed by Anders Carlsson.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2014-06-17  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKWebView's _privateBrowsingEnabled property is unused
        https://bugs.webkit.org/show_bug.cgi?id=134013

        Reviewed by Sam Weinig.

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

2014-06-17  Tim Horton  <timothy_horton@apple.com>

        [iOS][wk2] Use ImageDocument to display subframe PDFs
        https://bugs.webkit.org/show_bug.cgi?id=133944
        <rdar://problem/17205983>

        Reviewed by Dan Bates.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Always use ImageDocument for subframe PDFs in WebKit2 on iOS.

2014-06-17  Anders Carlsson  <andersca@apple.com>

        Make it possible to use -[NSBundle classNamed:] to find WebKitLegacy classes
        https://bugs.webkit.org/show_bug.cgi?id=134008
        <rdar://problem/17037600>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/LegacyBundleForClass.mm: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-17  Anders Carlsson  <andersca@apple.com>

        Expose the location of website data
        https://bugs.webkit.org/show_bug.cgi?id=134000
        <rdar://problem/17350498>

        Reviewed by Dan Bernstein.

        Also, remove the bundle ID from the website data path for containerized apps.

        * Shared/mac/SandboxUtilities.cpp:
        (WebKit::processIsAppSandboxed):
        * Shared/mac/SandboxUtilities.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (+[WKProcessPool _websiteDataURLForContainerWithURL:]):
        (websiteDataDirectoryURL):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

2014-06-17  Jeremy Jones  <jeremyj@apple.com>

        Improve enter and exit fullscreen transition by using two step transition.
        https://bugs.webkit.org/show_bug.cgi?id=133706

        Reviewed by Simon Fraser.

        Add setupFullscreen()/didSetupFullscreen() and cleanupFullscreen()/didCleanupFullscreen()
        to the proxies. And refactor enter/exit fullscreen to do some of the work in setup/cleanup.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Add four methods mentioned above.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Add Setup/Cleanup functions.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setupFullscreenWithID): does what enterFullscreen used to do.
        (WebKit::WebVideoFullscreenManagerProxy::didCleanupFullscreen): forward IPC.
        (WebKit::WebVideoFullscreenManagerProxy::didSetupFullscreen): forward IPC.
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreenWithID): changed to enterFullscreen
        * WebProcess/ios/WebVideoFullscreenManager.h: Add didSetup/didCleanup
        * WebProcess/ios/WebVideoFullscreenManager.messages.in: Add didSetup/didCleanup
        * WebProcess/ios/WebVideoFullscreenManager.mm: 
        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode): refactored,
        some implementation moves to didSetupFullscreen.
        (WebKit::WebVideoFullscreenManager::didSetupFullscreen):
        Moves the video layer over to the hosted layer, and initiates fullscreen.
        (WebKit::WebVideoFullscreenManager::didExitFullscreen): refactored,
        some implementation moves to didCleanupFullscreen, and initiates cleanup.
        (WebKit::WebVideoFullscreenManager::didCleanupFullscreen):
        Final cleanup refactored from didExitFullscreen()

2014-06-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] enable background audio in WK2
        https://bugs.webkit.org/show_bug.cgi?id=133996

        Reviewed by Jer Noble.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService.Development/Info-iOS.plist: Mark as
            allowed to play audio when in the background.
        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist: Ditto.

2014-06-17  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] fix reflections on composited layers
        https://bugs.webkit.org/show_bug.cgi?id=133942

        Reviewed by Tim Horton.
        
        Fix reflections on composited layers. There are two main set of changes.
        
        First, a PlatformCALayerRemote which is a clone has to track the layer
        it is a clone of, so it knows where to grab the contents from in the UI process.
        This layer may be told that its contents need updating out of order during
        recursiveBuildTransaction(), so we need some small changes in RemoteLayerTreeContext
        to allow a layer to add itself to the set of layers requiring commit.
        
        In the UI process, a new step is added to RemoteLayerTreeHost::updateLayerTree()
        to go through clones, and copy their contents from the origin layer.
        
        The second set of changes makes platformCALayerLayerDidDisplay() work for
        UI-side compositing by not taking a PlatformLayer*, but instead a PlatformCALayer*.
        PlatformCALayer::setContentsChanged() changed to copyContentsFromLayer() so we know
        what the origin layer is.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display): Remove the early return so we can always
        call platformCALayerLayerDidDisplay().
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::clone):
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::copyContentsFromLayer):
        (WebKit::PlatformCALayerRemote::setClonedLayer):
        (WebKit::PlatformCALayerRemote::setContentsChanged): Deleted.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        (WebKit::PlatformCALayerRemote::properties):
        (WebKit::PlatformCALayerRemote::context):

2014-06-17  Anders Carlsson  <andersca@apple.com>

        Remove session state methods from WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=133995

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController sessionState]): Deleted.
        (-[WKBrowsingContextController restoreFromSessionState:]): Deleted.

2014-06-17  Brady Eidson  <beidson@apple.com>

        Only show telephone number highlights if only one number is selected
        <rdar://problem/16874568> and https://bugs.webkit.org/show_bug.cgi?id=133989

        Reviewed by Tim Horton.

        Add a flag to TelephoneNumberData to remember if it was hovered over:
        * WebProcess/WebPage/TelephoneNumberOverlayController.h:
        (WebKit::TelephoneNumberData::hovered):
        (WebKit::TelephoneNumberData::setHovered):
        (WebKit::TelephoneNumberData::TelephoneNumberData):

        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect): Only draw the highlight if one
          phone number is selected.
        (WebKit::TelephoneNumberOverlayController::mouseEvent): Update the hover state of the
          current phone number, and setNeedsDisplay if the hover state changes.
        (WebKit::TelephoneNumberOverlayController::clearHighlights):

2014-06-17  Tim Horton  <timothy_horton@apple.com>

        Remove WKContentView _setFindIndicator:fadeOut:animate:
        https://bugs.webkit.org/show_bug.cgi?id=133976

        Reviewed by Anders Carlsson.

        Find indicators are totally internal to FindController on iOS,
        we don't need to push them to the content view via PageClient,
        so this code was unused.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setFindIndicator:WebKit::fadeOut:animate:]): Deleted.

2014-06-17  Andreas Kling  <akling@apple.com>

        Web process main thread priority is lower than some network process threads.
        <https://webkit.org/b/133987>
        <rdar://problem/17330300>

        Mark the main thread as "user initiated" in process entry.

        Reviewed by Maciej Stachowiak.

        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::initialize):

2014-06-17  Anders Carlsson  <andersca@apple.com>

        Add SPI to get the NSURLRequest from a WKNavigationResponse
        https://bugs.webkit.org/show_bug.cgi?id=133984
        <rdar://problem/17006399>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        (-[WKNavigationResponse _request]):
        * UIProcess/API/Cocoa/WKNavigationResponseInternal.h:
        * UIProcess/API/Cocoa/WKNavigationResponsePrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-06-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

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

        Reviewed by Csaba Osztrogonác.

        UserMessage, WillLoad and test_ewk2_view have been failed since r169784.

        * PlatformEfl.cmake:

2014-06-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK+ port. Removing the *Callback::create() wrappings
        for lambda callbacks that aren't required anymore after the changes in r170041.

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

2014-06-16  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix when MHTML is enabled after r170041

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetContentsAsMHTMLData):

2014-06-16  Dan Bernstein  <mitz@apple.com>

        Part 2 of: Change GenericCallback<> function parameters into std::function<>
        https://bugs.webkit.org/show_bug.cgi?id=133927

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        (WKPageRenderTreeExternalRepresentation):
        (WKPageGetSourceForFrame):
        (WKPageGetContentsAsString):
        (WKPageGetBytecodeProfile):
        (WKPageGetSelectionAsWebArchiveData):
        (WKPageValidateCommand):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerClearSiteData):
        (WKPluginSiteDataManagerClearAllSiteData):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView evaluateJavaScript:completionHandler:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        (-[WKView startSpeaking:]):
        (-[WKView selectedRangeWithCompletionHandler:]):
        (-[WKView markedRangeWithCompletionHandler:]):
        (-[WKView hasMarkedTextWithCompletionHandler:]):
        (-[WKView firstRectForCharacterRange:completionHandler:]):
        (-[WKView characterIndexForPoint:completionHandler:]):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::validateCommand):
        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
        (WebKit::WebPageProxy::getRenderTreeExternalRepresentation):
        (WebKit::WebPageProxy::getSourceForFrame):
        (WebKit::WebPageProxy::getContentsAsString):
        (WebKit::WebPageProxy::getBytecodeProfile):
        (WebKit::WebPageProxy::getContentsAsMHTMLData):
        (WebKit::WebPageProxy::getSelectionOrContentsAsString):
        (WebKit::WebPageProxy::getSelectionAsWebArchiveData):
        (WebKit::WebPageProxy::getMarkedRangeAsync):
        (WebKit::WebPageProxy::getSelectedRangeAsync):
        (WebKit::WebPageProxy::characterIndexForPointAsync):
        (WebKit::WebPageProxy::firstRectForCharacterRangeAsync):
        (WebKit::WebPageProxy::takeSnapshot):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _define:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView requestDictationContext:]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateSelectionWithTouches):
        (WebKit::WebPageProxy::requestAutocorrectionData):
        (WebKit::WebPageProxy::applyAutocorrection):
        (WebKit::WebPageProxy::requestDictationContext):
        (WebKit::WebPageProxy::requestAutocorrectionContext):

2014-06-16  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r170029

        Use String() instead of AtomicString().

        * UIProcess/InspectorServer/HTTPRequest.cpp:
        (WebKit::HTTPRequest::parseHeaders):

2014-06-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use TileController on Windows
        https://bugs.webkit.org/show_bug.cgi?id=133895

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.h: Remove
        unneeded overload.

2014-06-16  Timothy Horton  <timothy_horton@apple.com>

        [iOS][wk2] Swipe snapshots are removed too quickly if there is no saved render tree size
        https://bugs.webkit.org/show_bug.cgi?id=133891

        Reviewed by Simon Fraser.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::setRenderTreeSize):
        If we don't know the target render tree size, wait until the first layer tree commit
        that comes in, instead of removing the snapshot when the gesture ends.

2014-06-16  Timothy Horton  <timothy_horton@apple.com>

        [iOS][wk2] Swiping back briefly shows the previous page before loading the new one
        https://bugs.webkit.org/show_bug.cgi?id=133885

        Reviewed by Simon Fraser.

        Remove a race between the UI and Web processes when removing the swipe snapshot.
        Previously, it was possible to get a commit from the Web process with layer content
        (and render tree size) from the previous page *after* sending the navigation request
        to the page, because of the asynchronicity of layer tree commits. This could cause
        the snapshot to be removed early (if the previous fully-loaded page had a sufficiently
        large render tree size), revealing the old tiles underneath the snapshot.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::transactionID):
        (WebKit::RemoteLayerTreeTransaction::setTransactionID):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::lastVisibleTransactionID):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::coreAnimationDidCommitLayers):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        Keep track of an ever-increasing transaction ID in RemoteLayerTreeDrawingArea(Proxy).
        It increments in the UI process at didUpdate time, because the Web process cannot
        have started on a new layer tree commit until didUpdate is sent.
        It increments in the Web process at commit time.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::endSwipeGesture):
        (WebKit::ViewGestureController::setRenderTreeSize):
        * UIProcess/mac/ViewGestureController.h:
        Adopt transaction IDs; don't remove the snapshot until the commit
        that includes the navigation arrives.

2014-06-16  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17327707> [Cocoa] Expose WebPreferences::storageBlockingPolicy
        https://bugs.webkit.org/show_bug.cgi?id=133958

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (toStorageBlockingPolicy): Added this helper conversion function.
        (toAPI): Ditto.
        (-[WKPreferences _storageBlockingPolicy]): Added this getter.
        (-[WKPreferences _setStorageBlockingPolicy:]): Added this setter.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Declared new _storageBlockingPolicy property
        and _WKStorageBlockingPolicy enum. 

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Don't use AtomicString in HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=133957
        <rdar://problem/15256572>

        Reviewed by Andreas Kling.

        Update for WebCore changes.

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

2014-06-15  Anders Carlsson  <andersca@apple.com>

        Change ResourceRequestBase::addHTTPHeaderFields to setHTTPHeaderFields instead
        https://bugs.webkit.org/show_bug.cgi?id=133925

        Reviewed by Sam Weinig.

        * PluginProcess/PluginControllerProxy.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::NPN_PostURL):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::loadURL):
        * WebProcess/Plugins/PluginView.h:

2014-06-16  Anders Carlsson  <andersca@apple.com>

        Add HTTPHeaderName overloads on ResourceResponseBase
        https://bugs.webkit.org/show_bug.cgi?id=133946

        Reviewed by Andreas Kling.

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

2014-06-16  Dan Bernstein  <mitz@apple.com>

        Fixed a typo in the last change.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):

2014-06-16  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove WKPreferences persistence in user defaults
        https://bugs.webkit.org/show_bug.cgi?id=133945

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.h: Removed userDefaultsKeyPrefix property and
        initializer with userDefaultsKeyPrefix parameter.
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]): Changed to initialize an instance with an empty identifier, which
        means that it won’t persist to user defaults.
        (-[WKPreferences initWithUserDefaultsKeyPrefix:]): Deleted.
        (-[WKPreferences userDefaultsKeyPrefix]): Deleted.

2014-06-16  Zan Dobersek  <zdobersek@igalia.com>

        Page::findStringMatchingRanges() should take Vector<RefPtr<Range>> by reference instead of pointer
        https://bugs.webkit.org/show_bug.cgi?id=133677

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findString): Update the call to Page::findStringMatchingRanges() to pass
        in a Vector<RefPtr<Range>> reference instead of a pointer.
        (WebKit::FindController::findStringMatches): Ditto.

2014-06-16  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fixes for the EFL and GTK+ ports after r169994 and 170000.

        * UIProcess/API/C/WKPluginSiteDataManager.cpp: Undefine the None macro under X11.
        * UIProcess/API/gtk/WebKitCookieManager.cpp:
        (webkit_cookie_manager_get_accept_policy): Remove unnecessary ::create() wrappings.
        (webkit_cookie_manager_get_domains_with_cookies): Ditto.
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_get_data): Ditto.

2014-06-15  Dan Bernstein  <mitz@apple.com>

        Part 1 of: Change GenericCallback<> function parameters into std::function<>
        https://bugs.webkit.org/show_bug.cgi?id=133927

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetStatistics):
        (WKContextGetStatisticsWithOptions):
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerGetHostnamesWithCookies):
        (WKCookieManagerGetHTTPCookieAcceptPolicy):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetDatabasesByOrigin):
        (WKDatabaseManagerGetDatabaseOrigins):
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetMainResourceData):
        (WKFrameGetResourceData):
        (WKFrameGetWebArchive):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/API/C/WKMediaCacheManager.cpp:
        (WKMediaCacheManagerGetHostnamesWithMediaCache):
        * UIProcess/API/C/WKOriginDataManager.cpp:
        (WKOriginDataManagerGetOrigins):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetSitesWithData):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView attributedSubstringForProposedRange:completionHandler:]):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::getApplicationCacheOrigins):
        * UIProcess/WebApplicationCacheManagerProxy.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::getStatistics):
        * UIProcess/WebContext.h:
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
        * UIProcess/WebCookieManagerProxy.h:
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::getDatabasesByOrigin):
        (WebKit::WebDatabaseManagerProxy::getDatabaseOrigins):
        * UIProcess/WebDatabaseManagerProxy.h:
        * UIProcess/WebFrameProxy.cpp:
        (WebKit::WebFrameProxy::getWebArchive):
        (WebKit::WebFrameProxy::getMainResourceData):
        (WebKit::WebFrameProxy::getResourceData):
        * UIProcess/WebFrameProxy.h:
        * UIProcess/WebKeyValueStorageManager.cpp:
        (WebKit::WebKeyValueStorageManager::getKeyValueStorageOrigins):
        (WebKit::WebKeyValueStorageManager::getStorageDetailsByOrigin):
        * UIProcess/WebKeyValueStorageManager.h:
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::getHostnamesWithMediaCache):
        * UIProcess/WebMediaCacheManagerProxy.h:
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::getOrigins):
        * UIProcess/WebOriginDataManagerProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::getMainResourceDataOfFrame):
        (WebKit::WebPageProxy::getResourceDataFromFrame):
        (WebKit::WebPageProxy::getWebArchiveOfFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::getCacheOrigins):
        * UIProcess/WebResourceCacheManagerProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectWithGesture):
        (WebKit::WebPageProxy::selectWithTwoTouches):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):

2014-06-15  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17291697> [Cocoa] Can’t tell at policy decision time whether WebKit can handle the request
        https://bugs.webkit.org/show_bug.cgi?id=133930

        Reviewed by Sam Weinig.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::NavigationActionData): Initialize new member canHandleRequest
        to false.
        (WebKit::NavigationActionData::encode): Encode canHandleRequest.
        (WebKit::NavigationActionData::decode): Decode it.
        * Shared/NavigationActionData.h: Declared new boolean member canHandleRequest.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction _initWithNavigationActionData:]): Set new ivar _canHandleRequest from
        the action data.
        (-[WKNavigationAction _canHandleRequest]): Added this getter.
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h: Declared new property _canHandleRequest.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow): Set canHandleRequest in the NavigationActionData.

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

2014-06-15  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Change ewk_view_settings_get to ewk_page_group_settings_get
        https://bugs.webkit.org/show_bug.cgi?id=133841

        Reviewed by Gyuyoung Kim.

        Ewk_Settings object is a member of Ewk_Page_Group.
        So, Ewk_Page_Group is better place for the getter of Ewk_Settings.

        * UIProcess/API/efl/ewk_page_group.cpp:
        (ewk_page_group_settings_get): Added instead of ewk_view_settings_get.
        * UIProcess/API/efl/ewk_page_group.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_settings_get): Deleted.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_page_group.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F): Deleted.

2014-06-15  Anders Carlsson  <andersca@apple.com>

        Add an autorelease() member function to RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=133929

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm:
        (-[_WKRemoteObjectRegistry remoteObjectProxyWithInterface:]):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView navigationDelegate]):
        (-[WKWebView UIDelegate]):
        (-[WKWebView loadRequest:]):
        (-[WKWebView loadHTMLString:baseURL:]):
        (-[WKWebView goToBackForwardListItem:]):
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView _historyDelegate]):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::animationValueFromKeyframeValue):

2014-06-15  Dan Bernstein  <mitz@apple.com>

        Get rid of VoidAPICallback
        https://bugs.webkit.org/show_bug.cgi?id=133928

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageForceRepaint): Wrap the API callback in a generic callback here.

        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerClearSiteData): Ditto.
        (WKPluginSiteDataManagerClearAllSiteData): Ditto.

        * UIProcess/GenericCallback.h:
        (WebKit::GenericCallback::performCallback): Added this helper for 0-argument callbacks.
        (WebKit::VoidCallback::create): Deleted.
        (WebKit::VoidCallback::~VoidCallback): Deleted.
        (WebKit::VoidCallback::performCallback): Deleted.
        (WebKit::VoidCallback::invalidate): Deleted.
        (WebKit::VoidCallback::VoidCallback): Deleted.
        (WebKit::VoidAPICallback::create): Deleted.

        * UIProcess/mac/WKFullScreenWindowController.h:

2014-06-15  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK+ port after r169990.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState): Pass the error value to
        the rest of invalidateCallbackMap calls.

2014-06-15  Anders Carlsson  <andersca@apple.com>

        Remove WKPageRunJavaScriptInMainFrame_b
        https://bugs.webkit.org/show_bug.cgi?id=133926

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (callRunJavaScriptBlockAndRelease): Deleted.
        (WKPageRunJavaScriptInMainFrame_b): Deleted.
        * UIProcess/API/C/WKPage.h:

2014-06-15  Anders Carlsson  <andersca@apple.com>

        invalidateCallbackMap doesn’t pass the error parameter on to invalidate(), so script completion handler is passed the wrong error
        https://bugs.webkit.org/show_bug.cgi?id=133921
        <rdar://problem/17316653>

        Reviewed by Dan Bernstein.

        * UIProcess/GenericCallback.h:
        (WebKit::VoidCallback::performCallback):
        (WebKit::VoidCallback::invalidate):
        (WebKit::VoidAPICallback::create):
        (WebKit::invalidateCallbackMap):
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::invalidate):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        * UIProcess/WebApplicationCacheManagerProxy.cpp:
        (WebKit::WebApplicationCacheManagerProxy::contextDestroyed):
        (WebKit::WebApplicationCacheManagerProxy::processDidClose):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::~WebContext):
        * UIProcess/WebCookieManagerProxy.cpp:
        (WebKit::WebCookieManagerProxy::contextDestroyed):
        (WebKit::WebCookieManagerProxy::processDidClose):
        * UIProcess/WebDatabaseManagerProxy.cpp:
        (WebKit::WebDatabaseManagerProxy::contextDestroyed):
        (WebKit::WebDatabaseManagerProxy::processDidClose):
        * UIProcess/WebMediaCacheManagerProxy.cpp:
        (WebKit::WebMediaCacheManagerProxy::contextDestroyed):
        (WebKit::WebMediaCacheManagerProxy::processDidClose):
        * UIProcess/WebOriginDataManagerProxy.cpp:
        (WebKit::WebOriginDataManagerProxy::contextDestroyed):
        (WebKit::WebOriginDataManagerProxy::processDidClose):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::forceRepaint):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebResourceCacheManagerProxy.cpp:
        (WebKit::WebResourceCacheManagerProxy::contextDestroyed):
        (WebKit::WebResourceCacheManagerProxy::processDidClose):
        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController dealloc]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):

2014-06-15  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK+ port after r169987.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_can_execute_editing_command): The first passed-in parameter
        is now a reference to a const String object.

2014-06-14  Dan Bernstein  <mitz@apple.com>

        Replace StringImpl* callback parameters with const String&
        https://bugs.webkit.org/show_bug.cgi?id=133922

        Reviewed by Sam Weinig.

        * UIProcess/API/C/WKPage.cpp:
        (toGenericCallbackFunction): Added this helper function to wrap a WKStringRef-returning
        API callback in a generic const String&-returning callback.
        (WKPageRenderTreeExternalRepresentation):
        (WKPageGetSourceForFrame):
        (WKPageGetContentsAsString):
        (WKPageGetBytecodeProfile):
        (WKPageValidateCommand):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]):
        (-[WKView startSpeaking:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _define:]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):

2014-06-14  Dan Bernstein  <mitz@apple.com>

        Additional iOS build fix.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _define:]):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):

2014-06-14  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):

2014-06-14  Dan Bernstein  <mitz@apple.com>

        Get rid of GenericAPICallback
        https://bugs.webkit.org/show_bug.cgi?id=133909

        Reviewed by Sam Weinig.

        In preparation for passing callbacks as functions, replace GenericAPICallback::create, which
        returned a GenericCallback, with a function template that returns an appropriate callback
        function.

        * UIProcess/API/C/WKApplicationCacheManager.cpp:
        (WKApplicationCacheManagerGetApplicationCacheOrigins):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetStatistics):
        (WKContextGetStatisticsWithOptions):
        * UIProcess/API/C/WKCookieManager.cpp:
        (WKCookieManagerGetHostnamesWithCookies):
        (WKCookieManagerGetHTTPCookieAcceptPolicy):
        * UIProcess/API/C/WKDatabaseManager.cpp:
        (WKDatabaseManagerGetDatabasesByOrigin):
        (WKDatabaseManagerGetDatabaseOrigins):
        * UIProcess/API/C/WKFrame.cpp:
        (WKFrameGetMainResourceData):
        (WKFrameGetResourceData):
        (WKFrameGetWebArchive):
        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
        (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
        * UIProcess/API/C/WKMediaCacheManager.cpp:
        (WKMediaCacheManagerGetHostnamesWithMediaCache):
        * UIProcess/API/C/WKOriginDataManager.cpp:
        (WKOriginDataManagerGetOrigins):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageRunJavaScriptInMainFrame):
        (WKPageRenderTreeExternalRepresentation):
        (WKPageGetSourceForFrame):
        (WKPageGetContentsAsString):
        (WKPageGetBytecodeProfile):
        (WKPageGetSelectionAsWebArchiveData):
        (WKPageGetContentsAsMHTMLData):
        (WKPageDrawPagesToPDF):
        * UIProcess/API/C/WKPluginSiteDataManager.cpp:
        (WKPluginSiteDataManagerGetSitesWithData):
        * UIProcess/API/C/WKResourceCacheManager.cpp:
        (WKResourceCacheManagerGetCacheOrigins):

        * UIProcess/GenericCallback.h:
        (WebKit::toGenericCallbackFunction): Added. Given a C SPI callback function, returns a generic
        callback function that wraps it.

2014-06-14  Dan Bernstein  <mitz@apple.com>

        Reverted the last change, which broken the Mac build.

        * UIProcess/GenericCallback.h:
        (WebKit::invalidateCallbackMap):

2014-06-14  Dan Bernstein  <mitz@apple.com>

        Tried to fix the GTK build.

        * UIProcess/GenericCallback.h:
        (WebKit::invalidateCallbackMap):

2014-06-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView selectedRangeWithCompletionHandler:]):
        (-[WKView markedRangeWithCompletionHandler:]):
        (-[WKView hasMarkedTextWithCompletionHandler:]):
        (-[WKView attributedSubstringForProposedRange:completionHandler:]):
        (-[WKView firstRectForCharacterRange:completionHandler:]):
        (-[WKView characterIndexForPoint:completionHandler:]):

2014-06-14  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed build fix for the GTK+ port.
        Fixing the callback lambda parameters after r169962.

        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        (webkitPrintOperationPrintPagesForFrame):
        * UIProcess/API/gtk/WebKitWebResource.cpp:
        (webkit_web_resource_get_data):
        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_can_execute_editing_command):
        (webkit_web_view_run_javascript):
        (resourcesStreamReadCallback):
        (webkit_web_view_save):
        (webkit_web_view_save_to_file):

2014-06-14  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r169943 and r169946, use the format of set/get.

        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::didReceiveUnrecognizedHTTPRequest):
        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
        (WebKit::WebSocketServerConnection::readHTTPMessage):
        (WebKit::WebSocketServerConnection::upgradeToWebSocketServerConnection):

2014-06-13  Andreas Kling  <akling@apple.com>

        REGRESSION (r167635): Reference leak in NetworkResourceLoader while loads are being deferred.
        <https://webkit.org/b/133894>
        <rdar://problem/17312299>

        Don't self-ref() in start() until we actually start; if page loads are being
        deferred, start() will be called again once deferral stops.

        This was causing us to leak the entire NetworkResourceLoader object graph.

        Reviewed by Brady Eidson.

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

2014-06-13  Dan Bernstein  <mitz@apple.com>

        Make GenericCallback variadic
        https://bugs.webkit.org/show_bug.cgi?id=133897

        Reviewed by Sam Weinig.

        Also eliminated legacy callback functions and all CallbackBase derived classes outside of
        GenericCallback.h.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageValidateCommand): Changed legacy callback (with leading bool parameter) into modern
        callback (with trailing error parameter).
        (WKPageComputePagesForPrinting): Ditto.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _getWebArchiveDataWithCompletionHandler:]): Ditto.
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): Ditto.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _requestSnapshotIfNeeded]): Ditto.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView validateUserInterfaceItem:]): Ditto.
        (-[WKView startSpeaking:]): Ditto.

        * UIProcess/AutoCorrectionCallback.h: Replaced CallbackBase derived classes with
        GenericCallback specializations.

        * UIProcess/GenericCallback.h:
        - Made GenericCallback variadic:
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::invalidate):
        (WebKit::GenericAPICallback::create):

        - Replaced CallbackBase derived classes with GenericCallback specializations:
        (WebKit::GenericCallback::create): Deleted.
        (WebKit::ComputedPagesCallback::create): Deleted.
        (WebKit::ComputedPagesCallback::~ComputedPagesCallback): Deleted.
        (WebKit::ComputedPagesCallback::performCallbackWithReturnValue): Deleted.
        (WebKit::ComputedPagesCallback::invalidate): Deleted.
        (WebKit::ComputedPagesCallback::ComputedPagesCallback): Deleted.
        (WebKit::ImageCallback::create): Deleted.
        (WebKit::ImageCallback::~ImageCallback): Deleted.
        (WebKit::ImageCallback::performCallbackWithReturnValue): Deleted.
        (WebKit::ImageCallback::invalidate): Deleted.
        (WebKit::ImageCallback::ImageCallback): Deleted.

        * UIProcess/WebPageProxy.h: Replaced CallbackBase derived classes with GenericCallback
        specializations.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]): Changed
        legacy callback (with leading bool parameter) into modern callback (with trailing error
        parameter).
        (-[WKContentView requestDictationContext:]): Ditto.
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]): Ditto.

        * UIProcess/mac/WKPrintingView.mm:
        (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]): Ditto.
        (-[WKPrintingView _askPageToComputePageRects]): Ditto.
        (-[WKPrintingView _drawPreview:]): Ditto.

2014-06-13  Tim Horton  <timothy_horton@apple.com>

        Unreviewed; fix the build.

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

2014-06-13  Martin Hock  <mhock@apple.com>

        Clean up layers in RemoteLayerTreeHost::clearLayers().
        https://bugs.webkit.org/show_bug.cgi?id=133888

        Reviewed by Tim Horton.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::clearLayers):

2014-06-13  Anders Carlsson  <andersca@apple.com>

        Add a HTTPHeaderMap::get overload that takes an HTTPHeaderName
        https://bugs.webkit.org/show_bug.cgi?id=133877

        Reviewed by Andreas Kling.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):

2014-06-13  Dan Bernstein  <mitz@apple.com>

        [iOS] Networking process always decodes keys
        https://bugs.webkit.org/show_bug.cgi?id=133863

        Reviewed by Anders Carlsson.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer): Call checkEntitlements on iOS, too.
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::checkEntitlements): On iOS, allow decoding keys
        if the application has the appropriate keychain access group.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::setAllowsDecodingSecKeyRef): Added. Sets static bool.
        (IPC::decode): Check the secKeyRefDecodingAllowed bool before decoding a key.
        * Shared/cf/ArgumentCodersCF.h:

2014-06-12  Anders Carlsson  <andersca@apple.com>

        Add overloads of HTTPHeaderMap::find and remove that take enums
        https://bugs.webkit.org/show_bug.cgi?id=133823

        Reviewed by Sam Weinig.

        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::parsePostBuffer):
        Update for WebCore changes.

2014-06-12  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Do not update the viewport configuration on load until the first viewport arguments is received
        https://bugs.webkit.org/show_bug.cgi?id=133719
        <rdar://problem/17008149>

        Reviewed by Simon Fraser.

        When pages are loaded from the page cache, we were updating the viewport to the initial values
        in WebPage::dynamicViewportSizeUpdate(), then update the viewport again when the page's viewport argument
        are received.

        The problem is that was messing up with text autosizing. The page would relayout with the default viewport
        configuration, adopt the text autosizing parameters from that size, then remain in that state when
        the actual viewport configuration would be set.

        With this patch, the viewport configuration is updated from the values in WebCore instead of with default values.
        For new documents, this is strictly equivalent. For documents coming from the page cache, the values are from
        the previous state of the page, which ensure we do not restart negotiating a viewport configuration from scratch.

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

2014-06-12  Gavin Barraclough  <barraclough@apple.com>

        Add support for thread/WorkQueue QoS
        https://bugs.webkit.org/show_bug.cgi?id=130688

        Reviewed by Anders Carlson & Simon Fraser.

        The EventDispatcher's WorkQueue should be UserInteractive.

        * Platform/WorkQueue.cpp:
        (WorkQueue::create):
            - pass QOS to constructor.
        (WorkQueue::WorkQueue):
            - pass QOS to platformInitialize.
        * Platform/WorkQueue.h:
            - added enum, arguments.
        * Platform/efl/WorkQueueEfl.cpp:
        (WorkQueue::platformInitialize):
            - has extra argument.
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::platformInitialize):
            - has extra argument.
        * Platform/mac/WorkQueueMac.cpp:
        (platformQOS):
            - map from enum to platform type.
        (WorkQueue::platformInitialize):
            - set the QoS of the dispatch queue.
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
            - EventDispatcher's WorkQueue should be UserInteractive.
        * config.h:
            - added HAVE_QOS_CLASSES

2014-06-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Tiny hack to fix WebKitTestRunner view visibility
        https://bugs.webkit.org/show_bug.cgi?id=133833

        Reviewed by Tim Horton.
        
        PageClientImplIOS in WebKitTestRunner has a null m_webView, so isViewInWindow
        was returning false, which confused things.
        
        Fix by falling back to a check on the content view if the m_webView is nil.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewInWindow):

2014-06-12  Brady Eidson  <beidson@apple.com>

        Add SPI for image controls and service controls preferences.
        <rdar://problem/17292209> and https://bugs.webkit.org/show_bug.cgi?id=133820

        Reviewed by Anders Carlsson.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetServiceControlsEnabled):
        (WKPreferencesGetServiceControlsEnabled):
        (WKPreferencesSetImageControlsEnabled):
        (WKPreferencesGetImageControlsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2014-06-12  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow reading com.apple.universalaccess preferences
        https://bugs.webkit.org/show_bug.cgi?id=133817
        <rdar://problem/17028261>

        Reviewed by Anders Carlsson.

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

2014-06-12  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<HTTPHeaderMap>::decode):
        (CoreIPC::ArgumentCoder<ResourceRequest>::decode):

2014-06-12  Dan Bernstein  <mitz@apple.com>

        Fixed a harmless error message when rewrite-availability-macros.sh is run in a clean build.

        Rubber-stamped by Anders Carlsson.

        * mac/rewrite-availability-macros.sh:

2014-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove view mode API
        https://bugs.webkit.org/show_bug.cgi?id=133725

        Reviewed by Martin Robinson.

        It currently does nothing because support for view source mode was
        removed from WebCore.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewSetProperty):
        (webkitWebViewGetProperty):
        (webkit_web_view_class_init):
        (webkit_web_view_set_view_mode): Deleted.
        (webkit_web_view_get_view_mode): Deleted.
        * UIProcess/API/gtk/WebKitWebView.h:
        * UIProcess/API/gtk/docs/webkit2gtk-sections.txt:

2014-06-12  Pratik Solanki  <psolanki@apple.com>

        Avoid creating a CFData when checking if a resource is file backed
        https://bugs.webkit.org/show_bug.cgi?id=133783

        Reviewed by Andreas Kling.

        When a resource is file backed, we have it as a single CFDataRef in SharedBuffer. Add an
        early return in tryGetShareableHandleFromSharedBuffer() so we don't end up creating a new
        CFDataRef if we don't already have one in SharedBuffer. If we had to create a CFDataRef, the
        it can't have been a file backed resource.

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):

2014-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break on EFL and GTK ports since r169820
        https://bugs.webkit.org/show_bug.cgi?id=133786

        Reviewed by Philippe Normand.

        ENABLE_PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC macro are missing in PluginView::pluginSnapshotTimerFired().

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

2014-06-11  Csaba Osztrogonác  <ossy@webkit.org>

        [EFL][GTK] Ultimate fix not to have build failures
        in the future because of "#if TARGET_OS_IPHONE" guards.

        Unreviewed buildfix.

        Revert the previous wrong fix attempt r169879.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2014-06-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break on EFL port since r169869
        https://bugs.webkit.org/show_bug.cgi?id=133785

        Unreviewed, fix a build break on EFL port.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: Use defined(TARGET_OS_IPHONE).
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: ditto.

2014-06-11  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Give WebKitTestRunner a viewport configuration with initial scale=1 for testing
        https://bugs.webkit.org/show_bug.cgi?id=133779

        Reviewed by Benjamin Poulain.
        
        Support a custom viewport configuration for testing, on iOS.

        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _frameOrBoundsChanged]): Call setViewportConfigurationMinimumLayoutSize()
        just as WKWebView does.
        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUseTestingViewportConfiguration): New SPI to set a viewport config for testing.
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Ditto.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::setUseTestingViewportConfiguration):
        (WebKit::WebPage::isUsingTestingViewportConfiguration):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::resetViewportDefaultConfiguration):

2014-06-11  Timothy Horton  <timothy_horton@apple.com>

        Remove unused VisibleContentRectUpdateInfo update ID
        https://bugs.webkit.org/show_bug.cgi?id=133777

        Reviewed by Benjamin Poulain.

        Remove some unused code.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::operator==):
        (WebKit::VisibleContentRectUpdateInfo::updateID): Deleted.
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::setLastVisibleContentRectUpdateID): Deleted.
        (WebKit::RemoteLayerTreeTransaction::lastVisibleContentRectUpdateID): Deleted.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::nextVisibleContentRectUpdateID): Deleted.
        (WebKit::WebPageProxy::lastVisibleContentRectUpdateID): Deleted.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-06-11  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Move CompletionHandlerCallChecker into a separate file
        https://bugs.webkit.org/show_bug.cgi?id=133774

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/CompletionHandlerCallChecker.h: Added.
        * Shared/Cocoa/CompletionHandlerCallChecker.mm: Added.
        (WebKit::CompletionHandlerCallChecker::create):
        (WebKit::CompletionHandlerCallChecker::CompletionHandlerCallChecker):
        (WebKit::CompletionHandlerCallChecker::~CompletionHandlerCallChecker):
        (WebKit::CompletionHandlerCallChecker::didCallCompletionHandler):
        (WebKit::CompletionHandlerCallChecker::classImplementingDelegateMethod):

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::CompletionHandlerCallChecker::create): Deleted.
        (WebKit::CompletionHandlerCallChecker::~CompletionHandlerCallChecker): Deleted.
        (WebKit::CompletionHandlerCallChecker::didCallCompletionHandler): Deleted.
        (WebKit::CompletionHandlerCallChecker::CompletionHandlerCallChecker): Deleted.
        (WebKit::CompletionHandlerCallChecker::classImplementingDelegateMethod): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-11  Martin Hock  <mhock@apple.com>

        [iOS] Clear UIProcess visual state after WebProcess crash
        https://bugs.webkit.org/show_bug.cgi?id=133664
        <rdar://problem/16952742>

        Reviewed by Benjamin Poulain.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didRelaunchProcess]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didRelaunchProcess):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::~RemoteLayerTreeHost):
        (WebKit::RemoteLayerTreeHost::clearLayers):

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

        Implement swipeWithEvent for non-fluid swipes
        https://bugs.webkit.org/show_bug.cgi?id=133766
        <rdar://problem/17126889>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView swipeWithEvent:]):
        On non-fluid swipes, go back or forward depending on the swipe direction.

2014-06-11  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Xcode cannot infer that the WebKit target implicitly depends on WebCore.framework
        https://bugs.webkit.org/show_bug.cgi?id=133765

        Reviewed by Anders Carlsson.

        * Configurations/WebKit.xcconfig: Move linking against WebCore from OTHER_LDFLAGS here...
        * WebKit2.xcodeproj/project.pbxproj: ...to the Link Binary With Libraries build phase here.

2014-06-11  Timothy Horton  <timothy_horton@apple.com>

        [wk2] Don't dispatch view state changes immediately
        https://bugs.webkit.org/show_bug.cgi?id=133713

        Reviewed by Simon Fraser.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::viewStateDidChange):
        (WebKit::WebPageProxy::dispatchViewStateChange):
        (WebKit::WebPageProxy::updateViewState): Deleted.
        * UIProcess/WebPageProxy.h:
        On PLATFORM(COCOA), wait until just before CA is going to commit the UI process layer
        tree to dispatch view state changes to the Web process. This avoids sending multiple
        view state change messages to the Web process within one run-loop cycle, for example
        when a view is moved around in the view hierarchy but the view state otherwise remains the same.

2014-06-11  Timothy Horton  <timothy_horton@apple.com>

        Make it possible for waitForAndDispatchImmediately to bail if a sync message comes in from the other direction
        https://bugs.webkit.org/show_bug.cgi?id=133708

        Reviewed by Anders Carlsson.

        * Platform/IPC/Connection.cpp:
        (IPC::WaitForMessageState):
        (IPC::Connection::Connection):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:
        (IPC::Connection::waitForAndDispatchImmediately):
        Remove the waitForMessageMap, and assert that we're only ever waiting for one message at a time.
        This simplifies this code a bit, and we never wait on more than one message at a time, so it was unnecessary.

        Add a flag to waitForAndDispatchImmediately, InterruptWaitingIfSyncMessageArrives, which will cause
        waitForAndDispatchImmediately to bail if a sync message arrives, to avoid pointlessly blocking both processes
        for the entire timeout.

2014-06-11  Oliver Hunt  <oliver@apple.com>

        Restrict database process profile
        https://bugs.webkit.org/show_bug.cgi?id=133750

        Reviewed by Alexey Proskuryakov.

        Make the sandbox profile much more restrictive.

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

2014-06-11  Roger Fong  <roger_fong@apple.com>

        Don't snapshot offscreen plugins that would normally be considered primary plugins after they are moved in view.
        https://bugs.webkit.org/show_bug.cgi?id=133667.
        <rdar://problem/16743250>

        Reviewed by Tim Horton.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::PluginView):
        (WebKit::PluginView::pluginSnapshotTimerFired):
        Set the display state to Playing if the following is true:
        The plugin in question is large enough to be considered the primary snapshot and either:
        a) The maximum number of snapshot retries has been reached and no good snapshot has been found.
        b) The plugin is moved to be on-screen while the snapshot attempts are in progress.
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::plugInIntersectsSearchRect): Re-factor out intersection logic.
        (WebKit::WebPage::plugInIsPrimarySize): Re-factor out primary plugin size logic.
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn): Use the above two methods here.
        * WebProcess/WebPage/WebPage.h:

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

        Move more WKPreferences to WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=133756
        <rdar://problem/17271468>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences setMinimumFontSize:]):
        (-[WKPreferences suppressesIncrementalRendering]): Deleted.
        (-[WKPreferences setSuppressesIncrementalRendering:]): Deleted.
        (-[WKPreferences allowsInlineMediaPlayback]): Deleted.
        (-[WKPreferences setAllowsInlineMediaPlayback:]): Deleted.
        (-[WKPreferences mediaPlaybackRequiresUserAction]): Deleted.
        (-[WKPreferences setMediaPlaybackRequiresUserAction:]): Deleted.
        (-[WKPreferences mediaPlaybackAllowsAirPlay]): Deleted.
        (-[WKPreferences setMediaPlaybackAllowsAirPlay:]): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-11  Enrica Casucci  <enrica@apple.com>

        WebKit2 iOS: Unable to open UI menu for "open in new tab" for links on yahoo.com.
        https://bugs.webkit.org/show_bug.cgi?id=133749
        <rdar://problem/17165992>

        Reviewed by Brady Eidson.

        The URL returned to the UIProcess as string needs to be encoded.

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

2014-06-10  Anders Carlsson  <andersca@apple.com>

        Move suppressesIncrementalRendering to WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=133707
        <rdar://problem/17271468>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKPreferences.h:
        Get rid of suppressesIncrementalRendering.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Set the suppressesIncrementalRenderingKey key in webPageConfiguration.preferenceValues.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        Add suppressesIncrementalRendering.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        Assign suppressesIncrementalRendering.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Copy webPageConfiguration.preferenceValues to m_configurationPreferenceValues.

        (WebKit::WebPageProxy::preferencesStore):
        If m_configurationPreferenceValues is empty, just return m_preferences->store(). Otherwise,
        copy the store and apply the configuration preference values.

        (WebKit::WebPageProxy::preferencesDidChange):
        Call preferencesStore() so we'll get the configuration preference values as well.

        (WebKit::WebPageProxy::creationParameters):
        Ditto.

        * UIProcess/WebPageProxy.h:

2014-06-11  Antti Koivisto  <antti@apple.com>

        Wrap NSURLRequest in bundle API
        https://bugs.webkit.org/show_bug.cgi?id=133732
        <rdar://problem/17267217>

        Reviewed by Andreas Kling.
        
        Patch by Dan Bernstein.

        We don't want to construct actual NSURLRequests in the web process side unless really needed as it is slow.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/Cocoa/WKNSURLRequest.h: Added.
        (WebKit::wrapper):
        * Shared/Cocoa/WKNSURLRequest.mm: Added.
        
            Add a wrapper object that initializes the underlying NSURLRequest on-demand.

        (-[WKNSURLRequest _web_createTarget]):
        (-[WKNSURLRequest URL]):
        (-[WKNSURLRequest copyWithZone:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (willSendRequestForFrame):
        (didInitiateLoadForResource):

2014-06-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17218629> [Cocoa] WKWebView’s canGoBack and canGoForward properties are not KVO-compliant
        https://bugs.webkit.org/show_bug.cgi?id=133722

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm: Added no-op overrides of new
        PageLoadStateObserver member functions.

        * UIProcess/API/Cocoa/WKWebView.h: Documented the canGoBack and canGoForward properties as
        being KVO-compliant.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView canGoBack]): Changed to get the return value from the page load state.
        (-[WKWebView canGoForward]): Ditto.

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeCanGoBack): Override this new PageLoadStateObserver
        member function by sending the appropriate KVO change message to the WKWebView.
        (WebKit::NavigationState::didChangeCanGoBack): Ditto.
        (WebKit::NavigationState::willChangeCanGoForward): Ditto.
        (WebKit::NavigationState::didChangeCanGoForward): Ditto.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::commitChanges): Check for changes to canGoBack and canGoForward
        and call the observers if needed.
        (WebKit::PageLoadState::canGoBack): Added. Returns the value from the committed state.
        (WebKit::PageLoadState::setCanGoBack): Added. Sets the value in the uncommitted state.
        (WebKit::PageLoadState::canGoForward): Added. Returns the value from the committed state.
        (WebKit::PageLoadState::setCanGoForward): Added. Sets the value in the uncommitted state.
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::Data::Data): Added canGoBack and canGoForward boolean members.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChangeBackForwardList): Update the page load state with the new
        state of canGoBack and canGoForward.
        * UIProcess/WebPageProxy.h: Removed unused member variables m_canGoBack and m_canGoForward.

2014-06-11  Zan Dobersek  <zdobersek@igalia.com>

        Avoid Vector copies in WebNotificationManagerProxy::providerDidCloseNotifications(), FindController::findStringMatches()
        https://bugs.webkit.org/show_bug.cgi?id=133676

        Reviewed by Andreas Kling.

        * UIProcess/Notifications/WebNotificationManagerProxy.cpp:
        (WebKit::WebNotificationManagerProxy::providerDidCloseNotifications): Move the newly-created
        Vector object into the HashMap<>::add() call.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::findStringMatches): Movethe newly-create Vector object into the
        Vector<>::append() call.

2014-06-11  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Add missing test cases for EWK2ViewTest.
        https://bugs.webkit.org/show_bug.cgi?id=133715

        Reviewed by Gyuyoung Kim.

        Add missing test cases for ewk_view.h APIs, ewk_view_stop(), ewk_view_html_string_load(), ewk_view_theme_get(), 
        ewk_view_feed_touch_event(), ewk_view_text_find_highlight_clear(), ewk_view_text_find(), ewk_view_text_matches_count(),
        ewk_view_page_contents_get(), ewk_view_script_execute().

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

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

        [GTK] Use a different user agent string depending on the site
        https://bugs.webkit.org/show_bug.cgi?id=132681

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webkit_settings_class_init): Enable site specific quirks setting
        by default.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::userAgent): Pass the given URL to WebPage.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::userAgent): Try to get the user agent for the
        URL received falling back to the current one otherwise.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::platformUserAgent): Added.
        * WebProcess/WebPage/efl/WebPageEfl.cpp:
        (WebKit::WebPage::platformUserAgent): Return null String.
        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
        (WebKit::WebPage::platformUserAgent): Use WebCore::standardUserAgentForURL() when site specific quirks
        setting is enabled.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformUserAgent): Return null String.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::platformUserAgent): Return null String.

2014-06-10  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] ScrollingTreeOverflowScrollingNode does not use asynchronous touch dispatch
        https://bugs.webkit.org/show_bug.cgi?id=133702
        <rdar://problem/17259261>

        Reviewed by Simon Fraser.

        Notify the WKWebView and the TouchGestureRecognizer when on of the internal UIScrollView
        starts scrolling in response to a gesture.

        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeWillStartPanGesture):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollViewWillStartPanGesture):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::scrollViewWillStartPanGesture):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeWillStartPanGesture):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::scrollViewWillStartPanGesture):

2014-06-10  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of [Cocoa] Handling authentication challenges should not require multiple delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=133697

        Reviewed by Anders Carlsson.

        * Shared/Authentication/AuthenticationManager.cpp:
        (WebKit::AuthenticationManager::performDefaultHandling): Added. Calls the new
        AuthenticationClient function receivedRequestToPerformDefaultHandling.
        (WebKit::AuthenticationManager::rejectProtectionSpaceAndContinue): Added. Calls the new
        AuthenticationClient function receivedChallengeRejection.
        * Shared/Authentication/AuthenticationManager.h:
        * Shared/Authentication/AuthenticationManager.messages.in: Added new messages
        PerformDefaultHandling and RejectProtectionSpaceAndContinue.

        * Shared/Downloads/DownloadAuthenticationClient.h: Override new AuthenticationClient member
        functions.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Added empty implementation.
        (WebKit::Download::receivedChallengeRejection): Ditto.

        * Shared/Downloads/mac/DownloadMac.mm:
        (WebKit::Download::receivedRequestToPerformDefaultHandling): Added. Forwards to the sender.
        (WebKit::Download::receivedChallengeRejection): Ditto.

        * UIProcess/API/Cocoa/WKNSURLAuthenticationChallenge.mm:
        (checkChallenge): Factored out a bit of code into this helper function.
        (-[WKNSURLAuthenticationChallengeSender cancelAuthenticationChallenge:]): Use new helper.
        (-[WKNSURLAuthenticationChallengeSender continueWithoutCredentialForAuthenticationChallenge:]):
        Ditto.
        (-[WKNSURLAuthenticationChallengeSender useCredential:forAuthenticationChallenge:]): Ditto.
        (-[WKNSURLAuthenticationChallengeSender performDefaultHandlingForAuthenticationChallenge:]):
        Implemented this optional NSURLAuthenticationChallengeSender protocol method by forwarding
        to the decision listener.
        (-[WKNSURLAuthenticationChallengeSender rejectProtectionSpaceAndContinueWithChallenge:]):
        Ditto.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Declared new delegate method.

        * UIProcess/Authentication/AuthenticationChallengeProxy.cpp:
        (WebKit::AuthenticationChallengeProxy::performDefaultHandling): Added. Sends a message to
        the authentication manager.
        (WebKit::AuthenticationChallengeProxy::rejectProtectionSpaceAndContinue): Ditto.
        * UIProcess/Authentication/AuthenticationChallengeProxy.h:

        * UIProcess/Authentication/AuthenticationDecisionListener.cpp:
        (WebKit::AuthenticationDecisionListener::performDefaultHandling): Added. Forwards to the
        authentication challenge proxy.
        (WebKit::AuthenticationDecisionListener::rejectProtectionSpaceAndContinue): Ditto.
        * UIProcess/Authentication/AuthenticationDecisionListener.h:

        * UIProcess/Cocoa/NavigationState.h: Added flag in m_navigationDelegateMethods struct.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Initialize
        webViewWillSendRequestForAuthenticationChallenge flag in the delegate methods struct.
        (WebKit::NavigationState::LoaderClient::canAuthenticateAgainstProtectionSpaceInFrame): If
        the delegate implements -_webView:willSendRequestForAuthenticationChallenge:, return true
        here; the delegate will respond with -rejectProtectionSpaceAndContinueWithChallenge: if
        it cannot authenticate.
        (WebKit::NavigationState::LoaderClient::didReceiveAuthenticationChallengeInFrame): If the
        delegate implements -_webView:willSendRequestForAuthenticationChallenge:, send that message.

2014-06-10  Timothy Horton  <timothy_horton@apple.com>

        Factor repeated CFRunLoopObserver code out
        https://bugs.webkit.org/show_bug.cgi?id=133690

        Reviewed by Simon Fraser.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator):
        (WebKit::coreAnimationDidCommitLayersCallback): Deleted.
        (WebKit::RemoteLayerTreeDrawingAreaProxy::scheduleCoreAnimationLayerCommitObserver): Deleted.
        (WebKit::RemoteLayerTreeDrawingAreaProxy::coreAnimationDidCommitLayers): Deleted.
        Make use of WebCore::RunLoopObserver.

2014-06-10  Anders Carlsson  <andersca@apple.com>

        Fix availability declaration.

        * UIProcess/API/Cocoa/WKError.h:

2014-06-10  Anders Carlsson  <andersca@apple.com>

        Address a comment about a comment.

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

2014-06-10  Anders Carlsson  <andersca@apple.com>

        Add -[WKWebView evaluateJavaScript:completionHandler:]
        https://bugs.webkit.org/show_bug.cgi?id=133689
        <rdar://problem/17152685>

        Reviewed by Geoffrey Garen.

        * Shared/API/c/WKErrorRef.h:
        Remove WKErrorCode typedef from here.

        * UIProcess/API/C/WKPageLoaderClient.h:
        Use uint32_t instead of WKErrorCode.

        * UIProcess/API/Cocoa/WKError.h:
        (NS_ENUM):
        Add a WKErrorDomain and a WKErrorCode enum.

        * UIProcess/API/Cocoa/WKError.mm:
        (localizedDescriptionForErrorCode):
        Helper that returns the localized description given an error code.

        (createNSError):
        Helper that creates an NSError with the correct localized description given an error code.

        * UIProcess/API/Cocoa/WKErrorInternal.h:
        Add helpers.

        * UIProcess/API/Cocoa/WKWebView.h:
        Add evaluateJavaScript:completionHandler: method.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (callbackErrorCode):
        Helper that returns a WKErrorCode from a WebKit::CallbackBase::Error enum.

        (-[WKWebView evaluateJavaScript:completionHandler:]):
        Run the JavaScript code and handle all the error cases.

        (-[WKWebView _runJavaScriptInMainFrame:]):
        Reimplement this using the API method.

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

2014-06-10  Anders Carlsson  <andersca@apple.com>

        Don't call Connection::terminateSoon if the connection is null
        https://bugs.webkit.org/show_bug.cgi?id=133695
        <rdar://problem/17069024>

        Reviewed by Tim Horton.

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

2014-06-10  Oliver Hunt  <oliver@apple.com>

        Add process entitlements
        https://bugs.webkit.org/show_bug.cgi?id=133693

        Reviewed by Alexey Proskuryakov.

        Add entitlements description for Database process, and
        ensure that we reference the correct seatbelt profiles.

        * Configurations/DatabaseService.Development.xcconfig:
        * Configurations/DatabaseService.xcconfig:
        * Configurations/Databases-iOS.entitlements:
        * Configurations/Network-iOS.entitlements:
        * Configurations/WebContent-iOS.entitlements:
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-10  Alexey Proskuryakov  <ap@apple.com>

        Fix crashes on some plug-in tests.
        https://bugs.webkit.org/show_bug.cgi?id=133691
        <rdar://problem/17255836>

        Reviewed by Anders Carlsson.

        * PluginProcess/PluginControllerProxy.cpp: (WebKit::PluginControllerProxy::initialize):
        Cannot use TemporaryChange here, because the object may go away before stack unwinds.

2014-06-10  Antti Koivisto  <antti@apple.com>

        Serialize ResourceRequests without platform request
        https://bugs.webkit.org/show_bug.cgi?id=133679

        Reviewed by Alexey Proskuryakov.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode):
        (IPC::ArgumentCoder<ResourceRequest>::decode):
        
            Encode ResourceRequest directly if possible.

2014-06-09  Anders Carlsson  <andersca@apple.com>

        Fix build.

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

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Work towards having frames in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=133665

        Reviewed by Tim Horton.
        
        Override coordinatesScrollingForFrameView() to always return true for composited
        frames, for iOS WK2 (eventually this class will have to be specialized for iOS and OS X).

        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::coordinatesScrollingForFrameView):

2014-06-09  Anders Carlsson  <andersca@apple.com>

        Give callbacks real status codes
        https://bugs.webkit.org/show_bug.cgi?id=133668

        Reviewed by Dan Bernstein.

        This makes it possible to know whether a callback was invalidated due to the webpage being closed,
        or whether it was due the a web process crash.

        * UIProcess/GenericCallback.h:
        (WebKit::GenericCallback::create):
        (WebKit::GenericCallback::performCallbackWithReturnValue):
        (WebKit::GenericCallback::invalidate):
        (WebKit::invalidateCallbackMap):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:

2014-06-09  Enrica Casucci  <enrica@apple.com>

        iOS WebKit: Crash in charactersAroundPosition.
        https://bugs.webkit.org/show_bug.cgi?id=133659
        <rdar://problem/17220870>

        Reviewed by Benjamin Poulain.

        We only need to compute charactersAroundPosition when we are in
        editable content.

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

2014-06-06  Andy Estes  <aestes@apple.com>

        [iOS] Expose _WKWebViewPrintFormatter and -_webView:printFrame: as SPI
        https://bugs.webkit.org/show_bug.cgi?id=133600

        Reviewed by David Kilzer.

        Expose -_webView:printFrame: in WKUIDelegatePrivate so that clients can implement support for window.print().
        Since window.print() can be called from a subframe, expose _WKWebViewPrintFormatter (renamed from
        WKWebViewPrintFormatter to reflect its new SPI status) as SPI and add a frameToPrint property.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Forward-declared _WKFrameHandle and declared -_webView:printFrame:.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _webViewPrintFormatter]): Added to get a _WKWebViewPrintFormatter.
        (-[WKWebView _printFormatterClass]): Updated the class name to _WKWebViewPrintFormatter.
        (-[WKWebView _computePageCountAndStartDrawingToPDFForFrame:printInfo:WebKit::firstPage:computedTotalScaleFactor:]):
        Added a frame argument. If frame is nil, print the main frame.
        (-[WKWebView _computePageCountAndStartDrawingToPDFWithPrintInfo:WebKit::firstPage:computedTotalScaleFactor:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h: Forward-declared _WKFrameHandle; removed an unneccessary
        forward-declaration of WKWebViewPrintFormatter.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Added a _webViewPrintFormatter property.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::printFrame): Called -_webView:printFrame:.
        * UIProcess/_WKWebViewPrintFormatter.h: Renamed from Source/WebKit2/UIProcess/WKWebViewPrintFormatter.h.
        * UIProcess/_WKWebViewPrintFormatter.mm: Renamed from Source/WebKit2/UIProcess/WKWebViewPrintFormatter.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-06-09  Beth Dakin  <bdakin@apple.com>

        Flash video controls hit-test incorrectly after changing topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=133658
        -and corresponding-
        <rdar://problem/16978590>

        Reviewed by Anders Carlsson.

        When the topContent changes, the PluginView needs to be informed.

        New function PluginView::topContentInsetDidChange() calls viewGeometryDidChange().
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::topContentInsetDidChange):
        * WebProcess/Plugins/PluginView.h:

        Call topContentInsetDidChange() after setting an inset only if it is a new inset.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setTopContentInset):

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

        Another attempt to fix the EFL and GTK builds after <http://trac.webkit.org/changeset/169711>
        (https://bugs.webkit.org/show_bug.cgi?id=133657)

        Substitute WKErrorRef.h for WKError.h.

        * UIProcess/API/efl/ewk_error.cpp:
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:

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

        Attempt to fix the EFL and GTK builds after <http://trac.webkit.org/changeset/169711>
        (https://bugs.webkit.org/show_bug.cgi?id=133657)

        Rename Shared/API/c/WKError.cpp to Shared/API/c/WKErrorRef.cpp.

        * CMakeLists.txt:

2014-06-09  Anders Carlsson  <andersca@apple.com>

        Address review feedback.

        * UIProcess/API/Cocoa/WKWebView.h:

2014-06-09  Anders Carlsson  <andersca@apple.com>

        Add a WKError.h header and rename the existing WKError.h to WKErrorRef.h
        https://bugs.webkit.org/show_bug.cgi?id=133657

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WebKit.h:
        * Shared/API/c/WKErrorRef.cpp: Renamed from Source/WebKit2/Shared/API/c/WKError.cpp.
        (WKErrorGetTypeID):
        (WKErrorCopyWKErrorDomain):
        (WKErrorCopyDomain):
        (WKErrorGetErrorCode):
        (WKErrorCopyFailingURL):
        (WKErrorCopyLocalizedDescription):
        * Shared/API/c/WKErrorRef.h: Renamed from Source/WebKit2/Shared/API/c/WKError.h.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/API/C/WKPageLoaderClient.h:
        * UIProcess/API/C/WebKit2_C.h:
        * UIProcess/API/Cocoa/WKError.h: Copied from Source/WebKit2/Shared/API/Cocoa/WebKit.h.
        * UIProcess/API/Cocoa/WKError.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WebKit.h.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/mac/WebErrorsMac.mm:

2014-06-09  Brady Eidson  <beidson@apple.com>

        Use different AppKit API for all services menus
        <rdar://problem/16874403> and https://bugs.webkit.org/show_bug.cgi?id=133649

        Reviewed by Tim Horton.

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

2014-06-09  Anders Carlsson  <andersca@apple.com>

        Add WKWindowFeatures.h to the umbrella header.

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WebKit.h:

2014-06-09  Anders Carlsson  <andersca@apple.com>

        Add -[WKWebView loadHTMLString:baseURL:]
        https://bugs.webkit.org/show_bug.cgi?id=133645
        <rdar://problem/17170649>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView loadHTMLString:baseURL:]):
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createLoadDataNavigation):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::loadHTMLString):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::loadDataImpl):
        (WebKit::WebPage::loadString):
        (WebKit::WebPage::loadData):
        (WebKit::WebPage::loadHTMLString):
        (WebKit::WebPage::loadAlternateHTMLString):
        (WebKit::WebPage::loadPlainTextString):
        (WebKit::WebPage::loadWebArchiveData):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-06-09  Simon Fraser  <simon.fraser@apple.com>

        Fix more latched scrolling test flakiness and slowness
        https://bugs.webkit.org/show_bug.cgi?id=133601

        Reviewed by Brent Fulgham.

        Latched scrolling tests were flakey for two reasons. First, the EventSender
        wheel events were async from the web to the UI process, and the resulting
        synthetic events also async from the UI to the web process. Make them sync
        for testing.
        
        Secondly, the timer-based scrolling tree commit could result in the scrolling
        tree (specifically the frame node's notion of the scrollable area and content
        size) not being updated before the scrolling thread starts getting wheel events.
        Fix by having WebPage::wheelEventSyncForTesting() commit if necessary.
        
        Finally remove all the now-unnecessary timeouts from the tests.

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

2014-06-09  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] Add parameter to MiniBrowser to disable web security
        https://bugs.webkit.org/show_bug.cgi?id=121095

        Reviewed by Gyuyoung Kim.

        -w (--web-security) commandline allows to disable/enable web security (enabled by default).
        The reason for this is to test and debug (using, for example, MiniBrowser) scripts accessing
        resources from other domains (cross-domain requests) such as access map location on another server.
        Another possibility is to launch in a webkit browser local file tests that will refer to the links
        in the http website loaded in an iframe. It will not be possible without deactivation of web security.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_web_security_enabled_set):
        (ewk_settings_web_security_enabled_get):
        * UIProcess/API/efl/ewk_settings.h:
        * UIProcess/API/efl/tests/test_ewk2_settings.cpp:
        (TEST_F):

2014-06-08  Sam Weinig  <sam@webkit.org>

        [Cocoa] WKScriptMessage should include the frame the message is from
        <rdar://problem/17210226>
        https://bugs.webkit.org/show_bug.cgi?id=133623

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKScriptMessage.h:
        Add WKFrameInfo property.

        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        (-[WKScriptMessage _initWithBody:webView:frameInfo:name:]):
        Add WKFrameInfo to the initializer.

        (-[WKScriptMessage frameInfo]):
        Implement frameInfo accessor.

        * UIProcess/API/Cocoa/WKScriptMessageInternal.h:
        Add WKFrameInfo to the initializer.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        Pass the WKFrameInfo to the WKScriptMessage initializer.

2014-06-08  Dan Bernstein  <mitz@apple.com>

        [Cococa] WKWindowFeatures.h is missing from WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=133622

        Reviewed by Sam Weinig.

        * WebKit2.xcodeproj/project.pbxproj: Promoted WKWindowFeatures.h to Public.

2014-06-08  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17208234> [Mac] Client-certificate authentication isn’t working when using the modern API
        https://bugs.webkit.org/show_bug.cgi?id=133617

        Reviewed by Sam Weinig.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Credential>::encode): Encode certificate credentials on Mac as well.
        (IPC::ArgumentCoder<Credential>::decode): Decode certificate credentials on Mac as well.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::encode): Use OS X API for getting a persistent reference to a key.
        (IPC::decode): Use OS X API for getting a key from a persistent reference.

        * Shared/cf/ArgumentCodersCF.h: Make identity coding available on Mac as well.

2014-06-07  Anders Carlsson  <andersca@apple.com>

        Get rid of _WKScriptWorld
        https://bugs.webkit.org/show_bug.cgi?id=133610

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WebKitPrivate.h:
        * UIProcess/API/Cocoa/_WKScriptWorld.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-05-29  Anders Carlsson  <andersca@apple.com>

        HTTPHeaderMap should not derive from HashMap
        https://bugs.webkit.org/show_bug.cgi?id=133392

        Reviewed by Darin Adler.

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

2014-06-07  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Fix a path used for sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=133602
        <rdar://problem/17212011>

        Reviewed by David Kilzer.

        * WebKit2.xcodeproj/project.pbxproj:

2014-06-06  Enrica Casucci  <enrica@apple.com>

        REGRESSION (iOS WebKit2): backspace key does not repeat beyond a single word.
        https://bugs.webkit.org/show_bug.cgi?id=133593
        <rdar://problem/16352228>

        Reviewed by Benjamin Poulain.

        We need to provide a way for the keyboard layer to select from
        the current position to the beginning of the word moving backwards
        and implement the method to know when we have reached the beginning of the document.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectWordBackward]):
        (-[WKContentView _selectionAtDocumentStart]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::selectWordBackward):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWordBackward):

2014-06-06  Enrica Casucci  <enrica@apple.com>

        Adopt the new UIAlertController API to replace UIActionSheet.
        https://bugs.webkit.org/show_bug.cgi?id=133582
        <rdar://problem/16845223>

        Reviewed by Joseph Pecoraro.

        UIActionSheet is deprecated. We need to move out action sheets
        implementation to UIAlertView.

        * UIProcess/API/Cocoa/_WKElementAction.h:
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet presentSheetFromRect:]):
        (-[WKActionSheet doneWithSheet]):
        (-[WKActionSheet willRotate]):
        (-[WKActionSheet updateSheetPosition]):
        (-[WKActionSheet _didRotateAndLayout]):
        (-[WKActionSheet didRotate]):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        (-[WKActionSheetAssistant cleanupSheet]):
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _longPressRecognized:]):

2014-06-06  Gavin Barraclough  <baraclough@apple.com>

        Should boost ChildProcesses on iOS
        https://bugs.webkit.org/show_bug.cgi?id=133583

        Reviewed by Sam Weinig.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
            - boost all child processes on iOS.

2014-06-06  Alexey Proskuryakov  <ap@apple.com>

        Build fix after <http://trac.webkit.org/changeset/169655>.

        The SPIs used do not exist on Mac, limit the code to iOS.

        * Shared/Authentication/mac/AuthenticationManager.mac.mm:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Credential>::encode):
        (IPC::ArgumentCoder<Credential>::decode):
        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::typeFromCFTypeRef):
        (IPC::encode):
        (IPC::decode):
        * Shared/cf/ArgumentCodersCF.h:

2014-06-06  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/17095692> [iOS] Client-certificate authentication isn’t working
        https://bugs.webkit.org/show_bug.cgi?id=133527

        Reviewed by Darin Adler.

        * Configurations/Network-iOS.entitlements: Enabled the Network process to access the keys
        needed to create identities to authenticate with.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<Credential>::encode): Encode the credential type, and if it is a client
        certificate, encode the identity and the certificates.
        (IPC::ArgumentCoder<Credential>::decode): Decode the credential type. If it is a client
        certificate, decode the identity and the certificates and use the proper Credential
        constructor.

        * Shared/cf/ArgumentCodersCF.cpp:
        (IPC::typeFromCFTypeRef): Handle SecIdentityRef.
        (IPC::encode): Encode an identity by encoding its certificate and a persistent reference to
        its key.
        (IPC::decode): Decode a certificate and a persistent reference to a key, find the key, and
        create an identity.
        * Shared/cf/ArgumentCodersCF.h:

2014-06-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WebPage sometimes forces two resize events on animated resize
        https://bugs.webkit.org/show_bug.cgi?id=133534

        Reviewed by Enrica Casucci.

        When I updated the patch for resize events (r168556) to use the unobscured rect in scrollview coordinates,
        I forgot to update a snippet of code in dynamicViewportSizeUpdate(). Since that code was still using
        the scaled unobscured rect, there was sometimes a difference of 1 pixel between the size set by that
        call site and the others.

        This path nukes the bad code and use the unobscured rect in scrollview coordinates given by the UIProcess.

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

2014-06-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add device orientation
        https://bugs.webkit.org/show_bug.cgi?id=133530
        <rdar://problem/16680041>

        Reviewed by Tim Horton.

        Add device orientation for WebKit2.

        For the public API, WKWebView get the updates through the notification UIWindowDidRotateNotification.
        We do not have any control over how the API is used, but we can expect the size will be updated before
        the end of rotation in most cases and the events should be sent in the right order.

        For Safari, we use an override to support animated resize (and some tabs corner cases).

        On the WebProcess side, we just get the new orientation directly or on DynamicViewportSizeUpdate.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (deviceOrientationForUIInterfaceOrientation):
        (deviceOrientation):
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _windowDidRotate:]):
        (-[WKWebView _setInterfaceOrientationOverride:]):
        (-[WKWebView _interfaceOrientationOverride]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::deviceOrientation):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setDeviceOrientation):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::deviceOrientation):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::deviceOrientation):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setDeviceOrientation):
        (WebKit::WebPage::dynamicViewportSizeUpdate):

2014-06-05  Oliver Hunt  <oliver@apple.com>

        Enable SANDBOX_EXTENSIONS build flag universally on cocoa
        https://bugs.webkit.org/show_bug.cgi?id=133556

        Reviewed by Alexey Proskuryakov.

        Remove unnecessary iOS exception.

        * WebKit2Prefix.h:

2014-06-05  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Tweak plug-in sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=133549

        Fix <rdar://problem/17068055> and <rdar://problem/17148837>.

        Reviewed by Sam Weinig and Simon Cooper.

        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:

2014-06-05  Tanay C  <tanay.c@samsung.com>

        Resolve compiler error (call of overloaded 'schedule' function is ambiguous) 
        https://bugs.webkit.org/show_bug.cgi?id=133467

        Reviewed by Carlos Garcia Campos.

        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::handleResponseLater): Explicitly casting second parameter to std::function<void()>

2014-06-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Restore the visual scroll position instead of the dom scroll position when restoring states from the history
        https://bugs.webkit.org/show_bug.cgi?id=133490

        Reviewed by Tim Horton.

        Instead of restoring the scroll position, restore the visual position. This makes pages appear at the same position
        on screen ignoring changes in the obscured top inset.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::saveViewStateToItem):
        (WebKit::WebFrameLoaderClient::restoreViewState):
        Save and restore userHasChangedPageScaleFactor to handle rescaling correctly.
        Limit the scale into valid viewport limits in case the viewport meta tag has changed or the device has rotated.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::userHasChangedPageScaleFactor):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):
        (WebKit::WebPage::updateVisibleContentRects):
        In updateVisibleContentRects, we keep track or the current difference between the exposed rect and the unobscured rect.
        When restoring the page position, we use the current top inset and the saved exposed rect to restore the visual
        scroll position.

        It is not very robust as it does not resolve races between the two processes, but that is not worse than what we is there now.

2014-06-03  Timothy Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Zoom): Can show unpainted regions when zoom-pinching-out
        https://bugs.webkit.org/show_bug.cgi?id=133472
        <rdar://problem/15686848>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToLayers):
        (WebKit::TiledCoreAnimationDrawingArea::adjustTransientZoom):
        Use prepopulateRect() when zooming out to ensure that we have tiles for the current exposed area.

        Factor applyTransientZoomToLayers out of adjustTransientZoom, so that
        flushLayers can call applyTransientZoomToLayers without ending up calling prepopulateRect()
        during layer flushing, which causes trouble.

        It is OK to populate layers at the current scale even when zooming out, because the overdraw
        already covers most of the zoomed out area, and we're only adding a few more tiles at worst.

2014-06-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Align the highlight rects with device pixels
        https://bugs.webkit.org/show_bug.cgi?id=133464
        <rdar://problem/16708861>

        Reviewed by Enrica Casucci.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showTapHighlightWithColor:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):

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

        REGRESSION (iOS WebKit2): Single tap in pages with focus on load will clear the selection after the keyboard appears.
        https://bugs.webkit.org/show_bug.cgi?id=133465
        <rdar://problem/17059189>

        Reviewed by Benjamin Poulain.

        If a page focuses an input field on load we don't bring the keyboard on screen
        since the keyboard is only shown when the user interacts with the page with gestures.
        Still the WebProcess sets the focus and the selection according to the rules.
        We need to make sure the UI process doesn't accidentally clear this selection
        when the user starts the interaction with the page.
        This patch also improves the function that retrieves the autocorrection data
        to be returned to the keyboard, making sure that we always send back a reply
        even when we don't have a valid selection.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _singleTapCommited:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestAutocorrectionData):

2014-05-31  Anders Carlsson  <andersca@apple.com>

        Change DeferrableOneShotTimer to use std::function instead of being a class template
        https://bugs.webkit.org/show_bug.cgi?id=133423

        Reviewed by Antti Koivisto.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformSetCacheModel):
        * Shared/CacheModel.cpp:
        (WebKit::calculateCacheSizes):
        * Shared/CacheModel.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginSnapshotTimerFired):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformSetCacheModel):

2014-06-02  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Round the UIScrollView content size to device pixel
        https://bugs.webkit.org/show_bug.cgi?id=133417
        <rdar://problem/15922440>

        Reviewed by Simon Fraser.

        We should really have the scaled content size floored to device pixels, but that will be for another
        time.
        This patch ensure the content size as seen by the API is rounded to device pixels. The value is floored
        to avoid showing partial pixels when the content is stable.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (floorFloatToPixels):
        (roundScrollViewCountentSize):
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:WTF::]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView scrollView:contentSizeForZoomScale:withProposedSize:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):

2014-06-02  Oliver Hunt  <oliver@apple.com>

        Move ifdef to the right place.

        RS=Enrica

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):

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

        Set default voucher for XPC client processes
        https://bugs.webkit.org/show_bug.cgi?id=133458

        Reviewed by Geoff Garen.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):
            - add voucher_replace_default_voucher.
        * config.h:
            - add HAVE_VOUCHERS.

2014-06-02  Jeremy Jones  <jeremyj@apple.com>

        Send external playback properties to fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=133366

        Reviewed by Simon Fraser.

        Forward setExternalPlayback.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: add setExternalPlaybackProperties
        * WebProcess/ios/WebVideoFullscreenManager.h: add setExternalPlaybackProperties
        * WebProcess/ios/WebVideoFullscreenManager.mm: add setExternalPlaybackProperties
        (WebKit::WebVideoFullscreenManager::setExternalPlaybackProperties): added

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

        Remove unintentional changes to WKContentViewInteraction.mm
        introduced in r169500.

        Unreviewed.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (+[WKAutocorrectionContext autocorrectionContextWithData:markedText:selectedText:afterText:selectedRangeInMarkedText:]):

2014-06-02  Geoffrey Garen  <ggaren@apple.com>

        Address some review comments on bug 133408
        https://bugs.webkit.org/show_bug.cgi?id=133410

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:

2014-06-02  Dan Bernstein  <mitz@apple.com>

        [Cocoa] -[WKWebView activeURL] is unused
        https://bugs.webkit.org/show_bug.cgi?id=133440

        Reviewed by Mark Rowe.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView activeURL]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Removed the property declaration.

2014-05-31  Oliver Hunt  <oliver@apple.com>

        Restructure initial distinct sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=133415

        Reviewed by Alexey Proskuryakov.

        Add support for manually instantiating the network and
        content process sandboxes, and add initial profiles.
        These profiles are completely generic so we can make sure
        nothing is broken by enabling them.

        This also adds a target to the WebKit2 project to correctly
        process the profiles.

        * DatabaseProcess/ios/DatabaseProcessIOS.mm:
        (WebKit::DatabaseProcess::initializeSandbox):
        * DatabaseProcess/ios/com.apple.WebKit.DatabasesIOS.sb: Removed.
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::initializeSandbox):
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Databases.sb: Added.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Added.
        * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::initializeSandbox):

2014-06-01  Sam Weinig  <sam@webkit.org>

        [Cocoa] Add SPI to get a WebArchive of the WKWebView
        <rdar://problem/16748120>
        https://bugs.webkit.org/show_bug.cgi?id=133439

        Reviewed by Anders Carlsson.

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

2014-05-31  Anders Carlsson  <andersca@apple.com>

        Add a LazyNeverDestroyed class template and use it
        https://bugs.webkit.org/show_bug.cgi?id=133425

        Reviewed by Darin Adler.

        * Shared/mac/SecItemShim.cpp:
        (WebKit::responseMap):

2014-05-31  Timothy Horton  <timothy_horton@apple.com>

        View snapshots are sometimes taken at the wrong scale
        https://bugs.webkit.org/show_bug.cgi?id=133419
        <rdar://problem/17087497>

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        Work around <rdar://problem/17084993> by re-requesting the snapshot at
        kCGWindowImageNominalResolution if it was captured at the wrong scale.

2014-05-31  Dan Bernstein  <mitz@apple.com>

        [iOS] WebKit2.framework is unused
        https://bugs.webkit.org/show_bug.cgi?id=133424

        Reviewed by Anders Carlsson.

        * Configurations/WebKit2.xcconfig: Set SKIP_INSTALL to YES when targeting iOS.

2014-05-30  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] When a page does not finish rotation before the end of the animation, synchronize explicitely
        https://bugs.webkit.org/show_bug.cgi?id=133364
        <rdar://problem/17026333>

        Reviewed by Sam Weinig.

        When a page that does layout on rotation does not respond before the end of the animation, we end up with
        a completely inconsistent state on the UIProcess (because it is unware of the new states).

        The perfect way to fix this would be to make animated resize transactional and have the WebProcess resolve
        conflicts. That is very complicated and the issue is uncommon, so this patch does not do that.

        This patch force the synchronization whenever we finish the animation before we heard back
        from the WebProcess.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _endAnimatedResize]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::resetState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::synchronizeDynamicViewportUpdate):
        (WebKit::WebPageProxy::dynamicViewportUpdateChangedTarget):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::synchronizeDynamicViewportUpdate):

2014-05-30  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): space space to insert period doesn't work in web forms.
        https://bugs.webkit.org/show_bug.cgi?id=133413
        <rdar://problem/16948333>

        Reviewed by Benjamin Poulain.

        iOS TextInput needs to know about content surrounding the
        current position while editing. Since we don't want to
        query this information synchronously when asked, we cache it
        as part of the EditorState. EditorState now contains a vector of
        three characters representing the content after, before and two
        position before the caret position.
        The patch also replaces all calls to plainText with plainTextReplacingNoBreakSpace
        to work well with iOS text input.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _characterInRelationToCaretSelection:]):
        (+[WKAutocorrectionContext autocorrectionContextWithData:markedText:selectedText:afterText:selectedRangeInMarkedText:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDictationContext):
        (WebKit::WebPage::replaceSelectedText):
        (WebKit::WebPage::replaceDictatedText):
        (WebKit::WebPage::requestAutocorrectionData):
        (WebKit::WebPage::syncApplyAutocorrection):
        (WebKit::computeAutocorrectionContext):

2014-05-30  Geoffrey Garen  <ggaren@apple.com>

        Fixed the build by adding back a declaration I deleted by accident :(.

        Unreviewed.

        * UIProcess/API/Cocoa/WKWebView.h:

2014-05-30  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling in r169490.

        I changed a non-ASCII apostrophe to ASCII.

        Restored changeset:

        "Some more copy-editing of the Modern WebKit headerdoc"
        https://bugs.webkit.org/show_bug.cgi?id=133408
        http://trac.webkit.org/changeset/169490

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2014-05-30  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling out r169490.

        It broke the build with a mysterious warning about ASCII.

        Reverted changeset:

        "Some more copy-editing of the Modern WebKit headerdoc"
        https://bugs.webkit.org/show_bug.cgi?id=133408
        http://trac.webkit.org/changeset/169490

2014-05-30  Geoffrey Garen  <ggaren@apple.com>

        Some more copy-editing of the Modern WebKit headerdoc
        https://bugs.webkit.org/show_bug.cgi?id=133408

        Reviewed by Beth Dakin.

        A copy-editor suggested some edits to the headerdoc for clarity,
        style, and formatting.

        I reviewed the edits and accepted about 80% of them.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2014-05-30  Timothy Horton  <timothy_horton@apple.com>

        Crash loading skydrive.com (assertion under RemoteLayerTreeDisplayRefreshMonitor)
        https://bugs.webkit.org/show_bug.cgi?id=133370
        <rdar://problem/17061361>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::willDestroyDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        Post-landing review comments from Darin noted that checking if the
        DrawingArea's m_displayRefreshMonitors contains the monitor in the
        list to notify is insufficient, because a new one could have been
        added with the same address. Instead, copy the HashSet, removing
        at random from it and firing didUpdateLayers, but *also* removing
        from it in the willDestroyDisplayRefreshMonitor callback.
        This is very similar to what DisplayRefreshMonitor itself does internally
        (we don't have to duplicate its code to avoid re-entry because it is
        already impossible to re-enter didUpdate).

2014-05-29  Anders Carlsson  <andersca@apple.com>

        -[WKProcessPoolConfiguration setCachePartitionedURLSchemes:] should do a deep copy
        https://bugs.webkit.org/show_bug.cgi?id=133393

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration setCachePartitionedURLSchemes:]):

2014-05-29  Mark Lam  <mark.lam@apple.com>

        Restoring FloatingPointEnvironment initialization that was accidentally rolled out by r169176.
        <https://webkit.org/b/133389>

        Rubber stamped by Oliver Hunt.

        * Shared/ios/ChildProcessIOS.mm:
        (WebKit::ChildProcess::platformInitialize):

2014-05-29  Enrica Casucci  <enrica@apple.com>

        Need to notify the keyboard about every KeyDown event.
        https://bugs.webkit.org/show_bug.cgi?id=133383
        <rdar://problem/16633975>

        Reviewed by Benjamin Poulain.
        
        A key down will generate most of the time a call to the keyboard to add input or delete.
        But the event could be handled by JavaScript and its default prevented.
        We need to notify the keyboard in every case to allow updating its internal state about what has been typed.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::doneWithKeyEvent):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didHandleKeyEvent:]):

2014-05-29  Matthew Hanson  <matthew_hanson@apple.com>

        Roll out r169439. <rdar://problem/17069364>

    2014-05-28  Gavin Barraclough  <baraclough@apple.com> 

            viewStateDidChange should always fully update ViewState
            https://bugs.webkit.org/show_bug.cgi?id=133159

            Reviewed by Anders Carlson.

            Currently WebPageProxy::viewStateDidChange is passed a mask of bits to update.

            This has the following negative consequences:
             – WKWebView implicitly requires more detailed knowledge of the internal implementation of the PageClient.
             – Updates may unnecessarily be split over multiple IPC messages.
             – In order to support partial updates we make multiple virtual function calls to PageClient, which then makes duplicate objc calls. 

            Better to just always update the entire ViewState. 

            * UIProcess/API/Cocoa/WKWebView.mm:
            (-[WKWebView didMoveToWindow]):
                - removed argument to viewStateDidChange.
            * UIProcess/API/gtk/PageClientImpl.cpp:
            (WebKit::PageClientImpl::viewState):
            (WebKit::PageClientImpl::isViewWindowActive): Deleted.
            (WebKit::PageClientImpl::isViewFocused): Deleted.
            (WebKit::PageClientImpl::isViewVisible): Deleted.
            (WebKit::PageClientImpl::isViewInWindow): Deleted.
            * UIProcess/API/gtk/PageClientImpl.h:
                - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.
            * UIProcess/API/mac/WKView.mm:
            (-[WKView becomeFirstResponder]):
            (-[WKView resignFirstResponder]):
            (-[WKView viewDidMoveToWindow]):
            (-[WKView _windowDidBecomeKey:]):
            (-[WKView _windowDidResignKey:]):
            (-[WKView _windowDidMiniaturize:]):
            (-[WKView _windowDidDeminiaturize:]):
            (-[WKView _windowDidOrderOffScreen:]):
            (-[WKView _windowDidOrderOnScreen:]):
            (-[WKView _windowDidChangeOcclusionState:]):
            (-[WKView viewDidHide]):
            (-[WKView viewDidUnhide]):
            (-[WKView _activeSpaceDidChange:]):
            (-[WKView _setThumbnailView:]):
            (-[WKView endDeferringViewInWindowChanges]):
            (-[WKView endDeferringViewInWindowChangesSync]):
                - removed argument to viewStateDidChange.
            * UIProcess/CoordinatedGraphics/WebView.cpp:
            (WebKit::WebView::viewState):
            (WebKit::WebView::isViewWindowActive): Deleted.
            (WebKit::WebView::isViewFocused): Deleted.
            (WebKit::WebView::isViewVisible): Deleted.
            (WebKit::WebView::isViewInWindow): Deleted.
            * UIProcess/CoordinatedGraphics/WebView.h:
                - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.
            * UIProcess/PageClient.h:
            (WebKit::PageClient::isViewVisibleOrOccluded): Deleted.
            (WebKit::PageClient::isVisuallyIdle): Deleted.
                - merged isViewVisibleOrOccluded/isVisuallyIdle to subclass viewState methods.
            * UIProcess/WebPageProxy.cpp:
            (WebKit::WebPageProxy::WebPageProxy):
            (WebKit::WebPageProxy::reattachToWebProcess):
                - updateViewState -> PageClient::viewState
            (WebKit::WebPageProxy::viewStateDidChange):
                - argument removed; updateViewState -> PageClient::viewState.
            (WebKit::WebPageProxy::setCursor):
                - call isViewWindowActive on WebPageProxy, rather than PageClient.
            (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
                - call isViewWindowActive on WebPageProxy, rather than PageClient.
            (WebKit::WebPageProxy::updateViewState): Deleted.
                - removed - viewState method moved to PageClient.
            * UIProcess/WebPageProxy.h:
            (WebKit::WebPageProxy::isViewWindowActive):
                - added missing implementation.
            (WebKit::WebPageProxy::isViewVisible):
                - removed argument to viewStateDidChange.
            * UIProcess/WebProcessProxy.cpp:
            (WebKit::WebProcessProxy::windowServerConnectionStateChanged):
                - removed argument to viewStateDidChange.
            * UIProcess/ios/PageClientImplIOS.h:
            * UIProcess/ios/PageClientImplIOS.mm:
            (WebKit::PageClientImpl::viewState):
            (WebKit::PageClientImpl::isViewWindowActive): Deleted.
            (WebKit::PageClientImpl::isViewFocused): Deleted.
            (WebKit::PageClientImpl::isViewVisible): Deleted.
            (WebKit::PageClientImpl::isViewInWindow): Deleted.
            (WebKit::PageClientImpl::isViewVisibleOrOccluded): Deleted.
            (WebKit::PageClientImpl::isVisuallyIdle): Deleted.
                - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.
            * UIProcess/ios/WKContentView.mm:
            (-[WKContentView didMoveToWindow]):
            (-[WKContentView _applicationDidEnterBackground:]):
            (-[WKContentView _applicationWillEnterForeground:]):
                - removed argument to viewStateDidChange.
            * UIProcess/mac/PageClientImpl.h:
            * UIProcess/mac/PageClientImpl.mm:
            (WebKit::PageClientImpl::viewState):
            (WebKit::PageClientImpl::showCorrectionPanel):
            (WebKit::PageClientImpl::showDictationAlternativeUI):
            (WebKit::PageClientImpl::isViewWindowActive): Deleted.
            (WebKit::PageClientImpl::isViewFocused): Deleted.
            (WebKit::PageClientImpl::isViewVisibleOrOccluded): Deleted.
            (WebKit::PageClientImpl::isVisuallyIdle): Deleted.
                - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.

2014-05-29  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Can’t recover from subframe load errors
        https://bugs.webkit.org/show_bug.cgi?id=133385

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Declared new delegate method.
        * UIProcess/Cocoa/NavigationState.h: Added flag in m_navigationDelegateMethods struct.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Initialize
        webViewNavigationDidFailProvisionalLoadInSubframeWithError flag in the delegate methods
        struct.
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame): If the
        error occurred in a subframe, invoke the new delegate method.

2014-05-29  Geoffrey Garen  <ggaren@apple.com>

        Added a missing @result to WKPreferences headerdoc
        https://bugs.webkit.org/show_bug.cgi?id=133381

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKPreferences.h:

2014-05-29  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Always use plug-in sandbox with sandboxed clients
        https://bugs.webkit.org/show_bug.cgi?id=133358
        <rdar://problem/15637695>

        Reviewed by Anders Carlsson.

        * PluginProcess/mac/PluginProcessMac.mm: (WebKit::PluginProcess::initializeSandbox):
        Refuse to start if parent process is sandboxed, and plug-in process is not going to be.
        None of this should run in normal case, because there are also checks on UI process side.
        
        * Shared/Plugins/PluginModuleInfo.h:
        * Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm:
        (WebKit::NetscapePluginModule::getPluginInfo):
        Added a member to PluginModuleInfo, telling whether the plug-in has a sandbox profile.

        * Shared/Plugins/Netscape/mac/PluginInformationMac.mm:
        (WebKit::getPlatformPluginModuleInformation): Use the new PluginModuleInfo member,
        we no longer need to check the file system here.

        * WebKit2.xcodeproj/project.pbxproj:
        * Shared/mac/SandboxUtilities.h: Added.
        * Shared/mac/SandboxUtilities.cpp: Added. (WebKit::processIsSandboxed):
        This code is simple, but include magic is not. Moved it to a separate file to
        avoid repeating.

        * UIProcess/API/C/mac/WKContextPrivateMac.mm: Removed an unused include.

        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        (WebKit::PluginInfoStore::shouldUsePlugin): Don't use unsandboxed plug-ins in
        sandboxed applications.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions): Don't ever pass disable-sandbox
        from sandboxed processes.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::isClientSandboxed):
        Use the new shared code in SandboxUtilities.h.

2014-05-29  Timothy Horton  <timothy_horton@apple.com>

        Crash loading skydrive.com (assertion under RemoteLayerTreeDisplayRefreshMonitor)
        https://bugs.webkit.org/show_bug.cgi?id=133370
        <rdar://problem/17061361>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        Copy the set of refresh monitors so that we don't try to mutate the list we're iterating,
        and don't try to fire refresh monitors that were removed in a previous iteration of the loop.

2014-05-29  Timothy Horton  <timothy_horton@apple.com>

        REGRESSION (iOS WebKit2): Find-in-Page doesn't work in subframes
        https://bugs.webkit.org/show_bug.cgi?id=133372
        <rdar://problem/17045070>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        Flip ignoreCompositionSelectionChange and updateAppearanceEnabled on all
        frames, not just the main frame, because the found string can be in a subframe.
        Ideally we would flip it on/off for each frame as we move the selection between them,
        but would require a lot of work (and the overhead of touching each frame shouldn't be significant).

2014-05-29  Dan Bernstein  <mitz@apple.com>

        WKBundleActivateMacFontAscentHack is unused
        https://bugs.webkit.org/show_bug.cgi?id=133379

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleActivateMacFontAscentHack): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::activateMacFontAscentHack): Deleted.
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::activateMacFontAscentHack): Deleted.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::activateMacFontAscentHack): Deleted.

2014-05-29  Alexey Proskuryakov  <ap@apple.com>

        Add a sandbox profile for com.apple.appstore.CodeRedeemerNetscapePlugin
        https://bugs.webkit.org/show_bug.cgi?id=133360

        Reviewed by Sam Weinig.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb: Looks like
        anyone using camera would need access to CoreMedia preferences.

        * Resources/PlugInSandboxProfiles/com.apple.appstore.CodeRedeemerNetscapePlugin.sb: Added.

        * WebKit2.xcodeproj/project.pbxproj: Added the profile.

2014-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for HiDPI icons
        https://bugs.webkit.org/show_bug.cgi?id=133377

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake: Compile also the @2x versions for the builtin icons.

2014-05-29  Owen Taylor  <otaylor@redhat.com>

        [GTK] Add HighDPI support for non-accelerated compositing contents
        https://bugs.webkit.org/show_bug.cgi?id=131562

        Reviewed by Anders Carlsson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (deviceScaleFactorChanged): Added this callback to pass scale changes to the page proxy.
        (webkitWebViewBaseCreateWebPage): Attach the callback to the notify signal.
        * UIProcess/WebPageProxy.cpp:
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::WebPageProxy::setCustomDeviceScaleFactor): Do not set a
        custom device scale factor for cairo when it's not supported.
        (WebKit::createBackingStoreForGTK): Pass the scale factor to the WebCore backing store.
        (WebKit::BackingStore::incorporateUpdate): Ditto.

2014-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GMainLoopSource for idle and timeout sources in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130081

        Reviewed by Martin Robinson.

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerSocketEventHandler): Stop pretending it's
        possible to register a socket event handler for more than one
        descriptor.
        (WorkQueue::unregisterSocketEventHandler):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfter):
        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::~DownloadClient):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::handleResponse):
        (WebKit::DownloadClient::handleResponseLater):
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::PluginInfoCache):
        (WebKit::PluginInfoCache::~PluginInfoCache):
        (WebKit::PluginInfoCache::saveToFile):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/Plugins/gtk/PluginInfoCache.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk):
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired):
        (WebKit::LayerTreeHostGtk::scheduleLayerFlush):
        (WebKit::LayerTreeHostGtk::cancelPendingLayerFlush):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2014-05-28  Gavin Barraclough  <baraclough@apple.com>

        viewStateDidChange should always fully update ViewState
        https://bugs.webkit.org/show_bug.cgi?id=133159

        Reviewed by Anders Carlson.

        Currently WebPageProxy::viewStateDidChange is passed a mask of bits to update.

        This has the following negative consequences:
         – WKWebView implicitly requires more detailed knowledge of the internal implementation of the PageClient.
         – Updates may unnecessarily be split over multiple IPC messages.
         – In order to support partial updates we make multiple virtual function calls to PageClient, which then makes duplicate objc calls.

        Better to just always update the entire ViewState.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
            - removed argument to viewStateDidChange.
        * UIProcess/API/gtk/PageClientImpl.cpp:
        (WebKit::PageClientImpl::viewState):
        (WebKit::PageClientImpl::isViewWindowActive): Deleted.
        (WebKit::PageClientImpl::isViewFocused): Deleted.
        (WebKit::PageClientImpl::isViewVisible): Deleted.
        (WebKit::PageClientImpl::isViewInWindow): Deleted.
        * UIProcess/API/gtk/PageClientImpl.h:
            - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]):
        (-[WKView resignFirstResponder]):
        (-[WKView viewDidMoveToWindow]):
        (-[WKView _windowDidBecomeKey:]):
        (-[WKView _windowDidResignKey:]):
        (-[WKView _windowDidMiniaturize:]):
        (-[WKView _windowDidDeminiaturize:]):
        (-[WKView _windowDidOrderOffScreen:]):
        (-[WKView _windowDidOrderOnScreen:]):
        (-[WKView _windowDidChangeOcclusionState:]):
        (-[WKView viewDidHide]):
        (-[WKView viewDidUnhide]):
        (-[WKView _activeSpaceDidChange:]):
        (-[WKView _setThumbnailView:]):
        (-[WKView endDeferringViewInWindowChanges]):
        (-[WKView endDeferringViewInWindowChangesSync]):
            - removed argument to viewStateDidChange.
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::viewState):
        (WebKit::WebView::isViewWindowActive): Deleted.
        (WebKit::WebView::isViewFocused): Deleted.
        (WebKit::WebView::isViewVisible): Deleted.
        (WebKit::WebView::isViewInWindow): Deleted.
        * UIProcess/CoordinatedGraphics/WebView.h:
            - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.
        * UIProcess/PageClient.h:
        (WebKit::PageClient::isViewVisibleOrOccluded): Deleted.
        (WebKit::PageClient::isVisuallyIdle): Deleted.
            - merged isViewVisibleOrOccluded/isVisuallyIdle to subclass viewState methods.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
            - updateViewState -> PageClient::viewState
        (WebKit::WebPageProxy::viewStateDidChange):
            - argument removed; updateViewState -> PageClient::viewState.
        (WebKit::WebPageProxy::setCursor):
            - call isViewWindowActive on WebPageProxy, rather than PageClient.
        (WebKit::WebPageProxy::updateBackingStoreDiscardableState):
            - call isViewWindowActive on WebPageProxy, rather than PageClient.
        (WebKit::WebPageProxy::updateViewState): Deleted.
            - removed - viewState method moved to PageClient.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::isViewWindowActive):
            - added missing implementation.
        (WebKit::WebPageProxy::isViewVisible):
            - removed argument to viewStateDidChange.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::windowServerConnectionStateChanged):
            - removed argument to viewStateDidChange.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::viewState):
        (WebKit::PageClientImpl::isViewWindowActive): Deleted.
        (WebKit::PageClientImpl::isViewFocused): Deleted.
        (WebKit::PageClientImpl::isViewVisible): Deleted.
        (WebKit::PageClientImpl::isViewInWindow): Deleted.
        (WebKit::PageClientImpl::isViewVisibleOrOccluded): Deleted.
        (WebKit::PageClientImpl::isVisuallyIdle): Deleted.
            - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
        (-[WKContentView _applicationDidEnterBackground:]):
        (-[WKContentView _applicationWillEnterForeground:]):
            - removed argument to viewStateDidChange.
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::viewState):
        (WebKit::PageClientImpl::showCorrectionPanel):
        (WebKit::PageClientImpl::showDictationAlternativeUI):
        (WebKit::PageClientImpl::isViewWindowActive): Deleted.
        (WebKit::PageClientImpl::isViewFocused): Deleted.
        (WebKit::PageClientImpl::isViewVisibleOrOccluded): Deleted.
        (WebKit::PageClientImpl::isVisuallyIdle): Deleted.
            - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState.

2014-05-28  Jeffrey Pfau  <jpfau@apple.com>

        Add Obj-C API for cache partitioned URL schemes
        https://bugs.webkit.org/show_bug.cgi?id=133361
        <rdar://problem/17035415>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        (-[_WKProcessPoolConfiguration cachePartitionedURLSchemes]):
        (-[_WKProcessPoolConfiguration setCachePartitionedURLSchemes:]):
        (-[_WKProcessPoolConfiguration copyWithZone:]):

2014-05-28  Sam Weinig  <sam@webkit.org>

        [iOS WebKit2] Sometimes Safari gets into a limbo state after web process crash
        <rdar://problem/17029526>
        https://bugs.webkit.org/show_bug.cgi?id=133362

        Reviewed by Dan Bernstein.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        Remove unnecessary initialization of a unique_ptr.

        (WebKit::WebPageProxy::reattachToWebProcess):
        Move calls to update the view state and activity tokens to after we have swapped in the new process.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Clear the activity token on process exit.

2014-05-28  Timothy Horton  <timothy_horton@apple.com>

        Add WKWebView SPI to forcefully kill the associated Web process
        https://bugs.webkit.org/show_bug.cgi?id=133357

        Reviewed by Anders Carlsson.

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

2014-05-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Crash when trying to decode an instance of a class inheriting from WKObject
        https://bugs.webkit.org/show_bug.cgi?id=133355

        Reviewed by Anders Carlsson.

        * Shared/Cocoa/WKObject.mm:
        (-[WKObject classForCoder]): Override this NSObject method to forward to the
        target object.
        (-[WKObject classForKeyedArchiver]): Ditto.

2014-05-28  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Improve behavior of position:fixed inside accelerated overflow-scroll
        https://bugs.webkit.org/show_bug.cgi?id=133352

        Reviewed by Tim Horton.

        Pass the correct delta down to descendant nodes.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll):

2014-05-28  Andy Estes  <aestes@apple.com>

        [iOS] REGRESSION (r168388): DidNotHandleTapAsClick not sent when commitPotentialTap() fails
        https://bugs.webkit.org/show_bug.cgi?id=133349

        Reviewed by Benjamin Poulain.

        WebPage::commitPotentialTap() fails when a recognized single tap cannot be sent as a synthetic click event.
        We should send WebPageProxy::DidNotHandleTapAsClick in these cases.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::commitPotentialTapFailed):

2014-05-28  Commit Queue  <commit-queue@webkit.org>

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

        It makes a lot of tests crash in assert (Requested by KaL on
        #webkit).

        Reverted changeset:

        "[GTK] Use GMainLoopSource for idle and timeout sources in
        WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=130081
        http://trac.webkit.org/changeset/169423

2014-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use GMainLoopSource for idle and timeout sources in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130081

        Reviewed by Martin Robinson.

        * Platform/WorkQueue.h:
        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::registerSocketEventHandler): Stop pretending it's
        possible to register a socket event handler for more than one
        descriptor.
        (WorkQueue::unregisterSocketEventHandler):
        (WorkQueue::dispatch):
        (WorkQueue::dispatchAfter):
        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::~DownloadClient):
        (WebKit::DownloadClient::didReceiveData):
        (WebKit::DownloadClient::handleResponse):
        (WebKit::DownloadClient::handleResponseLater):
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::PluginInfoCache):
        (WebKit::PluginInfoCache::~PluginInfoCache):
        (WebKit::PluginInfoCache::saveToFile):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/Plugins/gtk/PluginInfoCache.h:
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::LayerTreeHostGtk):
        (WebKit::LayerTreeHostGtk::layerFlushTimerFired):
        (WebKit::LayerTreeHostGtk::scheduleLayerFlush):
        (WebKit::LayerTreeHostGtk::cancelPendingLayerFlush):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2014-05-28  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Can't use bundle-defined classes for bundle parameters
        https://bugs.webkit.org/show_bug.cgi?id=133339

        Reviewed by Anders Carlsson.

        Ensure that bundle parameters are decoded only after the injected bundle is loaded.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::create): Moved the definition from the header to here, added the
        lagacy initializationUserData as a parameter, and made this function set the sandbox
        extension and load the bundle.
        (WebKit::InjectedBundle::InjectedBundle): Removed call to platformInitialize.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit::InjectedBundle::setSandboxExtension): Deleted.
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::initialize): Renamed the load function to this, and added the
        creation parameters as a parameter. Moved code to initialize the bundle paramters from
        platformInitialize to here. Changed the class passed to -decodeObjectOfClass:forKey: to
        NSObject, to allow arbitrary types in the values, and added an assertion that the
        top-level object is a dictionary.
        (WebKit::InjectedBundle::platformInitialize): Deleted.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess): Changed to pass the legacy initialization user
        data to InjectedBundle::create() and removed code to separately set the sandbox extension
        and load the bundle, which is now done by create().

2014-05-28  Alberto Garcia  <berto@igalia.com>

        Unreviewed. Fix warning: unused parameter 'frame'

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

2014-05-27  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fix behavior of position:sticky inside accelerated overflow-scroll
        https://bugs.webkit.org/show_bug.cgi?id=133334
        <rdar://problem/16462535>

        Reviewed by Tim Horton.

        When the scroll position changes in an accelerated overflow-scroll element, we have
        to update child nodes in the scrolling tree for position:sticky. That requires a
        more generic ability to update the scrolling tree after some arbitrary zoom or
        scroll. To do this, we need to know the current fixed position rect, rather than
        having it passed in.
        
        So make the fixed position rect available from ScrollingTree, and make it possible
        to get the current scrollPosition() from any ScrollingTreeScrollingNode.
        
        Also, implement updateLayersAfterDelegatedScroll() in ScrollingTreeOverflowScrollingNodeIOS,
        and have it update descendant layers.
        
        Finally, fix ScrollingTreeOverflowScrollingNode to use the correct rectangle for its
        constraints math, using the scroll position of the parent node if appropriate.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::fixedPositionRect):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterDelegatedScroll):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::customFixedPositionRect):

2014-05-27  Simon Fraser  <simon.fraser@apple.com>

        Do some renaming in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=133333

        Reviewed by Tim Horton.
        
        Rename ScrollingTreeNode::parentScrollPositionDidChange() to updateLayersAfterAncestorChange()
        since this goes deep and to indicate that it's about layer updating.
        
        Also rename the "viewportRect" parameter to "fixedPositionRect", since on iOS
        this is the custom fixed-position rect that changes on zooming.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterViewportChange):

2014-05-27  Geoffrey Garen  <ggaren@apple.com>

        Some proof-reading of the WebKit2 API headerdoc
        https://bugs.webkit.org/show_bug.cgi?id=133328

        Reviewed by Anders Carlsson.

        Consistently say "item" to reference back-forward list items.

        Consistently say "webpage" instead of "page" or "web page".

        Consistently say "navigation" instead of "load".

        Plus a few fix-ups for run-on sentences, mismatched verb tense, and
        mismatched singular vs plural.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebView.h:

2014-05-27  Timothy Horton  <timothy_horton@apple.com>

        [wk2] PDFPlugin snapshots are misplaced
        https://bugs.webkit.org/show_bug.cgi?id=133323

        Reviewed by Simon Fraser.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (WebKit::PDFPlugin::paintControlForLayerInContext):
        (WebKit::PDFPlugin::snapshot):
        Include the scroll offset in the snapshot translation,
        and use the whole document size instead of just the view size.

2014-05-27  Sam Weinig  <sam@webkit.org>

        [WebKit2] Move WebPreferences macro definitions and key names into their own files
        https://bugs.webkit.org/show_bug.cgi?id=133315

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * Shared/WebPreferencesDefinitions.h: Copied from Source/WebKit2/Shared/WebPreferencesStore.h.
        * Shared/WebPreferencesKeys.cpp: Copied from Source/WebKit2/Shared/WebPreferencesStore.cpp.
        * Shared/WebPreferencesKeys.h: Copied from Source/WebKit2/Shared/WebPreferencesStore.h.
        * Shared/WebPreferencesStore.cpp:
        * Shared/WebPreferencesStore.h:
        * UIProcess/WebPreferences.cpp:
        * UIProcess/WebPreferences.h:
        * UIProcess/mac/WebContextMac.mm:
        * UIProcess/mac/WebPreferencesMac.mm:
        * UIProcess/mac/WebProcessProxyMac.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebProcess.cpp:

2014-05-27  Gavin Barraclough  <baraclough@apple.com>

        Add UI process watchdog on iOS to ensure WebProcess connections close
        https://bugs.webkit.org/show_bug.cgi?id=133200
        <rdar://problem/16997983>

        Mountain Lion build fix

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):

2014-05-27  Gavin Barraclough  <baraclough@apple.com>

        importance_assertion -> denap_assertion
        https://bugs.webkit.org/show_bug.cgi?id=133294

        iOS build fix

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

2014-05-27  Gavin Barraclough  <baraclough@apple.com>

        Add UI process watchdog on iOS to ensure WebProcess connections close
        https://bugs.webkit.org/show_bug.cgi?id=133200
        <rdar://problem/16997983>

        Reviewed by Darin Adler.

        When the WebProcessProxy wants to disconnect from a WebContent process it just drops the connection,
        and hopes the connection closes. There is a watchdog thread in the ChildProcess to try to ensure this
        happens.

        On iOS the process may not be runnable at the time, preventing termination. Instead add a watchdog in
        the UI process to make the process runnable, and to terminate if it doesn't quit in a timely fashion.

        * Platform/IPC/Connection.h:
            - added terminateSoon.
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
            - take an assertion to make the process runnable, and start a watchdog timer.
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
            - if the process hasn't quit by the timer the watchdog fires, kill it.
        (IPC::Connection::terminateSoon):
            - create a ConnectionTerminationWatchdog.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):
            - when disconnecting from a process, first tell it to terminateSoon.

2014-05-26  Gavin Barraclough  <barraclough@apple.com>

        importance_assertion -> denap_assertion
        https://bugs.webkit.org/show_bug.cgi?id=133294

        Reviewed by Sam Weinig.

        Update in accordance with API change. The importance assertion is used on
        Mavericks & newer to ensure the WebContent process wakes from AppNap.

        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::open):
            - MACH_PORT_IMPORTANCE_RECEIVER -> MACH_PORT_DENAP_RECEIVER
        * Platform/IPC/mac/ImportanceAssertion.h:
        (IPC::ImportanceAssertion::ImportanceAssertion):
        (IPC::ImportanceAssertion::~ImportanceAssertion):
            - proc_importance_assertion -> proc_denap_assertion

2014-05-27  Jessie Berlin  <jberlin@apple.com>

        Revert r169362 since it broke the ML build.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::createConnectionTerminationWatchdog): Deleted.
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog): Deleted.
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired): Deleted.
        (IPC::Connection::terminateSoon): Deleted.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):

2014-05-27  Jon Lee  <jonlee@apple.com>

        Update ENABLE(MEDIA_SOURCE) on Mac
        https://bugs.webkit.org/show_bug.cgi?id=133141

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2014-05-27  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove BLOB guards
        https://bugs.webkit.org/show_bug.cgi?id=132863

        Reviewed by Csaba Osztrogonác.

        * Configurations/FeatureDefines.xcconfig:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::didClose):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::canHandleRequest):

2014-05-26  Tim Horton  <timothy_horton@apple.com>

        [wk2] RemoteLayerBackingStore front buffers should be purgeable when unparented
        https://bugs.webkit.org/show_bug.cgi?id=133020
        <rdar://problem/16521736>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        Let the context know whenever a RemoteLayerBackingStore is displayed, so that
        RemoteLayerBackingStoreCollection can (if needed) note that the backing store
        is active once again (because we only display parented backing store).

        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        Ensure that we never have live contexts attached to any buffers when
        marking them volatile, because checking isInUse() with live contexts is futile.

        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::RemoteLayerBackingStoreCollection):
        (WebKit::RemoteLayerBackingStoreCollection::willFlushLayers):
        (WebKit::RemoteLayerBackingStoreCollection::willCommitLayerTree):
        (WebKit::RemoteLayerBackingStoreCollection::didFlushLayers):
        (WebKit::RemoteLayerBackingStoreCollection::backingStoreWillBeDestroyed):
        (WebKit::RemoteLayerBackingStoreCollection::backingStoreWillBeDisplayed):
        (WebKit::RemoteLayerBackingStoreCollection::markBackingStoreVolatileImmediately):
        (WebKit::RemoteLayerBackingStoreCollection::markBackingStoreVolatile):
        (WebKit::RemoteLayerBackingStoreCollection::backingStoreBecameUnreachable):
        (WebKit::RemoteLayerBackingStoreCollection::volatilityTimerFired):
        (WebKit::RemoteLayerBackingStoreCollection::scheduleVolatilityTimer):
        (WebKit::RemoteLayerBackingStoreCollection::purgeabilityTimerFired): Deleted.
        (WebKit::RemoteLayerBackingStoreCollection::schedulePurgeabilityTimer): Deleted.
        Rename purgeable->volatile for accuracy.
        Keep track of two sets of backing store: those which are active/parented, and
        those which are not. Backing store is moved to the inactive set after building
        the transaction in which its owning layer is unparented.
        When backing store is unparented, try to mark it volatile immediately. Also,
        mark the backing store property as dirty on the owning layer so that when
        said layer is reparented, we encode the backing store in the commit that reparents it,
        as the UI process will throw away its reference to the backing store when
        the layer is unparented. Mark the front buffers of unparented layers as volatile,
        in addition to the others.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::layerIDsWithNewlyUnreachableBackingStore):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::setLayerIDsWithNewlyUnreachableBackingStore):
        Include the list of layers (by ID) with backing store which just became unreachable in the transaction.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        Clear the contents of layers which now have unreachable backing store.
        Otherwise, the UI process would hold a 'use' on the IOSurface, and prevent
        the Web process from marking it volatile.

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::backingStoreWillBeDisplayed):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Give RemoteLayerBackingStoreCollection a shot at the RemoteLayerTreeTransaction,
        so that it can fill in layerIDsWithNewlyUnreachableBackingStore.
        Also, let it know when the flush begins and ends, so that it can keep track
        of which layers were reached in the flush.

2014-05-26  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Fix EWK2BackForwardListTest test fails.
        https://bugs.webkit.org/show_bug.cgi?id=133171

        Reviewed by Gyuyoung Kim.

        Use local test html pages instead of EWK2UnitTestServer, call ewk_view_url_set() to load test html pages.
        Since even after setting no_proxy="localhost,127.0.0.1", still test server was unable to load the test 
        html pages for ewk2_back_forward_list tests, so changed to use local html pages.

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

2014-05-26  Shivakumar JM  <shiva.jm@samsung.com>

        [EFL][WK2] Fix code style check errors in EFL API tests.
        https://bugs.webkit.org/show_bug.cgi?id=133170

        Reviewed by Gyuyoung Kim.

        Omit int when using unsigned modifier, as per coding style rules.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestEnvironment.h:
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultWidth):
        (EWK2UnitTest::EWK2UnitTestEnvironment::defaultHeight):

2014-05-22  Gavin Barraclough  <baraclough@apple.com>

        Add UI process watchdog on iOS to ensure WebProcess connections close
        https://bugs.webkit.org/show_bug.cgi?id=133200
        <rdar://problem/16997983>

        Reviewed by Darin Adler.

        When the WebProcessProxy wants to disconnect from a WebContent process it just drops the connection,
        and hopes the connection closes. There is a watchdog thread in the ChildProcess to try to ensure this
        happens.

        On iOS the process may not be runnable at the time, preventing termination. Instead add a watchdog in
        the UI process to make the process runnable, and to terminate if it doesn't quit in a timely fashion.

        * Platform/IPC/Connection.h:
            - added terminateSoon.
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::ConnectionTerminationWatchdog::ConnectionTerminationWatchdog):
            - take an assertion to make the process runnable, and start a watchdog timer.
        (IPC::ConnectionTerminationWatchdog::watchdogTimerFired):
            - if the process hasn't quit by the timer the watchdog fires, kill it.
        (IPC::Connection::terminateSoon):
            - create a ConnectionTerminationWatchdog.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::removeWebPage):
            - when disconnecting from a process, first tell it to terminateSoon.

2014-05-26  Sam Weinig  <sam@webkit.org>

        [WebKit2] Add better default preferences while keeping backward compatibility for the C-SPI
        https://bugs.webkit.org/show_bug.cgi?id=133289

        Reviewed by Anders Carlsson.

        * Shared/WebPreferencesStore.h:
        Change a few defaults:
        - PluginsEnabled -> false
        - JavaEnabled -> false
        - JavaEnabledForLocalFiles -> false
        - StorageBlockingPolicy -> BlockThirdPartyStorage

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreate):
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        Switch to using WebPreferences::createWithLegacyDefaults().

        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::create):
        (WebKit::WebPreferences::createWithLegacyDefaults):
        * UIProcess/WebPreferences.h:
        Move create functions to the cpp file and add createWithLegacyDefaults() which keeps
        the old defaults;

        * UIProcess/API/C/WKPreferencesRef.h:
        Fix the comment.

        * UIProcess/API/Cocoa/WKPreferences.h:
        Update the comment to reflect the new defaults.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Unconditionally set setShouldDispatchJavaScriptWindowOnErrorEvents() to true. This setting only
        exists for legacy WebKit.

2014-05-26  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Rewrite WK_DESIGNATED_INITIALIZER in installed headers
        https://bugs.webkit.org/show_bug.cgi?id=133290

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKFoundation.h: When WK_API_AVAILABILITY_ENABLED is defined, don’t
        provide definitions of WK_DESIGNATED_INITIALIZER and WK_UNAVAILABLE, since those macros will
        be rewritten out of the headers. When WK_API_AVAILABILITY_ENABLED isn’t defined, provide
        definitions of the other two macros as appropriate for the target OS.
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Removed WK_DESIGNATED_INITIALIZER from a
        category method declaration.
        * UIProcess/API/Cocoa/WKWebView.h: Mark the superclass designated initializer
        -initWithCoder: as unavailable.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithCoder:]): Override this designated initializer of the superclass by
        returning nil.
        * mac/rewrite-availability-macros.sh: Rewrite WK_DESIGNATED_INITIALIZER to
        NS_DESIGNATED_INITIALIZER and WK_UNAVAILABLE to NS_UNAVAILABLE. Also make sure to process
        all headers if the script has changed since the last time it was run.

2014-05-26  Commit Queue  <commit-queue@webkit.org>

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

        Broke CJK font fallback (Requested by ap on #webkit).

        Reverted changeset:

        "[Mac] WebProcess doesn't follow localization of UI process
        when run as a service"
        https://bugs.webkit.org/show_bug.cgi?id=133126
        http://trac.webkit.org/changeset/169122

2014-05-26  Anders Carlsson  <andersca@apple.com>

        Convert a couple of loops over to range-based for
        https://bugs.webkit.org/show_bug.cgi?id=133287

        Reviewed by Simon Fraser.

        * UIProcess/Plugins/PluginInfoStore.cpp:
        (WebKit::PluginInfoStore::findPluginForMIMEType):
        (WebKit::PluginInfoStore::findPluginForExtension):
        (WebKit::PluginInfoStore::infoForPluginWithPath):
        * UIProcess/Plugins/mac/PluginProcessManagerMac.mm:
        (WebKit::PluginProcessManager::setProcessSuppressionEnabled):

2014-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebProcess leaked when closing pages with network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=129684

        Reviewed by Anders Carlsson.

        The problem is that the web process is not notified when the UI
        process closes the connection, because when close() is called on
        the socket by the UI process, the socket is shared by another web
        process launched later, preventing the connection from being
        shut down. We need to set the CLOEXEC flag on the sockets file
        descriptor to make sure they are not exposed to other processes.

        * Platform/IPC/Connection.h: Add ConnectionOptions parameter to
        createPlatformConnection() with a default value compatible with
        existing callers.
        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::createPlatformConnection): Set the CLOEXEC flag
        on the client and server socket file descriptors depending on the
        options passed.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use
        IPC::Connection::createPlatformConnection() instead of
        socketpair() directly, setting the CLOEXEC flag on the server
        before spawning the new process and on the client right after
        spawning the new process.

2014-05-25  Anders Carlsson  <andersca@apple.com>

        Initialize WKWebViewConfiguration ivars lazily
        https://bugs.webkit.org/show_bug.cgi?id=133270
        <rdar://problem/17027606>

        Reviewed by Sam Weinig.

        Create a LazyInitialized class template and use it to lazily initialize WKWebViewConfiguration properties.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (LazyInitialized::get):
        Initialize m_value with the given function if it hasn't been initialized already.

        (LazyInitialized::set):
        Update m_value and set m_isInitialized to true.

        (LazyInitialized::peek):
        Return m_value without initializing it.

        (-[WKWebViewConfiguration description]):
        Use getters so we'll initialize variables if needed.

        (-[WKWebViewConfiguration copyWithZone:]):
        Ditto.

        (-[WKWebViewConfiguration processPool]):
        (-[WKWebViewConfiguration setProcessPool:]):
        (-[WKWebViewConfiguration preferences]):
        (-[WKWebViewConfiguration setPreferences:]):
        (-[WKWebViewConfiguration userContentController]):
        (-[WKWebViewConfiguration setUserContentController:]):
        (-[WKWebViewConfiguration _visitedLinkProvider]):
        (-[WKWebViewConfiguration _setVisitedLinkProvider:]):
        (-[WKWebViewConfiguration _websiteDataStore]):
        (-[WKWebViewConfiguration _setWebsiteDataStore:]):
        (-[WKWebViewConfiguration _contentProviderRegistry]):
        (-[WKWebViewConfiguration _setContentProviderRegistry:]):
        Pass initialization code to all getters.

        (-[WKWebViewConfiguration _validate]):
        Use getters.

        (-[WKWebViewConfiguration init]): Deleted.

2014-05-26  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        Remove WebKit2 framework from generate-forwarding-headers.pl
        https://bugs.webkit.org/show_bug.cgi?id=133214

        Since renaming WebKit2.framework to WebKit.framework is done and all WebKit2/*.h includes
        were renamed to WebKit/*.h, generating forwarding headers for WebKit2/*.h framework style
        headers is not necessary anymore.

        Reviewed by Darin Adler.

        * Scripts/generate-forwarding-headers.pl:

2014-05-26  Zan Dobersek  <zdobersek@igalia.com>

        WebPage::setComposition(), WebPageProxy::didFindStringMatches() should take Vector parameters by const reference
        https://bugs.webkit.org/show_bug.cgi?id=133264

        Reviewed by Darin Adler.

        Taking the Vector parameters in the two methods (invoked through the IPC message handling)
        by value causes unnecessary copies. The methods don't modify the objects and don't want
        or need fresh copies, hence they should take in const references to Vector objects.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindStringMatches):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setComposition):
        * WebProcess/WebPage/WebPage.h:

2014-05-25  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Fix some state reset on crash on the WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=133039

        Reviewed by Sam Weinig.

        This is in no way complete, but this should reduce the undefined states on crash.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _processDidExit]):
        If the view is animating, nuke the resize animation. That should be invisible to the user
        because the background color is reset to white below.

        Reset the contentView frame and scrollview state.

        Reset the runtime states. We do not strictly need to reset _needsResetViewStateAfterCommitLoadForMainFrame,
        _delayUpdateVisibleContentRects and _hadDelayedUpdateVisibleContentRects but it seems better to have
        a clean slate.

        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):
        We could have crashes during rotation. To simplify the reset code, the animated resize code
        no longer change any state when WKWebView is using a custom content view.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::processDidExit):
        Send a _processDidExit on the WKWebView too.

2014-05-25  Anders Carlsson  <andersca@apple.com>

        Use the right paths for website data
        https://bugs.webkit.org/show_bug.cgi?id=133267
        <rdar://problem/17027698>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        Get the path of the absolute URL.

        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
        (WebKit::LocalStorageDatabaseTracker::databasePath):
        Fix spelling error.

        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didCacheResource):
        Ditto.

2014-05-25  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Use ScrollView's scrollOffset as the unobscuredContentRect
        https://bugs.webkit.org/show_bug.cgi?id=133262

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::WebPage::updateVisibleContentRects):

2014-05-25  Sam Weinig  <sam@webkit.org>

        Build fix 2.

        * UIProcess/API/Cocoa/WKPreferences.h:

2014-05-25  Sam Weinig  <sam@webkit.org>

        Fix build.

        * UIProcess/API/Cocoa/WKPreferences.h:

2014-05-24  Sam Weinig  <sam@webkit.org>

        [WebKit2] Rework WebPreferencesStore to allow easier overriding of defaults
        https://bugs.webkit.org/show_bug.cgi?id=133258

        Reviewed by Anders Carlsson.

        To support changing default values of preferences based on which API you are using (either
        the legacy C-SPI or the Objective-C API), overhaul the WebPreferencesStore to use a single
        HashMap of String -> Value (where Value is new type that can be a String, bool, uint32_t or double)
        instead of four HashMaps.  This allows us to use two of these new HashMaps, one for the actual
        set values, and one for overridden defaults. This new Value class will also allow easier incremental
        updating of preferences in the future.
        
        Other notable changes:
        - Removed Float kind of preferences. There were none.
        - Move StorageBlockingPolicy preference to the correct group, it's a uint32_t, not bool.

        * Shared/WebPreferencesStore.cpp:
        * Shared/WebPreferencesStore.h:

2014-05-25  David Kilzer  <ddkilzer@apple.com>

        Add type-checked casts for TransformOperations
        <http://webkit.org/b/133217>

        Reviewed by Simon Fraser.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<TransformOperations>::encode):
        - Switch to type-checked casts.

2014-05-25  David Kilzer  <ddkilzer@apple.com>

        Use type-checking FilterOperation casts in CoordinatedGraphicsArgumentCoders.cpp
        <http://webkit.org/b/133203>

        Reviewed by Simon Fraser.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<WebCore::FilterOperations>::encode):
        - Replace static_cast<>() operators with type-checking
          FilterOperation casts.
        - Replace 'default' statement with 'case' statements so new
          filters added later require an explicit decision to be made.
        (IPC::ArgumentCoder<WebCore::FilterOperations>::decode):
        - Replace 'default' statement with 'case' statements so new
          filters added later require an explicit decision to be made.

2014-05-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Potential null dereference in
        WebFrameLoaderClient::dispatchDidFailProvisionalLoad()
        <https://bugs.webkit.org/show_bug.cgi?id=133193>

        WebFrameLoaderClient::dispatchDidFailProvisionalLoad() calls the
        InjectedBundleLoaderClient's didFailProvisionalLoadWithErrorForFrame()
        before sending a message to the UI process that a provisional load has
        failed. It's possible for the provisional document loader to become
        null while calling into the InjectedBundleLoaderClient (as is the case
        with the WebKitTestRunner's injected bundle), leading to a null
        dereference when trying to send the DidFailProvisionalLoadForFrame
        message.

        Reviewed by Darin Adler.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad):
        Get the navigation ID before calling into the injected bundle.

2014-05-23  Simon Fraser  <simon.fraser@apple.com>

        Rename ScrollingTreeScrollingNode's m_scrollPosition to make it clear that it's the value committed from the state tree
        https://bugs.webkit.org/show_bug.cgi?id=133254

        Reviewed by Tim Horton.
        
        Override scrollPosition() on ScrollingTreeOverflowScrollingNodeIOS.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollPosition):

2014-05-24  Chris Fleizach  <cfleizach@apple.com>

        AX: fix coordinate mapping for iOS accessibility
        https://bugs.webkit.org/show_bug.cgi?id=133188

        Reviewed by Sam Weinig.

        Add in accessibility conversion methods that will check if the methods are present 
        (if accessibility is not on, they won't be)
        and use those to convert points into the right coordinate space that VoiceOver is expecting.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::accessibilityScreenToRootView):
        (WebKit::WebPageProxy::rootViewToAccessibilityScreen):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::accessibilityScreenToRootView):
        (WebKit::PageClientImpl::rootViewToAccessibilityScreen):
        * UIProcess/mac/PageClientImpl.h:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::accessibilityScreenToRootView):
        (WebKit::WebChromeClient::rootViewToAccessibilityScreen):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::accessibilityScreenToRootView):
        (WebKit::WebPage::rootViewToAccessibilityScreen):
        * WebProcess/WebPage/WebPage.h:

2014-05-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r165841): Messages sent before the child process is launched are never sent after r165841
        https://bugs.webkit.org/show_bug.cgi?id=131675

        Reviewed by Anders Carlsson.

        Since r165841 the connection is opened after the pending messages
        are sent, because connectionWillOpen might send messages that we
        want to happen after the ones already pending. The problem is that
        Connection::canSendOutgoingMessages() returns false when
        connection hasn't been opened. We should ensure no messages are
        sent by connectionWillOpen.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching): Open the
        connection before sending pending messages.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::connectionWillOpen): Do not call
        VisitedLinkProvider::addProcess() here because it tries to send a
        message to the web process, but the connection hasn't be opened yet.
        (WebKit::WebPageProxy::processDidFinishLaunching): Call
        VisitedLinkProvider::addProcess() here instead.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching): Call
        WebPageProxy::processDidFinishLaunching() for every web page.

2014-05-23  Ian Henderson  <ianh@apple.com>

        REGRESSION: Rubberbanding out jumps to top left corner on google.com
        https://bugs.webkit.org/show_bug.cgi?id=133253
        <rdar://problem/17025664>

        Reviewed by Benjamin Poulain.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillEndDragging:withVelocity:targetContentOffset:]):
        Avoid deceleration during zooming to work around a UIKit bug.

2014-05-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Avoid updating the view from the viewport configuration unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=133255
        <rdar://problem/16890926>

        Reviewed by Simon Fraser.

        All the updates were mostly harmless since they are pretty cheap, but they can be
        very annoying for debugging.

        This patch skips viewportUpdates in the trivial cases.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameDidLayout):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportPropertiesDidChange):

2014-05-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] The page scale factor randomly resets to initial scale when editing
        https://bugs.webkit.org/show_bug.cgi?id=133244

        Reviewed by Enrica Casucci.

        We were never telling the WebProcess that zoom is used triggered. As a result, the ViewportConfiguration was free
        to reset the scale whenever it felt like it. The fix is to call willStartUserTriggeredZoom before changing the scale.

        This patch also split _willStartUserTriggeredScrollingOrZooming from willStartUserTriggeredZoom
        and rename it to willStartPanOrPinchGesture. This is just a tiny cleanup since the only thing left in _willStartUserTriggeredScrollingOrZooming
        was gesture related.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:WebCore::selectionRect:WebCore::fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):
        (-[WKWebView scrollViewWillBeginZooming:withView:]):
        (-[WKWebView scrollViewWillBeginDragging:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView scrollViewWillBeginDragging:]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView willStartUserTriggeredZoom]):
        (-[WKContentView willStartUserTriggeredScroll]): Deleted.
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView willStartPanOrPinchGesture]):
        (-[WKContentView _willStartUserTriggeredScrollingOrZooming]): Deleted.

2014-05-23  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (iOS WebKit2): requestAnimationFrame fires more than once between layer tree commits
        https://bugs.webkit.org/show_bug.cgi?id=132794
        <rdar://problem/16877909>

        Reviewed by Simon Fraser.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createDisplayRefreshMonitor):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::graphicsLayerFactory):
        (WebKit::DrawingArea::createDisplayRefreshMonitor):
        Plumb the DisplayRefreshMonitor request through to the DrawingArea.
        RemoteLayerTreeDrawingArea will implement and return a RemoteLayerTreeDisplayRefreshMonitor.

        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.h: Added.
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::create):
        * WebProcess/WebPage/Cocoa/RemoteLayerTreeDisplayRefreshMonitor.mm: Added.
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::RemoteLayerTreeDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::~RemoteLayerTreeDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::requestRefreshCallback):
        When requesting a display refresh callback, schedule a layer commit.
        It may end up being empty, but will still call us back with a didUpdate,
        upon which we'll fire the callback.

        (WebKit::RemoteLayerTreeDisplayRefreshMonitor::didUpdateLayers):

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::createDisplayRefreshMonitor):
        (WebKit::RemoteLayerTreeDrawingArea::willDestroyDisplayRefreshMonitor):
        Keep track of the set of DisplayRefreshMonitors.

        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        Fire requestAnimationFrame callbacks once the UI process commits the new layer tree.

2014-05-23  Jeremy Jones  <jeremyj@apple.com>

        Hide fullscreen immediately when switching tabs.
        https://bugs.webkit.org/show_bug.cgi?id=133239

        Reviewed by Eric Carlson.

        Renamed a function to better describe it's new functionality.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        now calls: requestHideAndExitFullscreen

2014-05-23  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Keyboard disappears/appears automatically between text boxes.
        https://bugs.webkit.org/show_bug.cgi?id=133243
        <rdar://problem/16761913>

        Reviewed by Benjamin Poulain.

        We need to ensure that when an element loses focus and another one gets it,
        this is handled in one single message in the UI process to avoid seeing
        the keyboard animating in and out.
        This is accomplished by always postponing the blur notification until all events
        have been processed.
        If a new node is focused before the delayed blur notification is sent to the UI
        process, the message we send includes both blur and focus notification. In this case,
        the postponed blur notification is not sent.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]):
        (-[WKContentView _startAssistingNode:userIsInteracting:userObject:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::elementDidFocus):
        (WebKit::WebPage::elementDidBlur):

2014-05-23  Anders Carlsson  <andersca@apple.com>

        Remove an assertion.

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

2014-05-23  Tim Horton  <timothy_horton@apple.com>

        [iOS] WKPDFView should have a page indicator
        https://bugs.webkit.org/show_bug.cgi?id=133109
        <rdar://problem/16383003>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:WTF::]):
        (-[WKWebView _setObscuredInsets:]):
        Forward obscured insets changes to the custom content view.

        (-[WKWebView _updateScrollViewBackground]):
        If we have a custom content view, use its background instead of the
        (likely nonexistent) page's when updaing the scroll view's background color.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/Cocoa/WKWebViewContentProviderDelegate.h: Added.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setInsetForOverlaidAccessoryViews:]):
        Add SPI for clients to inform us about potential overlaid accessory views
        which should be taken into account e.g. for positioning the page indicator.

        Add a view that sits fixed on top of the WKWebView, ignores interaction,
        but provides the WKWebViewContentProvider a place to install views
        that don't scroll along with the content.

        * UIProcess/ios/WKPDFPageNumberIndicator.h: Added.
        * UIProcess/ios/WKPDFPageNumberIndicator.mm: Added.
        (-[WKPDFPageNumberIndicator initWithFrame:]):
        (-[WKPDFPageNumberIndicator dealloc]):
        (-[WKPDFPageNumberIndicator setCurrentPageNumber:]):
        (-[WKPDFPageNumberIndicator setPageCount:]):
        (-[WKPDFPageNumberIndicator show]):
        (-[WKPDFPageNumberIndicator hide:]):
        (-[WKPDFPageNumberIndicator moveToPoint:animated:]):
        (-[WKPDFPageNumberIndicator sizeThatFits:]):
        (-[WKPDFPageNumberIndicator _updateLabel]):
        (-[WKPDFPageNumberIndicator _makeRoundedCorners]):
        Add a page number indicator.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView dealloc]):
        (-[WKPDFView web_setScrollView:]):
        (-[WKPDFView _revalidateViews]):
        (-[WKPDFView _offsetForPageNumberIndicator]):
        (-[WKPDFView _updatePageNumberIndicator]):
        (-[WKPDFView web_setObscuredInsets:]):
        (-[WKPDFView web_setInsetForOverlaidAccessoryViews:]):
        (-[WKPDFView web_setFixedOverlayView:]):
        (-[WKPDFView _computePageAndDocumentFrames]):
        Update the page number indicator when the topmost visible page changes.
        Move the page number indicator around when the obscured insets change.

        * WebKit2.xcodeproj/project.pbxproj:

2014-05-23  Anders Carlsson  <andersca@apple.com>

        Fix test failures on the bot.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (websiteDataDirectoryURL):
        If we have no bundle identifier, use the process name.

2014-05-23  Enrica Casucci  <enrica@apple.com>

        REGRESSION (iOS WebKit2): Autocorrection is not accurate when changing selection.
        https://bugs.webkit.org/show_bug.cgi?id=133237
        <rdar://problem/16655776>

        Reviewed by Ryosuke Niwa.

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

        When the selection is changed with a gesture in an editable element,
        we must notify the keyboard to make sure the autocorrection engine 
        updates its typing context. WKContentView must implement
        beginSelectionChange and endSelectionChange to call into
        the keyboard layer.

2014-05-22  Brent Fulgham  <bfulgham@apple.com>

        [iOS] WK2: Provide implementation for windowFrame
        https://bugs.webkit.org/show_bug.cgi?id=133205
        <rdar://problem/16894890>

        Reviewed by Benjamin Poulain.

        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::windowFrame): Added.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::convertToUserSpace): Added.

2014-05-20  Anders Carlsson  <andersca@apple.com>

        Use a per app directory structure for website data
        https://bugs.webkit.org/show_bug.cgi?id=133125
        <rdar://problem/16830143>

        Reviewed by Dan Bernstein, Sam Weinig and Tim Horton.

        Put website data in subdirectories of ~/Library/WebKit/<bundle ID>/WebsiteData.
        We use "LocalStorage", "WebSQL", and "IndexedDB" subdirectories.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (websiteDataDirectoryURL):
        (-[WKProcessPool _initWithConfiguration:]):

2014-05-23  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKNavigationResponsePrivate.h is internal
        https://bugs.webkit.org/show_bug.cgi?id=133218

        Reviewed by Dean Jackson.

        * WebKit2.xcodeproj/project.pbxproj: Promote WKNavigationResponsePrivate.h to private.

2014-05-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [UNIX] Reorganize and cleanup main functions of GTK and EFL ports
        https://bugs.webkit.org/show_bug.cgi?id=131024

        Reviewed by Gustavo Noronha Silva.

        Move main function implementation files to <process-dir>/EntryPoint/unix/<ProcessName>Main.cpp
        files that are now shared by GTK and EFL ports. These files call a
        main method that wraps a new method ChildProcessMain that contains
        the common code and uses a helper class for the platform specific
        code. GTK+ and EFL ports implement that helper class for every process type.

        * NetworkProcess/EntryPoint/unix/NetworkProcessMain.cpp: Renamed from Source/WebKit2/efl/MainEfl.cpp.
        (main):
        * NetworkProcess/efl/NetworkProcessMainEfl.cpp: Renamed from Source/WebKit2/unix/NetworkMainUnix.cpp.
        (WebKit::NetworkProcessMainUnix):
        * NetworkProcess/gtk/NetworkProcessMainGtk.cpp: Renamed from Source/WebKit2/NetworkProcess/unix/NetworkProcessMainUnix.cpp.
        (WebKit::NetworkProcessMainUnix):
        * NetworkProcess/unix/NetworkProcessMainUnix.h:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PluginProcess/EntryPoint/unix/PluginProcessMain.cpp: Renamed from Source/WebKit2/unix/PluginMainUnix.cpp.
        (main):
        * PluginProcess/unix/PluginProcessMainUnix.cpp:
        (WebKit::webkitXError):
        (WebKit::PluginProcessMainUnix):
        * PluginProcess/unix/PluginProcessMainUnix.h:
        * Shared/unix/ChildProcessMain.cpp: Copied from Source/WebKit2/WebProcess/efl/WebProcessMainEfl.h.
        (WebKit::ChildProcessMainBase::parseCommandLine):
        * Shared/unix/ChildProcessMain.h: Renamed from Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.h.
        (WebKit::ChildProcessMainBase::platformInitialize):
        (WebKit::ChildProcessMainBase::platformFinalize):
        (WebKit::ChildProcessMainBase::initializationParameters):
        (WebKit::ChildProcessMain):
        * WebProcess/EntryPoint/unix/WebProcessMain.cpp: Renamed from Source/WebKit2/gtk/MainGtk.cpp.
        (main):
        * WebProcess/efl/WebProcessMainEfl.cpp:
        (WebKit::WebProcessMainUnix):
        (dummyExtensionErrorHandler): Deleted.
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        (WebKit::WebProcessMainUnix):
        * WebProcess/unix/WebProcessMainUnix.h: Renamed from Source/WebKit2/WebProcess/efl/WebProcessMainEfl.h.

2014-05-22  Zan Dobersek  <zdobersek@igalia.com>

        Have the decoded element in VectorArgumentCoder::decode() moved into Vector::append()
        https://bugs.webkit.org/show_bug.cgi?id=133082

        Reviewed by Andreas Kling.

        * Platform/IPC/ArgumentCoders.h: Move the decoded element into the Vector::append() call.
        This enforces a move instead of a copy if the decoded element's type is move-constructible.

2014-05-22  Zan Dobersek  <zdobersek@igalia.com>

        Move the passed-in Vector<Attachment> in MessageDecoder constructor down into ArgumentDecoder
        https://bugs.webkit.org/show_bug.cgi?id=133080

        Reviewed by Andreas Kling.

        * Platform/IPC/MessageDecoder.cpp:
        (IPC::MessageDecoder::MessageDecoder): The Vector<Attachment> object was passed in by value.
        Move it into the ArgumentDecoder constructor as it is not used elsewhere in this constructor
        and produces a copy otherwise.

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add support for minimal-ui viewports
        https://bugs.webkit.org/show_bug.cgi?id=133162

        Reviewed by Simon Fraser.

        In the WebKit2 layers, we have two parts to minimal-ui.
        -In WebPage, we need to get the values from the UIProcess and setup the ViewportConfiguration.
         Another part is freezing the state on page load.
        -In the UIProcess, we need to get the right information for layout and styling, and we need to tell
         the UI clients about minimal-ui changes.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setUsesMinimalUI:]):
        (-[WKWebView _usesMinimalUI]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _minimumLayoutSizeOverride]):
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _minimumLayoutSizeOverrideForMinimalUI]):
        (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]):
        (-[WKWebView _largestUnobscuredSizeOverride]):
        (-[WKWebView _setMaximumUnobscuredSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (setViewportConfigurationMinimumLayoutSize): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setUsesMinimalUI):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSizeForMinimalUI):
        (WebKit::WebPageProxy::setMaximumUnobscuredSize):
        (WebKit::WebPageProxy::setUsesMinimalUI):
        (WebKit::WebPageProxy::setMinimumLayoutSizeForMinimalUI): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSizeForMinimalUI):
        (WebKit::WebPage::setMaximumUnobscuredSize):
        (WebKit::WebPage::willFlushLayers):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::WebPage::updateViewportSizeForCSSViewportUnits):
        (WebKit::WebPage::setMinimumLayoutSizeForMinimalUI): Deleted.
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Reset the special action-target of WKSyntheticClickTapGestureRecognizer on destruction
        https://bugs.webkit.org/show_bug.cgi?id=133165
        <rdar://problem/16283914>

        Reviewed by Andy Estes.

        It is unclear why, but the WKSyntheticClickTapGestureRecognizer sometimes survives its own view
        and is reset after WKContentView was destructed.
        This patch cleans up the target-action on destruction to avoid accessing a destructed object.

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

2014-05-22  Benjamin Poulain  <bpoulain@apple.com>

        Do not force a layout when changing the FixedLayoutSize in WebPage
        https://bugs.webkit.org/show_bug.cgi?id=133167

        Reviewed by Andreas Kling.

        WebPage::setFixedLayoutSize was forcing a layout immediately after changing the layout size on FrameView.
        This is forcing plenty of extra layouts since the fixed layout size is one of many properties updated on the FrameView.

        FrameView marks that layout is needed. It is not clear why a layout was performed immediately.

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

2014-05-22  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Web process should try to shrink its memory footprint when going into background.
        <https://webkit.org/b/133197>
        <rdar://problem/17011561>

        Try to free up as much memory as possible before going into background.

        Reviewed by Gavin Barraclough.

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

2014-05-22  Andreas Kling  <akling@apple.com>

        Hook up a setting for showing detailed logging during memory pressure relief.
        <https://webkit.org/b/133194>

        Plumb through the same setting that we used for detailed logging in WK1.

        Reviewed by Gavin Barraclough.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-05-22  Andy Estes  <aestes@apple.com>

        [iOS] Send shareable resources to QuickLook if enabled
        https://bugs.webkit.org/show_bug.cgi?id=133189
        <rdar://problem/17003995>

        Reviewed by Brady Eidson.

        Like we do for didReceiveData(), we need to pass an incoming ShareableResource to QuickLook if a QuickLook
        handle exists.

        * Shared/ShareableResource.cpp:
        (WebKit::ShareableResource::Handle::tryWrapInCFData): Return the shared resource in a CFDataRef.
        (WebKit::ShareableResource::Handle::tryWrapInSharedBuffer): Implemented in terms of tryWrapInCFData().
        * Shared/ShareableResource.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResource): If a QuickLook handle exists, send the shareable resource to
        it via a CFDataRef.

2014-05-22  Martin Hock  <mhock@apple.com>

        [iOS] Enable -apple-system- styled elements to respond to system font size changes.
        https://bugs.webkit.org/show_bug.cgi?id=133186
        <rdar://problem/16583782>

        Reviewed by Enrica Casucci.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _contentSizeCategoryDidChange:]):
        (-[WKWebView _contentSizeCategory]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::contentSizeCategoryDidChange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::contentSizeCategoryDidChange):

2014-05-22  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Add CFBundleAllowMixedLocalizations to WebContentService
        https://bugs.webkit.org/show_bug.cgi?id=133187
        <rdar://problem/16561084>

        Reviewed by Tim Horton.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist:
        We already had it in WebContentService.Development, just not here.

2014-05-22  Alexey Proskuryakov  <ap@apple.com>

        [iOS][WK2] Application cache is broken
        https://bugs.webkit.org/show_bug.cgi?id=133172
        <rdar://problem/16994593>

        Reviewed by Andy Estes.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultApplicationCacheDirectory): Use a proper
        path for application cache database (same as WebKit1).

2014-05-22  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Keyboard should have Search button in duckduckgo.com.
        https://bugs.webkit.org/show_bug.cgi?id=133183
        <rdar://problem/17004207>

        Reviewed by Geoff Garen.

        The keyboard type should be search if the input type is search
        or if it is text and it is inside a form with an action and either
        name, id or title contain the word search. This matches the
        heuristics we have in WK1 for iOS.

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

2014-05-21  Oliver Hunt  <oliver@apple.com>

        Only enable sandbox extensions on mac.

        RS = Alexey.

        * WebKit2Prefix.h:

2014-05-21  Oliver Hunt  <oliver@apple.com>

        [iOS] Enable sandboxing for the database process
        https://bugs.webkit.org/show_bug.cgi?id=132963

        Reviewed by Alexey Proskuryakov.

        Simply ensure that the database process is running in a tight
        sandbox. As part of this i've separated out ChildProcessIOS
        and ensures that the database process loads a custom sandbox.

        * Configurations/WebKit.xcconfig:
        * DatabaseProcess/ios/DatabaseProcessIOS.mm:
        (WebKit::DatabaseProcess::initializeSandbox):
        * DatabaseProcess/ios/com.apple.WebKit.DatabasesIOS.sb: Added.
        * Shared/ios/ChildProcessIOS.mm: Added.
        Essentially cloned from the Mac version, only all the OSX
        specific logic has been stripped.
        (WebKit::ChildProcess::setApplicationIsDaemon):
        (WebKit::ChildProcess::platformInitialize):
        (WebKit::ChildProcess::initializeSandbox):
        (WebKit::ChildProcess::setQOS):
        * Shared/mac/ChildProcessMac.mm:
        Remove all the IOS ifdefs.
        (WebKit::ChildProcess::setApplicationIsDaemon):
        (WebKit::ChildProcess::platformInitialize):
        (WebKit::ChildProcess::initializeSandbox):
        (WebKit::ChildProcess::setQOS):
        * WebKit2.xcodeproj/project.pbxproj:

2014-05-21  Andy Estes  <aestes@apple.com>

        [iOS] Create a UIPrintFormatter for WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=133005

        Reviewed by Tim Horton.

        Implemented a UIPrintFormatter subclass to support printing WKWebViews using UIPrintInteractionController.
        Overrode -_recalcPageCount: to synchronously ask the web process to lay out for printing and return the number
        of page rects. The web process returns the page rects immediately and then starts rendering the page to a PDF,
        returning the PDF data to the UI process asynchronously. When UIPrintInteractionController later calls our
        overridden -drawInRect:forPageAtIndex:, we block and wait for the PDF data to be returned. Since
        UIPrintInteractionController draws each page after a delay, it's possible that the web process has already
        returned the PDF data to us by the time we print the first page.

        * Shared/WebPreferencesStore.h: Correctly initialized shouldPrintBackgrounds for iOS.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _dataForDisplayedPDF]): Now that WKPDFView vends its CGPDFDocument directly, extract its data here.
        (-[WKWebView _printFormatterClass]): Tell UIView which UIPrintFormatter to alloc.
        (-[WKWebView _computePageCountAndStartDrawingToPDFWithPrintInfo:WebKit::firstPage:computedTotalScaleFactor:]):
        If we're displaying a PDF, return its page count directly. Otherwise, synchronously ask the web process to
        compute page rects for printing and then return the number of rects.
        (-[WKWebView _endPrinting]): Cleared state and sent the WebPage::EndPrinting message to the web process.
        (-[WKWebView _printedDocument]): If we're displaying a PDF, return its data directly. Otherwise, if we haven't
        received PDF data from the web process yet, wait for it indefinitely (there's no sensible timeout to use here
        since failing to receive the data results in printing some number of blank pages).
        (-[WKWebView _setPrintedDocument:]): Set the CGPDFDocument received from the web process.
        * UIProcess/API/Cocoa/WKWebViewInternal.h: Declared methods called by WKWebViewPrintFormatter.
        * UIProcess/PageClient.h: Declared didFinishDrawingPagesToPDF.
        * UIProcess/WKWebViewPrintFormatter.h: Added.
        * UIProcess/WKWebViewPrintFormatter.mm: Added.
        (-[WKWebViewPrintFormatter dealloc]): Cleared state and called -[WKWebView _endPrinting].
        (-[WKWebViewPrintFormatter webView]): Returned the WKWebView for this print formatter.
        (-[WKWebViewPrintFormatter _recalcPageCount]): Set up a PrintInfo object given the formatter's content rect
        and called -_computePageCountAndStartDrawingToPDFWithPrintInfo:...
        (-[WKWebViewPrintFormatter rectForPageAtIndex:]): Called -_recalcIfNecessary and then returned the rect from
        -_pageContentRect.
        (-[WKWebViewPrintFormatter drawInRect:forPageAtIndex:]): Taught to draw the given page of the printed PDF
        document into the given rect and context provided to us.
        * UIProcess/WebPageProxy.h: Declared didFinishDrawingPagesToPDF.
        * UIProcess/WebPageProxy.messages.in: Added DidFinishDrawingPagesToPDF. Made this a delayed syncrhonous message
        so that additoinal work could be performed after sending the response.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didFinishDrawingPagesToPDF): Created a CGPDFDocument from the data sent to us by the
        web process and called -[WKWebView _setPrintedDocument:].
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView pdfDocument]): Returned the underlying CGPDFDocument.
        (-[WKPDFView documentData]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didFinishDrawingPagesToPDF):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::computePagesForPrinting): Changed to call computePagesForPrintingImpl.
        (WebKit::WebPage::computePagesForPrintingImpl): Moved the common logic of computePagesForPrinting to here so it
        could be called by computePagesForPrintingAndStartDrawingToPDF.
        (WebKit::WebPage::drawPagesToPDF): Changed to call drawPagesToPDFImpl
        (WebKit::WebPage::drawPagesToPDFImpl): Moved the common logic of drawPagesToPDF to here so it could be called
        by computePagesForPrintingAndStartDrawingToPDF.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::computePagesForPrintingAndStartDrawingToPDF): Computed page rects and returned them as a
        synchronous response. Afterwards called drawPagesToPDFImpl() and returned the PDF data by sending
        WebPageProxy::DidFinishDrawingPagesToPDF.

2014-05-21  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Turn on ENABLE_CSS_FILTERS
        https://bugs.webkit.org/show_bug.cgi?id=133153

        Reviewed by Gyuyoung Kim.

        Make WebKit2 compile after r166741 when CSS_FILTERS are enabled.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<WebCore::FilterOperations>::decode):

2014-05-21  Brady Eidson  <beidson@apple.com>

        Special handling of telephone number detection menu.
        <rdar://problem/16967971> and https://bugs.webkit.org/show_bug.cgi?id=133143

        Reviewed by Geoff Garen.

        Add a bool to ContextMenuContextData to represent telephone number menus:
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::operator=):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::isTelephoneNumberContext):

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::showContextMenu): If the menu is a telephone
          number menu then display it using a specific AppKit API.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu): Filter the array of menu items
          through a new WKSI call, and then show it using a telephone number context.

2014-05-21  Alexey Proskuryakov  <ap@apple.com>

        [Mac] REGRESSION (Async text input): Asian text input doesn't work in Flash
        https://bugs.webkit.org/show_bug.cgi?id=133128
        <rdar://problem/16890920>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _interpretKeyEvent:completionHandler:]): Added a separate code path for
        plug-in input. Before async text input, we used to provide a nil input context due
        to having _data->_interpretKeyEventsParameters while this function was executing,
        and thus took a shortcut. The new behavior is different from pre-async in that
        we don't collect commands at all, but I couldn't find any case where that mattered.
        (-[WKView inputContext]): The _collectedKeypressCommands check was not a correct
        replacement for _interpretKeyEventsParameters one, because this variable is not
        always set within -_interpretKeyEvent:completionHandler:.

        * UIProcess/mac/WKTextInputWindowController.mm:
        (-[WKTextInputPanel _interpretKeyEvent:usingLegacyCocoaTextInput:string:]):
        While at it, fixed a separate issue with Cangjie predictive input. We shouldn't
        keep prediction pop-up on screen after hiding the bottom input window.

2014-05-16  Martin Robinson  <mrobinson@igalia.com>

        [CMake] Improve handling of LIB_INSTALL_DIR, EXEC_INSTALL_DIR, and LIBEXEC_INSTALL_DIR
        https://bugs.webkit.org/show_bug.cgi?id=132819

        Reviewed by Carlos Garcia Campos.

        * PlatformEfl.cmake: No need to prefix EXEC_INSTALL_DIR with the prefix any longer.
        * PlatformGtk.cmake: No longer use CMAKE_INSTALL_FULL_FOO variables, instead using the WebKit-specific ones.
        * efl/EWebKit2Config.cmake.in: Ditto.
        * efl/ewebkit2.pc.in: Instead of hard-coding the path to the library installation directory use LIB_INSTALL_DIR.
        * webkit2gtk-web-extension.pc.in: No longer use the pkg-config only variables. Instead use
        the common CMake ones.
        * webkit2gtk.pc.in: Ditto.

2014-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r168625): [GTK] Assertion failure in LocalStorageDatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=133118

        Reviewed by Philippe Normand.

        Call WebContext::applyPlatformSpecificConfigurationDefaults() to
        initialize the WebContextConfiguration before creating the default WebContext.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):

2014-05-21  Shivakumar JM  <shiva.jm@samsung.com>

        [WebKit2] Cleanup the build from unused variable in WebProcess module
        https://bugs.webkit.org/show_bug.cgi?id=133062

        Reviewed by Csaba Osztrogonác.

        Fix unused parameter by using UNUSED_PARAM macro

        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserContentController::addUserScriptMessageHandlers):
        (WebKit::WebUserContentController::removeUserScriptMessageHandler):

2014-05-20  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WK2): Tapping on the input field in duckduckgo.com shows the keyboard but not the caret.
        https://bugs.webkit.org/show_bug.cgi?id=133140
        <rdar://problem/16980898>

        Reviewed by Benjamin Poulain.

        When a page focuses a field on load, we receive the call to startAssistingNode
        but we don't create a text interaction assistant if the focus is not originated
        by a user action. Upon receiving the selection change notification we don't
        call the text interaction assistant, since we don't have one, but we do call
        the web selection assistant. We don't have any valid rects for web selection
        and we clear the selection on the page, causing the caret not to appear and
        the typing to have no effect.

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

2014-05-20  Dean Jackson  <dino@apple.com>

        [Mac] Allow popup menus to override default appearance
        https://bugs.webkit.org/show_bug.cgi?id=133129

        Reviewed by Tim Horton.

        Add an extra "hideArrows" flag to PlatformPopupMenuData
        and replace the call to WKPopupMenuWithSize with WKPopupMenu.

        * Shared/PlatformPopupMenuData.cpp: Encode and decode the new data value.
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h: Add hideArrows boolean.
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu):
        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData): The hideArrows flag is
        true if we don't have the default appearance.

2014-05-20  Eric Carlson  <eric.carlson@apple.com>

        [Mac] do not deactivate an audio session that has running I/O
        https://bugs.webkit.org/show_bug.cgi?id=133127

        Reviewed by Jer Noble.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Settings::setShouldManageAudioSession renamed to 
            setShouldManageAudioSessionCategory, deal with it.

2014-05-19  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r169063) Fixed and sticky nodes misplaced on scrolling sometimes
        https://bugs.webkit.org/show_bug.cgi?id=133106
        <rdar://problem/16967648>

        Reviewed by Sam Weinig.

        Fix regression from r169063. That commit removed scrolledContentsLayers from 
        frame scrolling nodes, but they do actually use them.
        
        So put them back; not in the base class, because they have a somewhat different
        meaning for overflow scrolling and frame scrolling.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        (WebKit::RemoteScrollingTreeTextStream::dump):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2014-05-20  Alexey Proskuryakov  <ap@apple.com>

        [Mac] WebProcess doesn't follow localization of UI process when run as a service
        https://bugs.webkit.org/show_bug.cgi?id=133126
        <rdar://problem/13396515>
        <rdar://problem/16561084>

        Reviewed by Sam Weinig and Tim Horton.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (WebKit::handleXPCBootstrap):
        (main):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::handleXPCBootstrap):
        (main):
        Set localization very early in process lifetime (in development builds, that's
        even before WebKit framework is loaded).

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm: (WebKit::connectToService):
        Pass UI process localization to the service, computing it in the same way we do
        for child processes.

2014-05-20  Anders Carlsson  <andersca@apple.com>

        Fix a header comment
        https://bugs.webkit.org/show_bug.cgi?id=133123
        <rdar://problem/16973783>

        Reviewed by Geoffrey Garen.

        * UIProcess/API/Cocoa/WKUserContentController.h:

2014-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKitWebPage::send-request always pass a valid pointer for redirected response
        https://bugs.webkit.org/show_bug.cgi?id=133119

        Reviewed by Sergio Villar Senin.

        The problem is that we were checking whether the passed in
        WKURLResponseRef is NULL or not, but it's always a valid object
        that can contain a NULL WebCore::ResourceResponse.

        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:
        (willSendRequestForFrame): Pass NULL as redirect-response
        parameter of WebKitWebPage::send-request signal when the
        WebCore::ResourceResponse of the passed in WKURLResponseRef is NULL.

2014-05-20  Antti Koivisto  <antti@apple.com>

        Double-tap zoom does not take obscuring insets into account
        https://bugs.webkit.org/show_bug.cgi?id=133116
        <rdar://problem/16765604>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToRect:WebCore::atScale:origin:WebCore::]):
        
            Compute the zoom target taking insets into account.

2014-05-19  Gavin Barraclough  <baraclough@apple.com>

        WebKit2/iOS: parented view should be considered hidden if app is backgrounded
        https://bugs.webkit.org/show_bug.cgi?id=133099
        radar://16942183

        Reviewed by Simon Fraser.

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive):
            - implemented in terms of isViewVisible.
            - FIXME: https://bugs.webkit.org/show_bug.cgi?id=133098
        (WebKit::PageClientImpl::isViewFocused):
            - implemented in terms of isViewWindowActive.
            - FIXME: https://bugs.webkit.org/show_bug.cgi?id=133098
        (WebKit::PageClientImpl::isViewVisible):
            - take UIApplication applicationState into account in determining visibility.
        (WebKit::PageClientImpl::isViewVisibleOrOccluded):
            - implemented in terms of isViewVisible.
        (WebKit::PageClientImpl::isVisuallyIdle):
            - implemented in terms of isViewVisible.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
            - register for UIApplicationDidEnterBackgroundNotification.
        (-[WKContentView _applicationDidEnterBackground:]):
        (-[WKContentView _applicationWillEnterForeground:]):
            - when the application state changes all flags except IsInWindow may be affected.

2014-05-19  Enrica Casucci  <enrica@apple.com>

        WK2 iOS: Pressing the form navigation button causes the keyboard to be dismissed.
        https://bugs.webkit.org/show_bug.cgi?id=133100
        <rdar://problem/16808673>

        Reviewed by Benjamin Poulain.

        The call to focusNextAssistedNode is the result of a user action, since
        it is called when the user pressed the form navigation buttons.
        Therefore we must set m_userIsInteracting to true before changing the focus
        to make sure the focus change is honored.

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

2014-05-19  Beth Dakin  <bdakin@apple.com>

        TelephoneNumberOverlayController should use a modern loop for text quad bounding 
        boxes
        https://bugs.webkit.org/show_bug.cgi?id=133096

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::textQuadsToBoundingRectForRange):

2014-05-19  Jeremy Jones  <jeremyj@apple.com>

        PlatformCALayerRemoteCustom properties aren't initialized to match the PlatformLayer
        https://bugs.webkit.org/show_bug.cgi?id=133025

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (WebKit::PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        Initialize PlatformCALayerRemote properties from the PlatformLayer.

2014-05-19  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] When a page relayout on dynamic resize, keep the same relative width in view
        https://bugs.webkit.org/show_bug.cgi?id=133026
        <rdar://problem/16833971>

        Reviewed by Simon Fraser.

        When a page does not relayout, we keep the same width in view.
        When a page relayout, we should keep the same relative width in view.

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

2014-05-19  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Add some missing state reset on crash
        https://bugs.webkit.org/show_bug.cgi?id=133036

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetState):
        The missing reset for m_isTrackingTouchEvents would cause the WebPageProxy to send
        touch events when it shouldn't. That would only be for an active touch sequence.

        The missing reset m_lastVisibleContentRectUpdate would prevent pushing the new UI state
        to the new page on reload, that is very bad.

        Also moved m_videoFullscreenManager to be in the same order as initialization, and invalidate
        the callbacks for dictation.

2014-05-19  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Move scale noise filtering to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=133021

        Reviewed by Darin Adler.

        Filtering in the UIProcess was stupid. It forces to handle a third kind of scale just for updates.

        The WebProcess already adjusts the input scale based on the viewport. Changing the input scale at that level
        is already supported. It is a better place to have the filtering.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-05-19  Simon Fraser  <simon.fraser@apple.com>

        Split scrolling tree ScrollingNodes into FrameScrollingNodes and OverflowScrollingNodes
        https://bugs.webkit.org/show_bug.cgi?id=133022

        Reviewed by Sam Weinig.
        
        In both the scrolling state tree and the scrolling tree, split the "scrolling nodes"
        into FrameScrolling and OverflowScrolling nodes.
        
        Move what was the "viewportSize" property onto the base class for the scrolling
        nodes, calling it "scrollableAreaSize".
        
        Make minimum/maximumScrollPosition() virtual so we can share more code (and there
        is more code sharing to be done in future).

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateOverflowScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
        (ArgumentCoder<ScrollingStateOverflowScrollingNode>::decode):
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::RemoteScrollingTreeTextStream::dump):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createNode):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollLayer):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterViewportChange):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateBeforeChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::setScrollLayerPosition):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateChildNodesAfterScroll):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2014-05-19  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Fix a typo in plug-in sandbox
        https://bugs.webkit.org/show_bug.cgi?id=133074

        Reviewed by Anders Carlsson.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:

2014-05-16  Andy Estes  <aestes@apple.com>

        [WebKit2] Wake up threads blocked in waitForAndDispatchImmediately() if we lose our connection
        https://bugs.webkit.org/show_bug.cgi?id=133010

        Reviewed by Geoffrey Garen.

        If a thread is blocked on m_waitForMessageCondition and we lose our connection, treat that like we do a timeout.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::Connection):
        (IPC::Connection::waitForMessage):
        (IPC::Connection::connectionDidClose):
        * Platform/IPC/Connection.h:

2014-05-19  Mark Rowe  <mrowe@apple.com>

        Build fix after r169023.

        * Shared/API/Cocoa/WebKitPrivate.h: Stop including headers that no longer exist.
        I hope for weinig's sake that no-one was relying on them.

2014-05-18  Anders Carlsson  <andersca@apple.com>

        Relax an assertion when creating document loaders
        https://bugs.webkit.org/show_bug.cgi?id=133058

        Reviewed by Sam Weinig.

        When navigating back/forward items recursively, createDocumentLoader will be called
        for subframes before main frames so only associate the navigation with main frames.

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

2014-05-18  Zsolt Borbely  <zsborbely.u-szeged@partner.samsung.com>

        CMake Buildfix after r169023.

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt: Add new files after r168994.

2014-05-18  Sam Weinig  <sam@webkit.org>

        [WebKit2] Implement ScriptMessageHandlers
        https://bugs.webkit.org/show_bug.cgi?id=133053

        Reviewed by Anders Carlsson.

        * DerivedSources.make:
        * Scripts/webkit2/messages.py:
        (struct_or_class):
        (argument_coder_headers_for_type):
        (headers_for_type):
        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        (-[WKScriptMessage _initWithBody:webView:name:]):
        (-[WKScriptMessage body]):
        (-[WKScriptMessage webView]):
        (-[WKScriptMessage name]):
        (-[WKScriptMessage _scriptWorld]): Deleted.
        * UIProcess/API/Cocoa/WKScriptMessageInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKScriptMessagePrivate.h.
        * UIProcess/API/Cocoa/WKScriptMessagePrivate.h: Removed.
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addScriptMessageHandler:name:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:]):
        (-[WKUserContentController _addScriptMessageHandler:name:world:]): Deleted.
        (-[WKUserContentController _removeScriptMessageHandlerForName:world:]): Deleted.
        * UIProcess/API/Cocoa/WKUserContentControllerInternal.h:
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (pageToViewMap):
        (fromWebPageProxy):
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView dealloc]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/UserContent/WebScriptMessageHandler.cpp: Added.
        (WebKit::WebScriptMessageHandlerHandle::encode):
        (WebKit::WebScriptMessageHandlerHandle::decode):
        (WebKit::generateIdentifier):
        (WebKit::WebScriptMessageHandler::create):
        (WebKit::WebScriptMessageHandler::WebScriptMessageHandler):
        (WebKit::WebScriptMessageHandler::~WebScriptMessageHandler):
        * UIProcess/UserContent/WebScriptMessageHandler.h: Added.
        (WebKit::WebScriptMessageHandler::Client::~Client):
        (WebKit::WebScriptMessageHandler::handle):
        (WebKit::WebScriptMessageHandler::identifier):
        (WebKit::WebScriptMessageHandler::name):
        (WebKit::WebScriptMessageHandler::client):
        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
        (WebKit::WebUserContentControllerProxy::addProcess):
        (WebKit::WebUserContentControllerProxy::removeProcess):
        (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler):
        (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName):
        (WebKit::WebUserContentControllerProxy::didPostMessage):
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        * UIProcess/UserContent/WebUserContentControllerProxy.messages.in: Added.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/UserContent/WebUserContentController.cpp:
        (WebKit::WebUserMessageHandlerDescriptorProxy::create):
        (WebKit::WebUserMessageHandlerDescriptorProxy::~WebUserMessageHandlerDescriptorProxy):
        (WebKit::WebUserMessageHandlerDescriptorProxy::didPostMessage):
        (WebKit::WebUserMessageHandlerDescriptorProxy::descriptor):
        (WebKit::WebUserMessageHandlerDescriptorProxy::identifier):
        (WebKit::WebUserMessageHandlerDescriptorProxy::WebUserMessageHandlerDescriptorProxy):
        (WebKit::WebUserContentController::addUserScriptMessageHandlers):
        (WebKit::WebUserContentController::removeUserScriptMessageHandler):
        * WebProcess/UserContent/WebUserContentController.h:
        * WebProcess/UserContent/WebUserContentController.messages.in:

2014-05-18  Rik Cabanier  <cabanier@adobe.com>

        support for navigator.hardwareConcurrency
        https://bugs.webkit.org/show_bug.cgi?id=132588

        Reviewed by Filip Pizlo.

        * Configurations/FeatureDefines.xcconfig:

2014-05-18  Anders Carlsson  <andersca@apple.com>

        Implement Navigations for all methods declared returning one
        https://bugs.webkit.org/show_bug.cgi?id=133048
        <rdar://problem/16830064>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView goToBackForwardListItem:]):
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        Create and return navigations.

        (-[WKWebView _reload]):
        Call -[WKWebView reload].

        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::createBackForwardNavigation):
        Create a back/forward navigation.

        (WebKit::NavigationState::createReloadNavigation):
        Create a reload navigation.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
        Generate a navigation ID and send it with the GoToBackForwardItem message.

        (WebKit::WebPageProxy::reload):
        Return a navigation ID.

        (WebKit::WebPageProxy::goForward):
        Generate a navigation ID and send it with the GoForward message.
        
        (WebKit::WebPageProxy::goBack):
        Generate a navigation ID and send it with the GoBack message.

        (WebKit::WebPageProxy::goToBackForwardItem):
        Generate a navigation ID and send it with the GoToBackForwardItem message.

        * UIProcess/WebPageProxy.h:
        Return navigation IDs where appropriate.

        * UIProcess/cf/WebPageProxyCF.cpp:
        (WebKit::WebPageProxy::restoreFromSessionStateData):
        Generate a navigation ID and send it with the RestoreSessionAndNavigateToCurrentItem message.
        
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::goForward):
        (WebKit::WebPage::goBack):
        (WebKit::WebPage::goToBackForwardItem):
        Set up the pending navigation ID.

        (WebKit::WebPage::restoreSessionAndNavigateToCurrentItem):
        Call goToBackForwardItem with a navigation ID.

        * WebProcess/WebPage/WebPage.h:
        Add navigation IDs.

        * WebProcess/WebPage/WebPage.messages.in:
        Add navigation IDs.

2014-05-18  Commit Queue  <commit-queue@webkit.org>

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

        We can't expose the C SPI from WKWebView (Requested by
        andersca on #webkit).

        Reverted changeset:

        "Need a way to get a WKPageRef from a WKWebView"
        https://bugs.webkit.org/show_bug.cgi?id=133015
        http://trac.webkit.org/changeset/169001

2014-05-18  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2][GTK] Buildfix after r168999.

        Reviewed by Csaba Osztrogonác.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultWebSQLDatabaseDirectory): Renamed from WebKit::WebContext::platformDefaultDatabaseDirectory().
        (WebKit::WebContext::platformDefaultIndexedDBDatabaseDirectory): Added.

2014-05-18  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2][EFL] Buildfix after r168999.

        Reviewed by Csaba Osztrogonác.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultWebSQLDatabaseDirectory): Renamed from WebKit::WebContext::platformDefaultDatabaseDirectory().
        (WebKit::WebContext::platformDefaultIndexedDBDatabaseDirectory): Added.

2014-05-18  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2][cmake] Buildfix after r168994.

        Reviewed by Csaba Osztrogonác.

        * CMakeLists.txt: Added new files to the build system introduced in r168994.

2014-05-17  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (NetworkProcess): Trying to use appcache fallback crashes in ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache
        https://bugs.webkit.org/show_bug.cgi?id=133007
        <rdar://problem/13702706>

        appcache tests often fail on the Mac WebKit2 bot
        https://bugs.webkit.org/show_bug.cgi?id=82061

        Reviewed by Maciej Stachowiak.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::willSendRequest):
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        Perform the same appcache checks that ResourceHandleClient implementation in ResourceLoader
        does. We should eventually come up with a way to share the code. Perhaps add a class that
        isolates ResourceLoader from networking details? But ResourceLoader was itself supposed
        to be the class that isolates DocumentLoader from networking details. So, unsure.

2014-05-17  Jae Hyun Park  <jaepark@webkit.org>

        [EFL] Remove m_contentPosition from PageViewportControllerClientEfl
        https://bugs.webkit.org/show_bug.cgi?id=132774

        Reviewed by Anders Carlsson.

        m_contentPosition is not used anywhere. So, this patch removes
        m_contentPosition and reduces one unnecessary assignment in
        setViewportPosition. Also, it renames contentsPoint to contentsPosition.

        * UIProcess/PageViewportControllerClient.h:
        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
        * UIProcess/efl/PageViewportControllerClientEfl.h:

2014-05-17  David Kilzer  <ddkilzer@apple.com>

        Need a way to get a WKPageRef from a WKWebView
        <http://webkit.org/b/133015>

        Reviewed by Benjamin Poulain.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _pageRef]): Added.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (-[WKWebView _pageRef]): Added declaration.

2014-05-17  Anders Carlsson  <andersca@apple.com>

        Give user scripts custom URLs
        https://bugs.webkit.org/show_bug.cgi?id=133035

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addUserScript:]):
        Create a user-script:<number> URL for user scripts.

        * UIProcess/API/Cocoa/WKUserScript.h:
        Move the init method after the properties.

2014-05-17  Anders Carlsson  <andersca@apple.com>

        Replace WKContextSetDatabaseDirectory with two WKContextConfiguration parameters
        https://bugs.webkit.org/show_bug.cgi?id=133033
        <rdar://problem/16830143>

        Reviewed by Sam Weinig.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        Rename databaseDirectory to webSQLDatabaseDirectory to better indicate the directory type.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDatabaseDirectory): Deleted.
        This is no longer needed.

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyIndexedDBDatabaseDirectory):
        (WKContextConfigurationSetIndexedDBDatabaseDirectory):
        (WKContextConfigurationCopyWebSQLDatabaseDirectory):
        (WKContextConfigurationSetWebSQLDatabaseDirectory):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        Add setters and getters.

        * UIProcess/API/C/WKContextPrivate.h:
        Remove WKContextSetDatabaseDirectory.

        * UIProcess/APIContextConfiguration.cpp:
        (API::ContextConfiguration::webContextConfiguration):
        Set m_indexedDBDatabaseDirectory and m_webSQLDatabaseDirectory on the configuration.

        * UIProcess/APIContextConfiguration.h:
        (API::ContextConfiguration::indexedDBDatabaseDirectory):
        (API::ContextConfiguration::setIndexedDBDatabaseDirectory):
        (API::ContextConfiguration::webSQLDatabaseDirectory):
        (API::ContextConfiguration::setWebSQLDatabaseDirectory):
        Add getters and setters to the C++ part of WKContextConfigurationRef.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applyPlatformSpecificConfigurationDefaults):
        Set webSQLDatabaseDirectory and indexedDBDatabaseDirectory.

        (WebKit::WebContext::WebContext):
        Initialize m_webSQLDatabaseDirectory and m_indexedDBDatabaseDirectory.

        (WebKit::WebContext::ensureDatabaseProcess):
        Set parameters.indexedDatabaseDirectory from m_indexedDBDatabaseDirectory.

        (WebKit::WebContext::createNewWebProcess):
        Set parameters.webSQLDatabaseDirectory from m_webSQLDatabaseDirectory.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultWebSQLDatabaseDirectory):
        Rename this to indicate that it's about WebSQL databases.

        (WebKit::WebContext::platformDefaultIndexedDBDatabaseDirectory):
        Add this.

        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
        (WebKit::WebDatabaseManager::initialize):
        Update for WebProcessCreationParameters rename.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
        Update for WebProcessCreationParameters rename.

2014-05-17  Brent Fulgham  <bfulgham@apple.com>

        [Phone Number Detection] drop-down menu in the phone number detection box doesn't appear.
        https://bugs.webkit.org/show_bug.cgi?id=133024

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect): Don't clear the set of found phone numbers each
        time we call drawRect. This gets called ~9 times per screen refresh, so end up with no active
        phone numbers to interact with.

2014-05-17  Alexey Proskuryakov  <ap@apple.com>

        NetworkProcess can repeatedly crash handling Blob messages after any unrelated crash
        https://bugs.webkit.org/show_bug.cgi?id=133032
        <rdar://problem/16951630>

        Reviewed by Geoffrey Garen.

        Replaced assertions with runtime checks. This can happen if NetworkProcess previously
        crashed for any unrelated reason.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):

2014-05-17  Anders Carlsson  <andersca@apple.com>

        -[WKWebView dealloc] should close the page
        https://bugs.webkit.org/show_bug.cgi?id=133031
        <rdar://problem/16929815>

        Reviewed by Simon Fraser.

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

2014-05-16  Anders Carlsson  <andersca@apple.com>

        Expose WKUserScript as API
        https://bugs.webkit.org/show_bug.cgi?id=133017
        <rdar://problem/16948059>

        Reviewed by Sam Weinig.

        * DerivedSources.make:
        Add WebUserContentController.

        * Shared/API/Cocoa/WebKit.h:
        Add WKUserScript.h

        * Shared/API/c/WKSharedAPICast.h:
        (WebKit::toUserScriptInjectionTime):
        Update for WKUserScriptInjectionTime -> _WKUserScriptInjectionTime rename.

        * Shared/API/c/WKUserScriptInjectionTime.h:
        Rename WKUserScriptInjectionTime to _WKUserScriptInjectionTime to free up the name for the Objective-C API

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        Encode the user content controller ID.

        (WebKit::WebPageCreationParameters::decode):
        Decode the user content controller ID.

        * Shared/WebPageCreationParameters.h:
        Add userContentControllerID.

        * UIProcess/API/C/WKPageGroup.cpp:
        (WKPageGroupAddUserScript):
        Update for WKUserScriptInjectionTime -> _WKUserScriptInjectionTime rename.

        * UIProcess/API/C/WKPageGroup.h:
        Update for WKUserScriptInjectionTime -> _WKUserScriptInjectionTime rename.

        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        Update for WKUserScriptInjectionTime -> _WKUserScriptInjectionTime rename.

        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
        (-[WKBrowsingContextGroup addUserScript:baseURL:whitelistedURLPatterns:blacklistedURLPatterns:injectionTime:mainFrameOnly:]):
        Update for WKUserScriptInjectionTime -> _WKUserScriptInjectionTime rename.

        * UIProcess/API/Cocoa/WKUserContentController.h:
        Add new methods.

        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController init]):
        Create the WebUserContentControllerProxy object and user scripts array.

        (-[WKUserContentController userScripts]):
        Return the user scripts array.

        (toWebCoreUserScriptInjectionTime):
        Helper for converting from a WKUserScriptInjectionTime enum to WebCore::UserScriptInjectionTime.

        (-[WKUserContentController addUserScript:]):
        Call through to the _userContentControllerProxy object.

        (-[WKUserContentController removeAllUserScripts]):
        Call through to the _userContentControllerProxy object.
        
        * UIProcess/API/Cocoa/WKUserContentControllerInternal.h: Added.
        Add WebUserContentControllerProxy ivar.

        * UIProcess/API/Cocoa/WKUserScript.h: Added.
        Add new header.

        * UIProcess/API/Cocoa/WKUserScript.mm:
        (-[WKUserScript initWithSource:injectionTime:forMainFrameOnly:]):
        Initialize the WKUserScript object.

        (-[WKUserScript source]):
        (-[WKUserScript injectionTime]):
        (-[WKUserScript isForMainFrameOnly]):
        Add getters.

        (-[WKUserScript copyWithZone:]):
        Since WKUserScript is immutable, just return a retained object.

        * UIProcess/API/Cocoa/WKUserScriptInternal.h:
        Add ivars.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Set the user content controller from the configuration.

        * UIProcess/UserContent/WebUserContentControllerProxy.cpp: Added.
        (WebKit::generateIdentifier):
        Return a unique identifier.

        (WebKit::WebUserContentControllerProxy::create):
        Return a new WebUserContentControllerProxy object.

        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
        Initialize m_identifier.

        (WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy):
        Add destructor.

        (WebKit::WebUserContentControllerProxy::addProcess):
        Add the process to the m_processes set. If it's the first time doing so, add the user scripts we know about.

        (WebKit::WebUserContentControllerProxy::removeProcess):
        Remove the process from m_processes.

        (WebKit::WebUserContentControllerProxy::addUserScript):
        Add the user script and let all the web processes know that it was added.

        (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
        Remove all user scripts and tell all the web processes about it.
        
        * UIProcess/UserContent/WebUserContentControllerProxy.h:
        Add new class.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        If the process is already running, add it to the user content controller.

        (WebKit::WebPageProxy::close):
        If the process is running, remove it from the user content controller.

        (WebKit::WebPageProxy::connectionWillOpen):
        Add the process to the user content controller.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Remove the process from the user content controller.

        (WebKit::WebPageProxy::creationParameters):
        Pass along the user content controller ID when creating the web page.

        * UIProcess/WebPageProxy.h:
        Add a WebUserContentControllerProxy object to the web page configuration.

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

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        Update for WKUserScriptInjectionTime -> _WKUserScriptInjectionTime rename.
        
        * WebProcess/UserContent/WebUserContentController.cpp: Added.
        New class that manages a WebCore::UserContentController object.

        (WebKit::WebUserContentController::getOrCreate):
        Look up (or create) a WebUserContentController object given its identifier.

        (WebKit::WebUserContentController::WebUserContentController):
        Add ourselves as a message receiver.

        (WebKit::WebUserContentController::~WebUserContentController):
        Remove ourselves as a message receiver.

        (WebKit::WebUserContentController::addUserScripts):
        Add all passed in user scripts to the WebCore user content controller object.

        (WebKit::WebUserContentController::removeAllUserScripts):
        Remove all user scripts from the WebCore user content controller object.

        * WebProcess/UserContent/WebUserContentController.messages.in: Added.
        Add new messages file.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Get a WebUserContentController object and pass it along to WebCore.

        * WebProcess/WebPage/WebPage.h:
        Add WebUserContentController member.

2014-05-16  Piotr Grad  <p.grad@samsung.com>

        [GTK] Build break after 168978.
        https://bugs.webkit.org/show_bug.cgi?id=133012.

        Reviewed by Simon Fraser.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsConstructed):

2014-05-16  Simon Fraser  <simon.fraser@apple.com>

        Put back a symbol removed in r168978 that Safari needs, but deprecate it.

        Reviewed by Anders Carlsson.

        * Shared/API/c/WKDeprecatedFunctions.cpp:
        (WKPreferencesSetRegionBasedColumnsEnabled):
        (WKPreferencesGetRegionBasedColumnsEnabled):

2014-05-16  Oliver Hunt  <oliver@apple.com>

        Separate enabling sandbox extensions from the WEB_PROCESS_SANDBOX flag
        https://bugs.webkit.org/show_bug.cgi?id=133016

        Reviewed by Alexey Proskuryakov.

        Add a distinct SANDBOX_EXTENSIONS flag to guard sandbox extensions
        and switch over to it in the places that extensions are used.

        * Shared/SandboxExtension.h:
        * Shared/mac/SandboxExtensionMac.mm:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didChooseFilesForOpenPanel):
        * WebKit2Prefix.h:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-05-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add a heuristic to set the right horizontal offset on rotation for responsive websites
        https://bugs.webkit.org/show_bug.cgi?id=132937
        <rdar://problem/16710097>

        Reviewed by Simon Fraser.

        When responsive websites have the content size lay out larger than the minimal layout size,
        we should not keep the relative horizontal position into view,
        many of those websites have all the content on the left.

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

2014-05-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] On dynamic resize, the content offset is contrained to the old content size
        https://bugs.webkit.org/show_bug.cgi?id=132972

        Reviewed by Simon Fraser.

        When we set the content offset, UIScrollView limits the value to the current valid range for
        content size. Since the content size was only updated after the animation, when the first frame
        comes in, the content offset would sometimes be limited to a smaller rect that the actual content.

        To fix this, set the expected future content size before changing the offset.

        During the animation, the content size could have changed arbitrarily. At the end of the animation,
        we take the actual frame and set the definite content size.
        Any update after that will be regular updates through didCommitLayer. 

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

2014-05-16  Simon Fraser  <simon.fraser@apple.com>

        Remove "region-based columns" prefs
        https://bugs.webkit.org/show_bug.cgi?id=133006
        <rdar://problem/16945824>

        Reviewed by Dave Hyatt.

        Remove "region-based columns" prefs and related code, since this is only
        way to render columns now.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetRegionBasedColumnsEnabled): Deleted.
        (WKPreferencesGetRegionBasedColumnsEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-05-16  Brent Fulgham  <bfulgham@apple.com>

        Work around bug in Silverlight
        https://bugs.webkit.org/show_bug.cgi?id=133004

        Reviewed by Anders Carlsson.

        * PluginProcess/EntryPoint/mac/LegacyProcess/PluginProcessMain.mm:
        (WebKit::PluginProcessMainDelegate::doPreInitializationWork): Add low-resolution flag
        to user defaults prior to NSApplication invocation. This code was moved from
        PluginProcess::platformInitializeProcess.
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess): Move low-resolution flag
        setting to PluginProcessMainDelegate.

2014-05-16  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2] Change the remaining framework includes from WebKit2 to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=132956

        Reviewed by Sam Weinig.

        * NetworkProcess/unix/NetworkProcessMainUnix.cpp:
        * NetworkProcess/unix/NetworkProcessMainUnix.h:
        * PluginProcess/unix/PluginProcessMainUnix.h:
        * Shared/API/c/cairo/WKImageCairo.h:
        * Shared/API/c/cf/WKURLRequestCF.h:
        * Shared/API/c/cf/WKURLResponseCF.h:
        * Shared/API/c/efl/WKArrayEfl.cpp:
        * Shared/API/c/efl/WKArrayEfl.h:
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/C/WKBatteryManager.h:
        * UIProcess/API/C/WKBatteryStatus.h:
        * UIProcess/API/C/WKGrammarDetail.h:
        * UIProcess/API/C/WKTextChecker.h:
        * UIProcess/API/C/WKVibration.h:
        * UIProcess/API/C/WKViewportAttributes.h:
        * UIProcess/API/C/cairo/WKIconDatabaseCairo.h:
        * UIProcess/API/C/efl/WKAPICastEfl.h:
        * UIProcess/API/C/efl/WKColorPickerResultListener.h:
        * UIProcess/API/C/efl/WKEventEfl.h:
        * UIProcess/API/C/efl/WKPageEfl.h:
        * UIProcess/API/C/efl/WKPopupItem.h:
        * UIProcess/API/C/efl/WKPopupMenuListener.h:
        * UIProcess/API/C/efl/WKViewEfl.cpp:
        * UIProcess/API/C/efl/WKViewEfl.h:
        * UIProcess/API/C/gtk/WKFullScreenClientGtk.h:
        * UIProcess/API/C/gtk/WKInspectorClientGtk.h:
        * UIProcess/API/C/gtk/WKView.h:
        * UIProcess/API/C/gtk/WKViewPrivate.h:
        * UIProcess/API/C/soup/WKContextSoup.h:
        * UIProcess/API/C/soup/WKCookieManagerSoup.h:
        * UIProcess/API/C/soup/WKSoupCustomProtocolRequestManager.h:
        * UIProcess/API/C/soup/WKSoupRequestManager.h:
        * UIProcess/API/Cocoa/WKErrorRecoveryAttempting.h:
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.h:
        * UIProcess/API/cpp/efl/WKEinaSharedString.cpp:
        * UIProcess/API/cpp/efl/WKEinaSharedString.h:
        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/GestureRecognizer.h:
        * UIProcess/API/efl/ewk_application_cache_manager_private.h:
        * UIProcess/API/efl/ewk_auth_request_private.h:
        * UIProcess/API/efl/ewk_back_forward_list_item_private.h:
        * UIProcess/API/efl/ewk_back_forward_list_private.h:
        * UIProcess/API/efl/ewk_context_menu_item.cpp:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_cookie_manager_private.h:
        * UIProcess/API/efl/ewk_database_manager_private.h:
        * UIProcess/API/efl/ewk_error_private.h:
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        * UIProcess/API/efl/ewk_file_chooser_request_private.h:
        * UIProcess/API/efl/ewk_page_group_private.h:
        * UIProcess/API/efl/ewk_popup_menu_item_private.h:
        * UIProcess/API/efl/ewk_popup_menu_private.h:
        * UIProcess/API/efl/ewk_security_origin_private.h:
        * UIProcess/API/efl/ewk_settings_private.h:
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_view_private.h:
        * UIProcess/API/efl/ewk_window_features_private.h:
        * UIProcess/API/efl/tests/InjectedBundle/injected_bundle_sample.cpp:
        * UIProcess/API/efl/tests/test_ewk2_eina_shared_string.cpp:
        * UIProcess/API/gtk/WebKitDownloadClient.cpp:
        * UIProcess/API/gtk/WebKitPrivate.h:
        * UIProcess/CoordinatedGraphics/WKCoordinatedSceneAPICast.h:
        * UIProcess/efl/BatteryProvider.h:
        * UIProcess/efl/ContextHistoryClientEfl.h:
        * UIProcess/efl/DownloadManagerEfl.h:
        * UIProcess/efl/FindClientEfl.h:
        * UIProcess/efl/FormClientEfl.h:
        * UIProcess/efl/PageLoadClientEfl.h:
        * UIProcess/efl/PagePolicyClientEfl.h:
        * UIProcess/efl/PageUIClientEfl.h:
        * UIProcess/efl/RequestManagerClientEfl.h:
        * UIProcess/efl/TextCheckerClientEfl.h:
        * UIProcess/efl/VibrationClientEfl.h:
        * UIProcess/efl/ViewClientEfl.cpp:
        * UIProcess/efl/ViewClientEfl.h:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        * WebProcess/WebCoreSupport/efl/WebErrorsEfl.cpp:
        * WebProcess/WebCoreSupport/gtk/WebErrorsGtk.cpp:
        * WebProcess/efl/SeccompFiltersWebProcessEfl.cpp:
        * WebProcess/efl/SeccompFiltersWebProcessEfl.h:
        * WebProcess/efl/WebProcessMainEfl.cpp:
        * WebProcess/efl/WebProcessMainEfl.h:
        * WebProcess/gtk/WebGtkInjectedBundleMain.cpp:
        * WebProcess/gtk/WebProcessMainGtk.cpp:
        * WebProcess/gtk/WebProcessMainGtk.h:
        * mac/WKPreferences.h:

2014-05-15  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Skip failing unit tests
        https://bugs.webkit.org/show_bug.cgi?id=132979

        Reviewed by Daniel Bates.

        * PlatformEfl.cmake: Skip failing unit tests for now.

2014-05-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] When zoomed, fixed elements jump at the start of a scroll, and jump back at the end.
        https://bugs.webkit.org/show_bug.cgi?id=132978
        <rdar://problem/16894428>

        Reviewed by Benjamin Poulain.
        
        Move the static function fixedPositionRectFromExposedRect() to a member function on
        WebPageProxy so we can call it from more places. Also never give WebCore a customFixedPosition
        rect that extends past the document bounds, but allow rubber-banding/pinching in the UI process to
        move fixed elements outside the document.
        
        * UIProcess/PageClient.h: Need to expose minimumZoomScale() and contentsSize() to WebPageProxy.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::minimumZoomScale):
        (WebKit::PageClientImpl::contentsSize):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:]):
        Pass the computeCustomFixedPositionRect(ConstrainedToDocumentRect) to WebCore, but use computeCustomFixedPositionRect()
        for the ScrollingCoordinator update.
        (adjustedUnexposedEdge): Deleted.
        (adjustedUnexposedMaxEdge): Deleted.
        (fixedPositionRectFromExposedRect): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::adjustedUnexposedEdge):
        (WebKit::adjustedUnexposedMaxEdge):
        (WebKit::WebPageProxy::computeCustomFixedPositionRect):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree): This fixes some flashing when the scrolling tree
        was being updated while scrolling; we now pass the correct rect.

2014-05-15  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/132976> Move discovery of sharing services off the main thread

        Discovery of sharing services can require disk access and IPC. Since the interface to
        ServicesController is already asynchronous, we can easily perform the discovery on a
        background queue. This can eliminate tens to hundreds of milliseconds worth of work
        from the main thread when creating the first web process.

        Reviewed by Brady Eidson.

        * UIProcess/mac/ServicesController.h:
        * UIProcess/mac/ServicesController.mm:
        (WebKit::ServicesController::ServicesController):
        (WebKit::ServicesController::refreshExistingServices): Bail out early if we're already
        in the process of refreshing the services. Kick the discovery over to a background queue,
        with it hopping back to the main queue to update the actual state and notify any contexts
        that were interested.

2014-05-15  Dan Bernstein  <mitz@apple.com>

        Fixed a typo in a comment and updated previous change log entry.

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

2014-05-15  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16844952> [iOS] www.wikipedia.org is loading much slower due to FormClient::willBeginInputSession
        https://bugs.webkit.org/show_bug.cgi?id=132974

        Reviewed by Enrica Casucci.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::elementDidFocus): Don’t call FormClient::willBeginInputSession if the
        focus isn’t user-initiated, because in that case the UI process will bail out of
        -_startAssistingNode:userIsInteracting:userObject: before creating an input session and
        calling the -_webView:didStartInputSession:.

2014-05-15  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WKWebView sends invalid content offsets at the end of animated resize
        https://bugs.webkit.org/show_bug.cgi?id=132941
        <rdar://problem/16921557>

        Reviewed by Tim Horton.

        Since we cannot change the scale and content inset simultaneously while accounting for the obscured insets,
        we end up with invalid contentOffsets.

        To work around the problem, change the content scale outside of UIScrollView to ensure none of the side effect
        happens.

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

2014-05-15  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Zoom): Document size changes during zoom gesture cause erratic scrolling
        https://bugs.webkit.org/show_bug.cgi?id=132944
        <rdar://problem/15769454>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        If a layer flush occurs and we have an active transient zoom,
        re-apply the transient zoom to the relevant platform layers, because
        WebCore might have overwritten the relevant layer properties.

        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):
        Reset m_transientZoomScale before flushLayers() so that we don't
        re-apply the transient zoom when we're actually trying to commit it.

2014-05-15  Alex Christensen  <achristensen@webkit.org>

        Add pointer lock to features without enabling it.
        https://bugs.webkit.org/show_bug.cgi?id=132961

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        Added ENABLE_POINTER_LOCK to list of features.

2014-05-15  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Fix copying animations between layers, and pausing them
        https://bugs.webkit.org/show_bug.cgi?id=132943
        <rdar://problem/16906369&16906541>

        Reviewed by Tim Horton.
        
        Fix PlatformCAAnimationRemote to support animation copying, and to record
        the beginTime for implicitly started animations. This fixes animation pausing,
        and copying of animations between layers when they go between tiled and non-tiled.
        
        This requires sending the animation key back through animationDidStart() so that
        we can record this beginTime on the PlatformCAAnimationRemote in the web process.
        This path doesn't set the "hasExplicitBeginTime" flag.
        
        PlatformCAAnimationRemote also now stores a hash of active animations, so that
        it can implement animationForKey(), and record the beginTime.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::animationDidStart): Grovel for the key for this
        animation; sadly CA doesn't give us an easier way.
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::acceleratedAnimationDidStart):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (-[WKAnimationDelegate animationDidStart:]):
        (WebKit::PlatformCAAnimationRemote::copy):
        (WebKit::PlatformCAAnimationRemote::copyTimingFunctionFrom):
        (WebKit::PlatformCAAnimationRemote::copyFromValueFrom):
        (WebKit::PlatformCAAnimationRemote::copyToValueFrom):
        (WebKit::PlatformCAAnimationRemote::copyValuesFrom):
        (WebKit::PlatformCAAnimationRemote::copyKeyTimesFrom):
        (WebKit::PlatformCAAnimationRemote::copyTimingFunctionsFrom):
        (WebKit::addAnimationToLayer):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::addAnimationForKey):
        (WebKit::PlatformCALayerRemote::removeAnimationForKey):
        (WebKit::PlatformCALayerRemote::animationForKey):
        (WebKit::PlatformCALayerRemote::animationStarted):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::animationDidStart):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::acceleratedAnimationDidStart):

2014-05-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up "has non-zero begin time" terminology in animations
        https://bugs.webkit.org/show_bug.cgi?id=132942

        Reviewed by Tim Horton.

        Change the "non-zero beginTime" terminology in the platform CA animations
        code to "explicit beginTime": this flag really means that we explicitly set
        the beginTime of the animation, rather than let CA set the beginTime when
        committing the animation. This flag is used for animations with negative
        delay, and when pausing.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (-[WKAnimationDelegate animationDidStart:]):
        (WebKit::PlatformCAAnimationRemote::Properties::encode):
        (WebKit::PlatformCAAnimationRemote::Properties::decode):
        (WebKit::PlatformCAAnimationRemote::setBeginTime):
        (WebKit::addAnimationToLayer):

2014-05-15  Tim Horton  <timothy_horton@apple.com>

        [iOS] Incremental updates during scroll-to-top shouldn’t count as “stable” updates
        https://bugs.webkit.org/show_bug.cgi?id=132934

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateVisibleContentRects]):
        If we're in a scroll-to-top programmatic scroll, the update is not stable.
        The last event comes in with _isScrollingToTop false, so we do our stable update.

2014-05-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Compile all installed resources as GResources
        https://bugs.webkit.org/show_bug.cgi?id=131099

        Reviewed by Philippe Normand.

        It avoids conflicts with old WebKit versions, and resources are
        always found even without installing or using environment variables.

        * PlatformGTK.cmake: Add rules to write the xml file with the
        resources depending on the configure options and to generate and
        build the GResources file.

2014-05-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Fix an unit test of ewk_context_url_scheme_register()
        https://bugs.webkit.org/show_bug.cgi?id=132902

        Reviewed by Anders Carlsson.

        This test can be run when CUSTOM_PROTOCOL is enabled. Besides the test needs 
        to check if registered callback function works well.

        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (EWK2ContextTest::schemeRequestCallback):
        (TEST_F):

2014-05-14  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Use default context for ewk_view_add
        https://bugs.webkit.org/show_bug.cgi?id=132936

        Reviewed by Gyuyoung Kim.

        Since r146265, ewk_view_add created new context and it's regression.
        This patch restores the behavior of ewk_view_add to original one.

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

2014-05-14  Maciej Stachowiak  <mjs@apple.com>

        Database Process crashes after loading html5test.com
        https://bugs.webkit.org/show_bug.cgi?id=132938
        <rdar://problem/16241419>

        Reviewed by Ryosuke Niwa.

        * DatabaseProcess/IndexedDB/DatabaseProcessIDBConnection.cpp:
        (WebKit::DatabaseProcessIDBConnection::disconnectedFromWebProcess): Expand comment
        about the null check.
        (WebKit::DatabaseProcessIDBConnection::deleteDatabase): Call disconnectedFromWebProcess
        to pick up its null check and to avoid duplicating code.

2014-05-14  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] The top/bottom edges should not be sticky when restoring the scroll position from the dynamic size update history
        https://bugs.webkit.org/show_bug.cgi?id=132931

        Reviewed by Sam Weinig.

        The goal of dynamicSizeUpdateHistory is to make dynamic resize completely reversible.
        Because of the stick-to-edges heuristics, this was not true near the top and bottom edges.

        For example, start in landscape, scroll the page a bit, then rotate to portrait. Now you have
        a lot more vertical space, and the top edge of the document is at the edge of the scrollview.
        Rotate back to landscape: the position is restored  correct, but it is then overriden by
        the stick-to-edges branch.

        When we restore the position from history, we should only put it back in the valid bounds, skipping
        stick-to-edges entirely.

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

2014-05-14  Tim Horton  <timothy_horton@apple.com>

        Enable IOSurface view snapshots for 10.9+
        https://bugs.webkit.org/show_bug.cgi?id=132932
        <rdar://problem/16900619>

        Reviewed by Dean Jackson.

        * UIProcess/mac/ViewSnapshotStore.h:
        r166005 unintentionally worked around <rdar://problem/16734031>.
        r168689 fixed another bug that caused sometimes randomly white snapshots.
        It's safe to turn on IOSurface view snapshots where purgeability is supported.

2014-05-14  Alexey Proskuryakov  <ap@apple.com>

        Use the correct client in WebPageProxy::unwrapCryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=132924

        Reviewed by Darin Adler.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::unwrapCryptoKey): Match what
        we now do in wrapCryptoKey().

2014-05-14  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Change Element.offset* client* scroll* return type to double.
        https://bugs.webkit.org/show_bug.cgi?id=132895

        Reviewed by Simon Fraser.

        This patch changes Element.offset*, Element.client* and Element.scroll* APIs return
        type from long to double to match the latest CSSOM View Module spec[1].
        Element.offset* and Element.client* do return subpixel values from now on.
        Element.scroll* still return integral values as the scrolling code hasn't adopted to subpixel rendering yet.

        subpixelCSSOMElementMetricsEnabled setting is added to be able to turn this feature on/off
        from WK2 preferences. It toggles the return value from subpixel to floored integral.
        It does not change layout/rendering behavior.

        Reference list of what other browsers do:
        IE: http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx
        Blink: http://www.chromestatus.com/features/5497402177880064
        Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=825607

        [1] http://www.w3.org/TR/2013/WD-cssom-view-20131217/

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetSubpixelCSSOMElementMetricsEnabled):
        (WKPreferencesGetSubpixelCSSOMElementMetricsEnabled):
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-05-14  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Expose the viewport meta tag width on the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=132926
        <rdar://problem/16892115>

        Reviewed by Sam Weinig.

        Safari requires the viewport meta tag width for legacy stuff on WebApps. Just send it
        over to the UIProcess when it changes.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _setViewportMetaTagWidth:]):
        (-[WKWebView _viewportMetaTagWidth]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didChangeViewportMetaTagWidth):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::viewportMetaTagWidthDidChange):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportPropertiesDidChange):

2014-05-13  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make view debugging easier
        https://bugs.webkit.org/show_bug.cgi?id=132892

        Reviewed by Tim Horton.
        
        Enhance -[WKCompositingView description] to show WebKit-related information
        which is useful when dumping a window's UIView hierarchy.
        
        Also have WKTransformView and WKRemoteView inherit from WKCompositingView,
        and thereby get the hitTest:withEvent: override for free, as well as better dumping.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (-[WKCompositingView description]):
        (-[WKTransformView hitTest:withEvent:]): Deleted.
        (-[WKRemoteView hitTest:withEvent:]): Deleted.

2014-05-14  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fixed positioned element must relayout correctly before sending resize events to the page
        https://bugs.webkit.org/show_bug.cgi?id=132920
        <rdar://problem/16836866>

        Reviewed by Simon Fraser.

        During the dynamic resize operation, we do not update the fixed position elements because
        it is a very hard problem on the UI Process side.

        When the animation finishes, the fixed positioned rect is recomputed on the UIProcess and pushed
        to the WebProcess.

        The problem is sending the rect after the animation is too late, the content can observe the fixed
        elements layout through JavaScript and would get the old size.

        This patch fixes the issue updating the CustomFixedPositionLayoutRect on the WebProcess before
        notifying the content of the resize.
        First, we layout the content to the new fixed layout size to get the new content size.
        Then, we compute the new FixedPositionedLayoutRect with FrameView's viewportConstrainedObjectsRect(),
        this use the real content size and our estimated unobscured content rect.

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

2014-05-14  Enrica Casucci  <enrica@apple.com>

        REGRESSION(WK2): Many pages have very wrong text size after rotating.
        https://bugs.webkit.org/show_bug.cgi?id=132893
        <rdar://problem/16806958>

        Reviewed by Benjamin Poulain.

        Whenever our viewport width changes we must reset text autosizing
        on the renderer.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPage::setMinimumLayoutSizeForMinimalUI):
        (WebKit::WebPage::resetTextAutosizingBeforeLayoutIfNeeded):
        (WebKit::WebPage::dynamicViewportSizeUpdate):

2014-05-14  Alex Christensen  <achristensen@webkit.org>

        Use references instead of pointers with ResourceLoadTiming.
        https://bugs.webkit.org/show_bug.cgi?id=132846

        Reviewed by Alexey Proskuryakov.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceResponse>::encode):
        (IPC::ArgumentCoder<ResourceResponse>::decode):
        Use references instead of pointers and null checks.

2014-05-14  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        Remove CSS_STICKY_POSITION guards
        https://bugs.webkit.org/show_bug.cgi?id=132676

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-05-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Add ewk_view_fixed_layout_size_set|get()
        https://bugs.webkit.org/show_bug.cgi?id=132811

        Reviewed by Christophe Dumez.

        Some EFL applications need to set size of fixed layout when enabling fixed layout.
        This APIs can pass ownership regarding the size of fixed layout to application side.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_layout_fixed_size_set):
        (ewk_view_layout_fixed_size_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2014-05-13  Simon Fraser  <simon.fraser@apple.com>

        Fix "ASSERTION FAILED: m_representation == PlatformLayerRepresentation" with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=132899

        Reviewed by Beth Dakin.
        
        The new InsetClipLayer and ContentShadowLayer members on scrolling nodes
        need to be correctly encoded/decoded for UI-side compositing, and dumped
        correctly.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):
        (WebKit::RemoteScrollingTreeTextStream::dump):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):

2014-05-13  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKFoundation.h:
        Make sure to include Availability.h

2014-05-13  Beth Dakin  <bdakin@apple.com>

        REGRESSION (topContentInset): Searching through Facebook Messenger's chat causes 
        scrolling in News Feed
        https://bugs.webkit.org/show_bug.cgi?id=132889
        -and corresponding-
        <rdar://problem/16715716>

        Reviewed by Simon Fraser.

        Re-name scrollOffsetRelativeToDocument() to 
        documentScrollPositionRelativeToViewOrigin().
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::rectsForTextMatches):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):

2014-05-13  Dean Jackson  <dino@apple.com>

        [iOS] Page scale update messages for media controls should only fire at the end of zooming
        https://bugs.webkit.org/show_bug.cgi?id=132857
        <rdar://problem/16631009>

        Reviewed by Simon Fraser.

        As the user was zooming, the media controls that responded
        to the page scale (and resized themselves) would do so
        slightly out of sync with the screen refreshes, and it looked
        terrible.

        We already know if a pageScale change is happening inside
        a gesture using the inStableState property of the visibleContentRectUpdateInfo.
        Simply pass this along to WebCore::Page.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects): Pass inStableState onto the
        WebCore::Page. Note that we have to send this message even if the
        scale has not changed, since the last changing update might not have
        been stable.

2014-05-13  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] When the secondary UIScrollView delegates respond to callbacks, delay the state change until both delegates have finished
        https://bugs.webkit.org/show_bug.cgi?id=132849
        <rdar://problem/16863716>

        Reviewed by Anders Carlsson.

        When there are two delegates responding to UIScrollView changes, there was often an intermediate invalid
        state forwarded to the UIProcess.

        For example, on scroll, WKWebView would update the state based on the current obscured insets in response to
        delegate callbacks.
        After that update, Safari would modify the insets, thus updating the state again.
        The first state changed by WKWebView is incomplete, and should never have been set.

        This patch works around the issue by delaying visible update rect in those cases.

        When the two delegates of WKScrollView respond to the same selector, WKScrollView invokes 
        [UIWebView _willInvokeUIScrollViewDelegateCallback] on entry, and
        [UIWebView _didInvokeUIScrollViewDelegateCallback] on exit.

        Between those two calls, WKWebView does not forward the new UI state to the WebProcess.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _willInvokeUIScrollViewDelegateCallback]):
        (-[WKWebView _didInvokeUIScrollViewDelegateCallback]):
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollViewDelegateForwarder initWithInternalDelegate:externalDelegate:]):
        (-[WKScrollViewDelegateForwarder forwardInvocation:]):
        (-[WKScrollView setInternalDelegate:]):

2014-05-13  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Remove the _extendedBackgroundExclusionInsets SPI
        https://bugs.webkit.org/show_bug.cgi?id=132848
        <rdar://problem/16875093>

        Reviewed by Darin Adler.

        The SPI is no longer needed by Safari.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _endAnimatedResize]):
        (updateTopAndBottomExtendedBackgroundExclusionIfNecessary): Deleted.
        (-[WKWebView _setExtendedBackgroundExclusionInsets:]): Deleted.
        (-[WKWebView _extendedBackgroundExclusionInsets]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-05-13  Samuel White  <samuel_white@apple.com>

        AX: Hit testing not accounting for top content inset.
        https://bugs.webkit.org/show_bug.cgi?id=132876

        Reviewed by Chris Fleizach.

        Updated accessibilityHitTest: to account for top content inset when converting from screen coords to WebKit coords.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2014-05-13  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Zooming to text field leaves it partially hidden by the form assistant.
        https://bugs.webkit.org/show_bug.cgi?id=132879
        <rdar://problem/16318049>

        Reviewed by Benjamin Poulain.

        Adds the heuristics to zoom and scroll to ensure the element being focused
        is fully visible and its text readable.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToFocusRect:WebCore::selectionRect:WebCore::fontSize:minimumScale:maximumScale:allowUserScaling:forceScroll:]):
        (-[WKWebView _keyboardChangedWithInfo:adjustScrollView:]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _zoomToFocusRect:selectionRect:fontSize:minimumScale:maximumScale:allowUserScaling:forceScroll:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView _startAssistingNode:userIsInteracting:userObject:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2014-05-13  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS Simulator build.

        * UIProcess/mac/ViewSnapshotStore.h:

2014-05-13  Tim Horton  <timothy_horton@apple.com>

        Speculative build fix for iOS.

        * UIProcess/ios/WebMemoryPressureHandlerIOS.cpp: Removed.
        * UIProcess/ios/WebMemoryPressureHandlerIOS.mm: Added.
        (WebKit::WebMemoryPressureHandler::shared):
        (WebKit::WebMemoryPressureHandler::WebMemoryPressureHandler):
        * WebKit2.xcodeproj/project.pbxproj:
        Make WebMemoryPressureHandlerIOS Obj-C.

2014-05-13  Anders Carlsson  <andersca@apple.com>

        Another follow-up build fix.

        * Shared/API/Cocoa/WKFoundation.h:

2014-05-13  Anders Carlsson  <andersca@apple.com>

        Another follow-up build fix.

        * Shared/API/Cocoa/WKFoundation.h:

2014-05-13  Anders Carlsson  <andersca@apple.com>

        Follow-up fix.

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction _initWithNavigationActionData:WebKit::]):
        (-[WKNavigationAction _isUserInitiated]):

2014-05-13  Anders Carlsson  <andersca@apple.com>

        Add -[WKNavigationAction modifierFlags] and -[WKNavigationAction buttonNumber]
        https://bugs.webkit.org/show_bug.cgi?id=132880
        <rdar://problem/16901354>

        Reviewed by Dan Bernstein.

        * Shared/API/Cocoa/WKFoundation.h:
        Add typedef for older systems.

        * UIProcess/API/Cocoa/WKNavigationAction.h:
        Add -[WKNavigationAction modifierFlags] and -[WKNavigationAction buttonNumber]

        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toWKNavigationType):
        This can be static now.

        (toNSEventModifierFlags):
        Helper to convert WebEvent::Modifiers to NSEventModifierFlags.

        (toNSButtonNumber):
        Helper to convert WebMouseEvent::Button to an AppKit button number.

        (-[WKNavigationAction initWithNavigationActionData:WebKit::]):
        New initializer that takes a NavigationActionData and fills in the relevant ivars from it.

        (-[WKNavigationAction _isUserInitiated]):
        Return the new ivar.

        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        Remove readwrite overrides.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        Use initWithNavigationActionData:

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        Use initWithNavigationActionData:

2014-05-13  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Swipe): Encode snapshots as JPEG on some platforms
        https://bugs.webkit.org/show_bug.cgi?id=127788
        <rdar://problem/15928241>

        Reviewed by Anders Carlsson.

        Allow JPEG snapshots. Compression is done asynchronously.
        Enable JPEG snapshots (for now) on all PLATFORM(MAC).
        We'll switch back to IOSurface snapshots on 10.9+ after <rdar://problem/16734031> is resolved.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        Store the image size on the ViewSnapshot.
        Move IOSurface-related code to ViewSnapshotStore.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Adopt asLayerContents().

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::retrieveSnapshotForItem):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Adopt asLayerContents().
        Put the snapshot on the right layer (the parent of the snapshot image layer);
        if it's on the snapshot image layer itself, if there is no image, the shadow
        is displayed on top of the white placeholder.
        Only reset snapshot purgeability if we're using IOSurface snapshots.

        * UIProcess/mac/ViewSnapshotStore.h:
        Add a bunch of macros to allow us to switch the snapshot backing store implementation.

        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::~ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        If takeViewSnapshot() fails, don't remove the existing snapshot.

        (WebKit::createIOSurfaceFromImage):
        (WebKit::compressImageAsJPEG):
        (WebKit::ViewSnapshotStore::reduceSnapshotMemoryCost):
        (WebKit::ViewSnapshotStore::didCompressSnapshot):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::asLayerContents):
        Asynchronously compress snapshots - if we're using JPEG snapshots - for a
        very large memory win (~20-30x).

2014-05-12  Darin Adler  <darin@apple.com>

        Make a few icon database improvements
        https://bugs.webkit.org/show_bug.cgi?id=132812

        Reviewed by Brady Eidson.

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseCopyIconDataForPageURL): Moved the actual implementation of this
        out of the bindings into the WebIconDatabase class.

        * UIProcess/API/C/WKIconDatabase.h: Fixed argument names that were inconsistent.

        * UIProcess/WebIconDatabase.cpp: Removed unneeded includes.
        (WebKit::WebIconDatabase::create): Pass a reference instead of a pointer.
        (WebKit::WebIconDatabase::WebIconDatabase): Take a reference instead of a pointer.
        (WebKit::WebIconDatabase::invalidate): Use nullptr.
        (WebKit::WebIconDatabase::setDatabasePath): Use make_unique.
        (WebKit::WebIconDatabase::setIconDataForIconURL): Removed unneeded local variable.
        (WebKit::WebIconDatabase::imageForPageURL): Use nullptr.
        (WebKit::WebIconDatabase::nativeImageForPageURL): Ditto.
        (WebKit::WebIconDatabase::didFinishURLImport): Use a modern for loop.
        (WebKit::WebIconDatabase::iconDataForPageURL): Added. Moved this here from
        WKIconDatabase.cpp, but also changed to use createWithoutCopying to avoid making
        another copy of the data for each icon.

        * UIProcess/WebIconDatabase.h: Removed unneeded includes. Derive from
        IconDatabaseClient privately. Use nullptr. Added iconDataForPageURL member
        function. Use a reference for the constructor argument. Use override for
        virtual functions. Use unique_ptr instead of OwnPtr.

2014-05-12  Mark Lam  <mark.lam@apple.com>

        WebKit2 on iOS needs to capture the main thread's floating point environment.
        <https://webkit.org/b/132755>

        Reviewed by Geoffrey Garen.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::platformInitialize):
        - Call FloatingPointEnv::enableNeededFloatingPointModes() to initialize
          the ARMv7 FP env to support denormalized numbers.
        - Call FloatingPointEnv::saveMainThreadEnvironment() to capture the main thread
          fp env.

2014-05-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL][WK2] Fix ewk_view_navigation test in EWK2ViewTest 
        https://bugs.webkit.org/show_bug.cgi?id=132817

        Reviewed by Dirk Schulze.

        To load test html pages, call ewk_view_uri_set() instead of EWK2UnitTestServer.
        Besides this patch adds test html page for ewk_view_navigation unit test.

        * UIProcess/API/efl/tests/resources/Page1.html: Added.
        * UIProcess/API/efl/tests/resources/Page2.html: Added.
        * UIProcess/API/efl/tests/resources/Page3.html: Added.
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2014-05-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, EFL build fix since r168625.

        * UIProcess/efl/WebContextEfl.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory): Remove const keyword.

2014-05-12  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fuzzy tiles on some sites on loading
        https://bugs.webkit.org/show_bug.cgi?id=132847
        <rdar://problem/16816178>

        Reviewed by Benjamin Poulain.
        
        PlatformCALayerRemoteTiledBacking overrode setContentsScale() but not contentsScale(),
        causing us to early-return from GraphicsLayerCA::updateContentsScale() and leave the
        scale wrong. Fix by overriding contentsScale() also.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::contentsScale):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-05-12  Tim Horton  <timothy_horton@apple.com>

        Triple-buffer RemoteLayerBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=132786
        <rdar://problem/16877498>

        Reviewed by Simon Fraser.

        We need three buffers because we're currently unable to synchronize
        with the render server to swap when they're not in use, so we were
        throwing surfaces away far too frequently.

        This hugely reduces time spent in IOSurface::create on various repaint benchmarks.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::hasFrontBuffer):
        (WebKit::RemoteLayerBackingStore::volatility): Deleted.
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::clearBackingStore):
        (WebKit::RemoteLayerBackingStore::encode):
        (WebKit::RemoteLayerBackingStore::decode):
        (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer):
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::applyBackingStoreToLayer):
        (WebKit::RemoteLayerBackingStore::setBufferVolatility):
        (WebKit::RemoteLayerBackingStore::Buffer::discard):
        (WebKit::RemoteLayerBackingStore::setVolatility): Deleted.
        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        (WebKit::RemoteLayerBackingStoreCollection::purgeabilityTimerFired):
        Put the ShareableBitmap/IOSurface and a volatility bit in a Buffer struct.
        Also factor out "throw away this buffer and put it in the pool" into Buffer::discard().
        We keep a volatility bit because querying IOSurface purgeability is expensive,
        and we have a guarantee that any changes will happen in the Web process
        and go through this class (the lack of this guarantee in most cases is why I'm not
        putting this bit in WebCore::IOSurface itself).

        Make it so that each buffer's volatility can be adjusted individually
        by setBufferVolatility(), and adopt in RemoteLayerBackingStoreCollection.

        Add a third buffer, m_secondaryBackBuffer, which will swap with the back buffer
        before swapping front and back if the back buffer (soon to be the front buffer)
        is still in use by the render server. This means that we will almost never
        have to throw away a surface because it's in use (and conversely never need
        to make a new surface).

        Adjust RemoteLayerBackingStoreCollection to make secondary back surfaces purgeable
        more aggressively than others.

2014-05-12  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r165972): Can't type into text fields in Flash
        https://bugs.webkit.org/show_bug.cgi?id=132840
        <rdar://problem/16671969>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm: (-[WKView inputContext]): Restore a function that
        got accidentally lost when adding async text input code.

2014-05-12  Chris Fleizach  <cfleizach@apple.com>

        AX: .js dialogs shown in unload while AX is running crash WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=123828

        Reviewed by Anders Carlsson.

        Utilize platform API to inform AX clients when the WebProcess will suspend and resume.
        This allows us to avoid having special behavior for accessibility when the WebProcess needs
        to wait on a reply.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::waitForSyncReply):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::willSendSyncMessage):
        (IPC::Connection::didReceiveSyncReply):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):

2014-05-12  Alex Christensen  <achristensen@webkit.org>

        Progress on web timing.
        https://bugs.webkit.org/show_bug.cgi?id=132574

        Reviewed by Alexey Proskuryakov.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceResponse>::encode):
        (IPC::ArgumentCoder<ResourceResponse>::decode):
        Transfer ResourceLoadTiming values if they exist.

2014-05-12  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose WebPage::usesEphemeralSession to the bundle
        https://bugs.webkit.org/show_bug.cgi?id=132836

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _usesNonPersistentWebsiteDataStore]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2014-05-12  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(168625): [GTK] build broken due to WKContextSetLocalStorageDirectory
        https://bugs.webkit.org/show_bug.cgi?id=132831

        Unreviewed GTK build fix.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        This is now a static member function.

2014-05-12  Anders Carlsson  <andersca@apple.com>

        WKWebViewConfiguration should fill in the blanks
        https://bugs.webkit.org/show_bug.cgi?id=132832
        <rdar://problem/16886408>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration init]):
        (-[WKWebViewConfiguration _validate]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h:

2014-05-12  Anders Carlsson  <andersca@apple.com>

        WKWebView should default to _backgroundExtendsBeyondPage = YES
        https://bugs.webkit.org/show_bug.cgi?id=132829
        <rdar://problem/16886364>

        Reviewed by Beth Dakin.

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

2014-05-12  Anders Carlsson  <andersca@apple.com>

        Pass local storage directory to StorageManager::create
        https://bugs.webkit.org/show_bug.cgi?id=132827

        Reviewed by Tim Horton.

        Since we know the local storage directory at creation time and we know it never changes,
        we can get rid of setLocalStorageDirectory and just pass the local storage directory at creation time.

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

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

        Replace WKContextSetLocalStorageDirectory with a context configuration getter/setter
        https://bugs.webkit.org/show_bug.cgi?id=132809

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetLocalStorageDirectory): Deleted.

        * UIProcess/API/C/WKContextConfigurationRef.cpp:
        (WKContextConfigurationCopyLocalStorageDirectory):
        (WKContextConfigurationSetLocalStorageDirectory):
        * UIProcess/API/C/WKContextConfigurationRef.h:
        Add getters and setters for the local storage directory.

        * UIProcess/API/C/WKContextPrivate.h:
        Remove WKContextSetLocalStorageDirectory.

        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        Call WebContext::applyPlatformSpecificConfigurationDefaults.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        Call WebContext::applyPlatformSpecificConfigurationDefaults (for now).

        * UIProcess/APIContextConfiguration.cpp:
        (API::ContextConfiguration::webContextConfiguration):
        Set the local storage. Also, call WebContext::applyPlatformSpecificConfigurationDefaults.

        * UIProcess/APIContextConfiguration.h:
        (API::ContextConfiguration::injectedBundlePath):
        This should be const.

        (API::ContextConfiguration::localStorageDirectory):
        (API::ContextConfiguration::setLocalStorageDirectory):
        Add getter and setter.

        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::setLocalStorageDirectory):
        ASSERT that the path isn't null.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::applyPlatformSpecificConfigurationDefaults):
        New helper function that will fill in platform specific defaults for empty parameters.

        (WebKit::WebContext::WebContext):
        Get the local storage directory from the configuration.

        (WebKit::WebContext::setLocalStorageDirectory): Deleted.
        (WebKit::WebContext::localStorageDirectory): Deleted.
        These are no longer needed.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultLocalStorageDirectory):
        This should be a static member function.

2014-05-12  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        Typo fix in generate-forwarding-headers
        https://bugs.webkit.org/show_bug.cgi?id=132820

        Reviewed by Anders Carlsson.

        * Scripts/generate-forwarding-headers.pl:
        (collectFrameworkHeaderPaths):
        
2014-05-12  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        [EFL] TLSErrors do not cause page load to fail when not ignored
        https://bugs.webkit.org/show_bug.cgi?id=131104

        Reviewed by Gyuyoung Kim.

        Added EFL unit test for the bug https://bugs.webkit.org/show_bug.cgi?id=121548

        * UIProcess/API/efl/tests/test_ewk2_ssl.cpp: Added new test: ewk_ssl_bad_cert_redirect_https_to_http

2014-05-11  Gordon Sheridan  <gordon_sheridan@apple.com>

        Expose a function to copy favicon data without image conversion.
        https://bugs.webkit.org/show_bug.cgi?id=132805

        Reviewed by Darin Adler.

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseCopyIconDataForPageURL):
        Add a function to copy the data from the image of a favicon for an associated page url.

        * UIProcess/API/C/WKIconDatabase.h:
        Declare WKIconDatabaseCopyIconDataForPageURL.

2014-05-11  Seongjun Kim  <isAir@company100.com>

        REGRESSION(r168603): [GTK] Build broken.
        https://bugs.webkit.org/show_bug.cgi?id=132810

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):
        Construct a WebContextConfiguration object and pass it to WebContext::create.

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

        Remove local storage directory and sandbox extension from WebProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=132808

        Reviewed by Beth Dakin.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-05-11  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, CMake build fix after r168603

        Add APIContextConfiguration.cpp and WKContextConfigurationRef.cpp to the source list.

        * CMakeLists.txt:

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

        Add a WKContextConfigurationRef object and make the injected bundle path part of the configuration
        https://bugs.webkit.org/show_bug.cgi?id=132806
        <rdar://problem/16830143>

        Reviewed by Beth Dakin.

        Many setters on WKContextRef really only make sense to set early on, so move to a pattern where we create a
        configuration object, a WKContextConfiguration which WKContexts can be created from. Add the injected bundle path
        as a configuration property. More setters will follow.

        * Shared/API/c/WKBase.h:
        Add WKContextConfigurationRef.

        * Shared/APIObject.h:
        Add ContextConfiguration enum declaration.

        * UIProcess/API/C/WKAPICast.h:
        Handle WKContextConfigurationRef.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextCreate):
        Create an empty WKContextConfigurationRef object and pass it to WKContextCreateWithConfiguration.

        (WKContextCreateWithInjectedBundlePath):
        Create a WKContextConfigurationRef object, set its bundle path and pass the configuration to WKContextCreateWithConfiguration.

        (WKContextCreateWithConfiguration):
        Convert the WKContextConfigurationRef object to a WebContextConfiguration and pass it to WebContext::create.

        * UIProcess/API/C/WKContext.h:
        Add WKContextCreateWithConfiguration.

        * UIProcess/API/C/WKContextConfigurationRef.cpp: Added.
        (WKContextConfigurationCreate):
        Create an API::ContextConfiguration object.

        (WKContextConfigurationCopyInjectedBundlePath):
        Return the injected bundle path.

        (WKContextConfigurationSetInjectedBundlePath):
        Set the injected bundle path.

        * UIProcess/API/C/WKContextConfigurationRef.h: Added.
        New C SPI header.
        
        * UIProcess/API/Cocoa/WKProcessGroup.mm:
        (-[WKProcessGroup initWithInjectedBundleURL:]):
        Construct a WebContextConfiguration object and pass it to WebContext::Create.
    
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _initWithConfiguration:]):
        Construct a WebContextConfiguration object and pass it to WebContext::Create.

        * UIProcess/APIContextConfiguration.cpp: Added.
        New API::ContextConfiguration object.

        (API::ContextConfiguration::webContextConfiguration):
        Construct a WebContextConfiguration struct from our current configuration.

        * UIProcess/APIContextConfiguration.h: Added.
        
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::create):
        Pass the WebContextConfiguration to the constructor.

        (WebKit::WebContext::WebContext):
        Set the injected bundle path from the WebContextConfiguration object.

        * UIProcess/WebContext.h:
        Change the WebContext constructor and create function to take a WebContextConfiguration object.

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

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

        [WK2] URTBF after r168585.

        * Platform/IPC/Connection.h:
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::terminate):

2014-05-10  Tim Horton  <timothy_horton@apple.com>

        [WKWebView _updateScrollViewBackground] churns UI-and-CGColors while repainting
        https://bugs.webkit.org/show_bug.cgi?id=132793
        <rdar://problem/16877870>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]):
        Don't bypass the cache and make a copy of the CGColor just to set its alpha.
        Cache the last color and don't bother creating a UIColor nor updating the
        color on our views if it hasn't changed.

2014-05-10  Tim Horton  <timothy_horton@apple.com>

        Implement -forwardingTargetForSelector on WKScrollViewDelegateForwarder
        https://bugs.webkit.org/show_bug.cgi?id=132790
        <rdar://problem/16877802>

        Reviewed by Dan Bernstein.

        * UIProcess/ios/WKScrollView.mm:
        (-[WKScrollViewDelegateForwarder forwardingTargetForSelector:]):
        If only one of the delegates will respond to a selector,
        we can return it from forwardingTargetForSelector: to avoid
        NSInvocation overhead.

2014-05-10  Dan Bernstein  <mitz@apple.com>

        [Mac] Some targets that link or soft-link WebKit.framework don't depend on it
        https://bugs.webkit.org/show_bug.cgi?id=132776

        Reviewed by Darin Adler.

        * WebKit2.xcodeproj/project.pbxproj:

2014-05-10  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Move the ownership of EwkSettings from EwkView to EwkPageGroup
        https://bugs.webkit.org/show_bug.cgi?id=132771

        Reviewed by Gyuyoung Kim.

        Moved ownership of EwkSettings from EwkView to EwkPageGroup.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        (EwkView::settings): Deleted.
        * UIProcess/API/efl/ewk_page_group.cpp:
        (EwkPageGroup::EwkPageGroup):
        * UIProcess/API/efl/ewk_page_group_private.h:
        (EwkPageGroup::settings):
        * UIProcess/API/efl/ewk_settings_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_settings_get):

2014-05-10  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] REGRESSION (r168493): Canvasmark 2013 benchmark always hits the RELEASE_ASSERT in RemoteLayerTreeDrawingArea::flushLayers()
        https://bugs.webkit.org/show_bug.cgi?id=132783
        <rdar://problem/16877326>

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::flush):
        There's a race window between the BackingStoreFlusher sending the new
        layer tree to the UI process and updating m_hasFlushed where we can
        get a reply back in (on the Web process main thread) from the UI process
        that we committed the new layer tree (didUpdate).
        This will cause the RELEASE_ASSERT in flushLayers() to fire incorrectly.
        Since the RELEASE_ASSERT is there only to avoid painting garbage, move
        our code to set m_hasFlushed=true to after we finish calling CGContextFlush
        on all of the contexts, instead of after we send the layer tree commit message,
        which will remove the race entirely.

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

        ASSERTION FAILED: !m_connection under RunJavaScriptAlert
        https://bugs.webkit.org/show_bug.cgi?id=132792
        <rdar://problem/16691138>

        Reviewed by Dan Bernstein.

        Detect if someone implementing a UI delegate method with a completion handler never calls the completion
        handler and raise an exception instead of asserting.

        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::CompletionHandlerCallChecker::create):
        (WebKit::CompletionHandlerCallChecker::~CompletionHandlerCallChecker):
        (WebKit::CompletionHandlerCallChecker::didCallCompletionHandler):
        (WebKit::CompletionHandlerCallChecker::CompletionHandlerCallChecker):
        (WebKit::CompletionHandlerCallChecker::classImplementingDelegateMethod):
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):

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

        Use xpc_connection_kill for killing child processes where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=132788
        <rdar://problem/16664185>

        Reviewed by Sam Weinig.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::kill):
        * Platform/IPC/mac/XPCPtr.h:
        (IPC::XPCPtr::operator bool):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::terminate):

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

        WebKit2 is leaking an xpc_connection per web process it creates
        https://bugs.webkit.org/show_bug.cgi?id=132785
        <rdar://problem/14912160>

        Reviewed by Sam Weinig.

        Introduce an IPC::XPCPtr smart pointer class and use it for XPC connections inside Connection::Identifier and Connection itself.

        Make sure we always adopt any connections that are created.

        * DatabaseProcess/EntryPoint/mac/XPCService/DatabaseServiceEntryPoint.mm:
        (DatabaseServiceInitializer):
        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (WebKit::NetworkServiceInitializerDelegate::NetworkServiceInitializerDelegate):
        (NetworkServiceInitializer):
        * Platform/IPC/Connection.h:
        (IPC::Connection::Identifier::Identifier):
        (IPC::Connection::xpcConnection):
        * Platform/IPC/mac/ConnectionMac.mm:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::platformInitialize):
        (IPC::Connection::getAuditToken):
        * Platform/IPC/mac/XPCPtr.h: Added.
        (IPC::XPCPtr::XPCPtr):
        (IPC::XPCPtr::~XPCPtr):
        (IPC::XPCPtr::get):
        (IPC::XPCPtr::operator!):
        (IPC::XPCPtr::operator=):
        (IPC::adoptXPC):
        * PluginProcess/EntryPoint/mac/XPCService/PluginServiceEntryPoint.mm:
        (WebKit::PluginServiceInitializerDelegate::PluginServiceInitializerDelegate):
        (PluginServiceInitializer):
        * Shared/EntryPointUtilities/mac/LegacyProcess/ChildProcessMain.mm:
        (WebKit::BootstrapMain):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializerDelegate::XPCServiceInitializerDelegate):
        (WebKit::XPCServiceInitializer):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::hasEntitlement):
        (WebKit::XPCServiceInitializerDelegate::isClientSandboxed):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (WebKit::XPCServiceEventHandler):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        * UIProcess/Launcher/ProcessLauncher.cpp:
        (WebKit::ProcessLauncher::didFinishLaunchingProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/EntryPoint/mac/XPCService/WebContentServiceEntryPoint.mm:
        (WebContentServiceInitializer):

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

        Simplify createDataAvailableSource
        https://bugs.webkit.org/show_bug.cgi?id=132782
        <rdar://problem/16815202>

        Reviewed by Sam Weinig.

        * Platform/IPC/mac/ConnectionMac.mm: Renamed from Source/WebKit2/Platform/IPC/mac/ConnectionMac.cpp.
        Rename to make this Objective-C++ so we get the lambda-to-block conversion.

        (IPC::createDataAvailableSource):
        Make this a function template and just pass the function directly to dispatch_source_set_event_handler.

        (IPC::Connection::open):
        Use lambdas instead of WTF::bind, so we'll make sure the connection is kept alive.

        * WebKit2.xcodeproj/project.pbxproj:
        Update for ConnectionMac.cpp to ConnectionMac.mm rename.

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

        Follow-up fix.

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        (-[WKNavigationResponse isForMainFrame]):
        Use a slightly better name.

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

        Make -[WKNavigationResponse frame] SPI and only expose -[WKNavigationResponse isMainFrame]
        https://bugs.webkit.org/show_bug.cgi?id=132781
        <rdar://problem/16868319>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
        (-[WKNavigationResponse description]):
        (-[WKNavigationResponse isMainFrameNavigation]):
        (-[WKNavigationResponse _frame]):
        (-[WKNavigationResponse frame]): Deleted.
        (-[WKNavigationResponse setFrame:]): Deleted.
        * UIProcess/API/Cocoa/WKNavigationResponseInternal.h:
        * UIProcess/API/Cocoa/WKNavigationResponsePrivate.h: Added.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):
        * WebKit2.xcodeproj/project.pbxproj:

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

        [Cocoa] Remove a deprecated bundle form delegate method now that no one implements it
        https://bugs.webkit.org/show_bug.cgi?id=132769

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]):

2014-05-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix bugs exposed by r168556
        https://bugs.webkit.org/show_bug.cgi?id=132768

        Reviewed by Ryosuke Niwa.

        Fix two bugs exposed by r168556.
        1) We were only changing the page scale factor when the scale was not adjusted by live
           resize. The idea was that the scale would either be the same (responsive content)
           or that it would be defined by the next viewContentRectUpdate.

           Now that we also send resize and scroll events, we must always update the scale since
           it affects some APIs observable from JavaScript (like scrolling bounds).

        2) Internally, Page's scaleFactor is stored as a float and not double. The rounding error
           were causing us to send DynamicViewportUpdateChangedTarget() in cases were there is no change
           of target.

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

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

        [EFL][WK2] Close icondatabase when EwkFaviconDatabase is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=132767

        Reviewed by Gyuyoung Kim.

        IconDatabase should be closed explicitly.

        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::~EwkFaviconDatabase):

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

        Another build fix.

        * mac/MigrateHeadersToWebKit2.make:
        Don't migrate the WKPreferences.h header, WebKit2 provides its own header.

2014-05-09  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Reset the scroll position on the first frame after didCommitLoad
        https://bugs.webkit.org/show_bug.cgi?id=132765

        Reviewed by Tim Horton.

        Since WebCore does not update our scroll view on load, we need to do that ourself.

        In case where we need to restore the state from the history, RemoteLayerTreeDrawingAreaProxy
        will always invoke the scrolling after didCommitLayerTree() (since r167916).
        Consequently, it is now safe again to reset the scroll position ourself on the first frame.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLoadForMainFrame]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLoadForMainFrame]):

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

        Update availability macros
        https://bugs.webkit.org/show_bug.cgi?id=132763
        <rdar://problem/15311800>

        Reviewed by Dan Bernstein.

        * Configurations/WebKit.xcconfig:
        * Shared/API/Cocoa/WKBrowsingContextHandle.h:
        * Shared/API/Cocoa/WKFoundation.h:
        * Shared/API/Cocoa/_WKFrameHandle.h:
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.h:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKBackForwardListPrivate.h:
        * UIProcess/API/Cocoa/WKBrowsingContextController.h:
        * UIProcess/API/Cocoa/WKBrowsingContextGroup.h:
        * UIProcess/API/Cocoa/WKConnection.h:
        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationData.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationResponse.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKProcessGroup.h:
        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKTypeRefWrapper.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_OPTIONS):
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKElementAction.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/_WKScriptWorld.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMDocument.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMElement.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMNode.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMRange.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMText.h:
        * WebProcess/InjectedBundle/API/mac/WKDOMTextIterator.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
        * mac/rewrite-availability-macros.sh: Added.

2014-05-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Allow Remote Inspector to entitlement check UIProcess through WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=132409

        Reviewed by Timothy Hatcher.

        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::parentProcessIdentifier): Deleted.
        pid per debuggable is no longer needed.

        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        Immediately pass the parent process pid and audit_token on
        to the RemoteInspector singleton when the process is created
        so that it can be sent to webinspectord.

2014-05-09  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2): Tapping in search field at wikipedia.org doesn’t bring up the keyboard.
        https://bugs.webkit.org/show_bug.cgi?id=132761
        <rdar://problem/16857491>

        Reviewed by Benjamin Poulain.

        The interactionAssistant accessor should never create an instance of
        UIWKTextInteractionAssistant, but simply return the value of _textInteractionAssistant.
        The text interaction assistant should only be created when needed so that the rest of
        the code could reliably check if we are interacting with text or not.

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

2014-05-09  Simon Fraser  <simon.fraser@apple.com>

        Fix some issues with scrolling tree logging
        https://bugs.webkit.org/show_bug.cgi?id=132762

        Reviewed by Tim Horton.
        
        Only dump viewport constraints when they change, and dump the primary layer on
        scrolling nodes.
        
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingTreeTextStream::dump): Dump the primary layer.

2014-05-09  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fixed elements can go outside the document on pinching
        https://bugs.webkit.org/show_bug.cgi?id=132759
        <rdar://problem/16870835>

        Reviewed by Benjamin Poulain.
        
        Constrain the rect used to position fixed position objects when pinching (when
        the scale goes below the minimumScale). Do so in such a way that there's a smooth
        transition between rubber-banding and pinching.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateScrollViewBackground]): Use a nicer form for std::max<>.
        (-[WKWebView _updateVisibleContentRects]): Pass the minimum scale.
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _updateVisibleContentRects]): Ditto.
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (adjustedUnexposedEdge): Helper to adjust the left/top.
        (adjustedUnexposedMaxEdge): Helper to adjust the right/bottom.
        (fixedPositionRectFromExposedRect):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:minimumScale:inStableState:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]): Deleted.

2014-05-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering[iOS]: Top bar on apple.com/support jiggles when the swoosh animates.
        https://bugs.webkit.org/show_bug.cgi?id=132750
        <rdar://problem/16803281>

        Reviewed by Simon Fraser.

        This patch ensures that GraphicsLayer and RemoteLayerBackingStore have the same dimensions.
        
        Remove integral enclosing when we set the size on RemoteLayerBackingStore. It makes the layer's size
        different from the backingstore when the passed value is fractional.
        We scale and integral round this value to size the shareable bitmap later. Rounding ensures that
        the final size value matches what we calculated at GraphicsLayerCA::updateGeometry()

        Currently not testable.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::size):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::ensureBackingStore):
        (WebKit::RemoteLayerBackingStore::setNeedsDisplay): use enclosing here to ensure we cover the entire backing store.
        (WebKit::RemoteLayerBackingStore::display):
        (WebKit::RemoteLayerBackingStore::drawInContext):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateBackingStore):

2014-05-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Set up the resize events
        https://bugs.webkit.org/show_bug.cgi?id=132726

        Reviewed by Darin Adler and Simon Fraser.

        Wire the UI Process updates to FrameView to send the resize events appropriately.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::isChangingObscuredInsetsInteractively):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:isChangingObscuredInsetsInteractively:]):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]): Deleted.
        Pass down the status of the content insets with the view update to main frame's FrameView
        when needed.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        On live resize, send the resize event, then the scroll events (if needed).

        Since JavaScript now gets two chances to change the content (resize event + scroll event),
        we query the actual scroll offset and scale for the DynamicViewportUpdateChangedTarget.

        (WebKit::WebPage::viewportConfigurationChanged):
        Define the custom size on load before the app gets a chance to send different rects.
        If for some reason the app changes its mind about the insets, the content will be notified with a resize event.

        (WebKit::WebPage::updateVisibleContentRects):
        Send the resize event when the insets are stable.
        Also move the scroll event after the resize event for consistency with live resize.

2014-05-09  Benjamin Poulain  <benjamin@webkit.org>

        [iOS] Switch geolocation to an explicit authorization query model
        https://bugs.webkit.org/show_bug.cgi?id=132717

        Reviewed by Sam Weinig.

        Switch WKGeolocationProviderIOS to use the new API of WebGeolocationCoreLocationProvider.

        On WebKit2, the whole logic to track requesters is in WebGeolocationManagerProxy.

        Without the warmup sequence, WKGeolocationProviderIOS becomes really dumb: it just provides
        the two step authorization and forward the start/stop messages to the WebGeolocationCoreLocationProvider.

        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        (-[WKGeolocationProviderIOS _stopUpdating]):
        (-[WKGeolocationProviderIOS decidePolicyForGeolocationRequestFromOrigin:frame:request:window:]):
        (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]):
        (-[WKGeolocationProviderIOS geolocationAuthorizationDenied]):
        (-[WKWebAllowDenyPolicyListener initWithPermissionRequestProxy:]):
        (-[WKWebAllowDenyPolicyListener deny]):
        (-[WKGeolocationProviderIOS _stopUpdatingIfPossible]): Deleted.
        (-[WKGeolocationProviderIOS geolocationDelegateStarted]): Deleted.
        (-[WKGeolocationProviderIOS geolocationDelegateUnableToStart]): Deleted.
        (-[WKGeolocationProviderIOS permissionDenied:]): Deleted.
        (-[WKWebAllowDenyPolicyListener initWithProvider:permissionRequestProxy:]): Deleted.

2014-05-09  Gordon Sheridan  <gordon_sheridan@apple.com>

        Expose functions necessary for copying favicon between IconDatabases.
        https://bugs.webkit.org/show_bug.cgi?id=132709

        Reviewed by Brady Eidson.

        * UIProcess/API/C/WKIconDatabase.cpp:
        (WKIconDatabaseSetIconURLForPageURL):
        Add C API wrapper for WebIconDatabase::setIconURLForPageURL().

        (WKIconDatabaseCopyIconURLForPageURL):
        Add C API wrapper for WebIconDatabase::synchronousIconURLForPageURL().

        * UIProcess/API/C/WKIconDatabase.h:
        Added declarations for wrapper functions above.

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

        Fix the iOS DRT build by including CG headers in WKPreferences.h, which uses CGFloat.

        * UIProcess/API/Cocoa/WKPreferences.h:

2014-05-09  Brent Fulgham  <bfulgham@apple.com>

        {TelephoneNumber, Selection}ControllerMac implementations dosn't handle tiled drawing properly.
        https://bugs.webkit.org/show_bug.cgi?id=132746
        <rdar://problem/16789588>

        Reviewed by Tim Horton.

        Don't try to draw the detector UI if no part of the selection bounds are inside
        the current tile. Don't limit the detector UI to the bounds of this tile, or else
        it will attempt to squeeze itself into the possibly small space available. Let it
        draw as if it had the whole screen, and rely on the context clip region to
        avoid overdrawing.

        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect): Correct tiled drawing behavior.
        * WebProcess/WebPage/mac/SelectionOverlayControllerMac.mm:
        (WebKit::SelectionOverlayController::drawRect): Ditto.

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

        Production build fix.

        Reviewed by Dan Bernstein.

        * Configurations/BaseTarget.xcconfig:
        Add SDKROOT in front of UMBRELLA_FRAMEWORKS_DIR for OS X Production builds.

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

        [iOS WebKit2] Flush RemoteLayerBackingStore contexts on a secondary queue
        https://bugs.webkit.org/show_bug.cgi?id=132667
        <rdar://problem/15349483>

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::create):
        Address a missed review comment about a missing std::move.

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

        Rename WebKit2.framework to WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132743
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Configurations/BaseLegacyProcess.xcconfig:
        Change INSTALL_PATH to WebKit.framework.

        * Configurations/BaseTarget.xcconfig:
        Change WEBKIT2_FRAMEWORKS_DIR to WEBKIT_FRAMEWORKS_DIR and add WEBKIT_LEGACY_PRIVATE_HEADERS_DIR.

        * Configurations/BaseXPCService.xcconfig:
        Change WebKit2.framework to WebKit.framework.

        * Configurations/WebKit.xcconfig: Copied from Source/WebKit2/Configurations/WebKit2.xcconfig.
        New configuration file for WebKit.framework. Re-export WebKitLegacy.framework.

        * Configurations/WebKit2.xcconfig:
        New configuration file for the WebKit2 shim framework. Re-export WebKit.framework.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist:
        Update DYLD_INSERT_LIBRARIES to refer to WebKit.framework.

        * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist:
        Update DYLD_INSERT_LIBRARIES to refer to WebKit.framework.
        
        * Shared/API/Cocoa/WKBrowsingContextHandle.h:
        * Shared/API/Cocoa/WKRenderingProgressEvents.h:
        Update header imports.

        * Shared/API/Cocoa/WebKit.h: Renamed from Source/WebKit/mac/WebKitLegacy/WebKit.h.
        New umbrella header. Imports the modern WebKit API as well as the legacy API.

        * Shared/API/Cocoa/WebKit.m: Renamed from Source/WebKit/mac/WebKitLegacy/WebKit.m.
        Export install name symbols on iOS.

        * Shared/API/Cocoa/WebKitPrivate.h: Renamed from Source/WebKit/mac/WebKitLegacy/WebKitPrivate.h.
        New umbrella SPI header. Imports the modern WebKit SPI.

        * Many headers:
        Change WebKit2 includes to WebKit includes.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.Development.mm:
        (WebKit::XPCServiceEventHandler):
        Change bundle identifiers from com.apple.WebKit2 to com.apple.WebKit.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceMain.mm:
        (WebKit::XPCServiceEventHandler):
        Change bundle identifier from com.apple.WebKit2 to com.apple.WebKit.
        
        * UIProcess/API/Cocoa/WKPreferences.h:
        Stop including WKPreferencesRef.h, we have a WebKit2 header that handles this workaround for us now.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::addDYLDEnvironmentAdditions):
        (WebKit::connectToService):
        (WebKit::createProcess):
        (WebKit::ProcessLauncher::launchProcess):
        Change bundle identifiers from com.apple.WebKit2 to com.apple.WebKit.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::PluginProcessProxy::createPropertyListFile):
        Change bundle identifiers from com.apple.WebKit2 to com.apple.WebKit.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformDefaultDiskCacheDirectory):
        Change bundle identifier from com.apple.WebKit2 to com.apple.WebKit.
        
        * WebKit2.xcodeproj/project.pbxproj:
        Copy the python message scripts to the WebKit2 framework.
        Rename WebKit2.framework to WebKit.framework everywhere.
        Add a new WebKit2 target that builds the shim WebKit2 framework.
        Move the build script phase that migrates WebKitLegacy headers to WebKit.
        Add a new build script phase that adds forwarding headers from WebKit2 to WebKit.

        * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist:
        Update DYLD_INSERT_LIBRARIES to refer to WebKit.framework.

        * mac/MigrateHeadersFromWebKitLegacy.make: Renamed from Source/WebKit/mac/WebKitLegacy/MigrateHeadersFromWebKitLegacy.make.
        Move the makefile that migrates WebKitLegacy headers here. On OS X, it copies the header contents and on iOS it creates forarding headers.

        * mac/MigrateHeadersToWebKit2.make:
        New makefile that creates forwarding headers for the WebKit2 shim framework.

        * mac/WKPreferences.h: Added.
        Add WebKit2/WKPreferences.h header that imports WebKit2/WKPreferencesref.h.

        * mac/WebKit2.m:
        Skeleton for the WebKit2 shim framework.

        * mac/Info-WebKit2.plist: Added.
        New Info.plist file for the WebKit2 shim framework.

2014-05-09  Martin Hodovan  <mhodovan.u-szeged@partner.samsung.com>

        [WK2] Make generate-forwarding-headers.pl work after WebKit2.framework -> WebKit.framework rename
        https://bugs.webkit.org/show_bug.cgi?id=132733

        Reviewed by Csaba Osztrogonác.

        Rewrite framework's directory name to WebKit2 if the framework is WebKit (former WebKit2)
        and then collect headers inside the fixed framework directory and generate forwarding
        headers point to the fixed directory.

        Leave WebKit2 in @frameworks list during the transition. It can be removed
        once <WebKit2/foo.h> style includes were renamed to <WebKit/foo.h> everywhere.

        * Scripts/generate-forwarding-headers.pl:
        (collectFameworkHeaderPaths):
        (createForwardingHeadersForFramework):

2014-05-08  Alexey Proskuryakov  <ap@apple.com>

        Automatically zip document bundles used via File API
        https://bugs.webkit.org/show_bug.cgi?id=132713
        <rdar://problem/13397892>

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: NetworkProcess
        now uses FileCoordination (WebProcess already had this allowed).

        * Shared/BlobDataFileReferenceWithSandboxExtension.h: Added final to the class.

2014-05-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Bottom-relative position:fixed elements are misplaced on page load
        https://bugs.webkit.org/show_bug.cgi?id=132719
        <rdar://problem/16860837>

        Reviewed by Benjamin Poulain.
        
        If we haven't received visible rects from the web process, compute the
        fixed position rect, but only after scale has been set.

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

2014-05-08  Jer Noble  <jer.noble@apple.com>

        [Mac, iOS] Add source application accounting to AVURLAsset.
        https://bugs.webkit.org/show_bug.cgi?id=132637

        Reviewed by Eric Carlson.

        Add accessor for sourceApplicationIdentifier.

        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationIdentifier):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationIdentifier):

2014-05-08  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush RemoteLayerBackingStore contexts on a secondary queue
        ​https://bugs.webkit.org/show_bug.cgi?id=132667
        <rdar://problem/16861454>

        Rubber-stamped by Simon Fraser.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Add a null check to fix a crash on layers which lose backing store.

2014-05-08  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r168053): Phone number detection boxes are wrong when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=132706
        -and corresponding-
        <rdar://problem/16787957>

        Reviewed by Tim Horton.

        We need to paint the boxes in Document coordinates. Range::boundingRect() was 
        giving us a point that took scroll position into account, and that’s not what we 
        want. Here we use Range::textQuads() instead so that we can get something in 
        Document coordinates, and then we need to convert that up to the main Document’s 
        coordinates.
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::textQuadsToBoundingRectForRange):
        (WebKit::TelephoneNumberOverlayController::drawRect):

        The telephone click function wants a point in Window coordinates.
        (WebKit::TelephoneNumberOverlayController::mouseEvent):

2014-05-08  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush RemoteLayerBackingStore contexts on a secondary queue
        https://bugs.webkit.org/show_bug.cgi?id=132667
        <rdar://problem/15349483>

        Reviewed by Darin Adler.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::takeFrontContextPendingFlush):
        (WebKit::RemoteLayerBackingStore::flush): Deleted.
        Add takeFrontContextPendingFlush, which returns the painted-but-not-yet-flushed front context,
        and drops our reference to it. This needs to be called on all backing store between paints.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::hasFlushed):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::~RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::create):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::BackingStoreFlusher):
        (WebKit::RemoteLayerTreeDrawingArea::BackingStoreFlusher::flush):
        (WebKit::flushBackingStoreChangesInTransaction): Deleted.
        Flush backing store and send the layer tree commit to the UI process from a dispatch queue.
        We will only ever have a single commit in flight at a time, and there's a new
        RELEASE_ASSERT to ensure that is the case.
        We package up the commit on the main thread; the queue calls CGContextFlush
        on all of the newly painted contexts and then tosses the commit over to the UI process.
        This is a win in many cases because the Web process main thread can go ahead
        and do other non-painting tasks while the queue is blocked on painting.

2014-05-08  Tim Horton  <timothy_horton@apple.com>

        [wk2] Don't use the XPC-based plugin process for Adobe Reader
        https://bugs.webkit.org/show_bug.cgi?id=132701
        <rdar://problem/16792692>

        Reviewed by Anders Carlsson.

        * UIProcess/Plugins/mac/PluginProcessProxyMac.mm:
        (WebKit::shouldUseXPC):
        Rename the debugging default to a more modern and accurate name.
        Don't use XPC for Adobe Reader.

        (WebKit::PluginProcessProxy::platformGetLaunchOptions):
        Move the check for plugins that need an executable heap into shouldUseXPC.

2014-05-08  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Remove an incorrect assertion on asynchronous touch dispatch
        https://bugs.webkit.org/show_bug.cgi?id=132660

        Reviewed by Enrica Casucci.

        This assertion no longer make sense after r168393. Now the asynchronous behavior is maintained
        until the last finger leaves the screen.

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

2014-05-08  Alexey Proskuryakov  <ap@apple.com>

        Make BlobDataFileReference manage its sandbox extension
        https://bugs.webkit.org/show_bug.cgi?id=132689

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * WebKit2.xcodeproj/project.pbxproj:
        Added BlobDataFileReferenceWithSandboxExtension.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerFileBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::unregisterBlobURL):
        (WebKit::NetworkBlobRegistry::connectionToWebProcessDidClose):
        (WebKit::NetworkBlobRegistry::filesInBlob):
        (WebKit::NetworkBlobRegistry::sandboxExtensions): Deleted.
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        We no longer track sandbox extensions here. Instead, provide a way to get files
        for a blob, which contain extensions and can allow access to themselves.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        (WebKit::NetworkResourceLoader::consumeSandboxExtensions):
        (WebKit::NetworkResourceLoader::invalidateSandboxExtensions):
        * NetworkProcess/NetworkResourceLoader.h:
        Allow/revoke access to files in blob, just like we do for explicitly passed extensions.

        * Shared/BlobDataFileReferenceWithSandboxExtension.cpp: Added.
        (WebKit::BlobDataFileReferenceWithSandboxExtension::BlobDataFileReferenceWithSandboxExtension):
        (WebKit::BlobDataFileReferenceWithSandboxExtension::~BlobDataFileReferenceWithSandboxExtension):
        (WebKit::BlobDataFileReferenceWithSandboxExtension::prepareForFileAccess):
        (WebKit::BlobDataFileReferenceWithSandboxExtension::revokeFileAccess):
        * Shared/BlobDataFileReferenceWithSandboxExtension.h: Added.
        (WebKit::BlobDataFileReferenceWithSandboxExtension::create):
        A subclass of BlobDataFileReference that also contains a sandbox extension. NetworkProcess
        always uses it in BlobRegistryImpl.

        * WebProcess/FileAPI/BlobRegistryProxy.cpp: (WebKit::BlobRegistryProxy::registerFileBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:
        Updated for BlobRegistry interface changes. BlobRegistryProxy doesn't really need
        a BlobDataFileReference here, as it only uses a path, but it needs to implement the same interface
        as BlobRegistryImpl.

2014-05-08  Brady Eidson  <beidson@apple.com>

        "shouldKeepCurrentBackForwardListItemInList" API should pass clientInfo to the callback
        <rdar://problem/16855357> and https://bugs.webkit.org/show_bug.cgi?id=132692

        Reviewed by Tim Horton.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/API/C/WKPageLoaderClient.h:

2014-05-08  Antti Koivisto  <antti@apple.com>

        [iOS WebKit2] Can't activate text fields on Facebook
        https://bugs.webkit.org/show_bug.cgi?id=132682

        Reviewed by Enrica Casucci.

        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::observedContentChange):
        
            Implement content change observer callback.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        
            If the event gets canceled by a potential change (a started short-duration timer)
            save the position and node so we can continue later.

        (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver):
        
            If it turns out the observed timer changed nothing continue the click event.

        (WebKit::WebPage::completeSyntheticClick):
        
            Factored click event dispatch part of handleSyntheticClick here.

2014-05-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CoordinatedGraphics][WK2] Scale factor and scroll position is not being restored properly in a back/forward load
        https://bugs.webkit.org/show_bug.cgi?id=126022

        Reviewed by Benjamin Poulain.

        Original author : Thiago de Barros Lacerda, and finished by Gyuyoung Kim.

        When user is navigating back/forward to a page that has been scrolled and/or scaled, that page must be shown
        with its last scroll position and scale factor. However, when fixed layout was enabled with CoordinatedGraphics
        and TILED_BACKING_STORE, Page::setPageScaleFactor() doesn't send previous scroll position since r165652 and r165913.

        This patch allows the Page::setPageScaleFactor() send stored position to WK2 implementation.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::didCommitLoadForMainFrame):

2014-05-07  Simon Fraser  <simon.fraser@apple.com>

        Put a better version of the assertion back, and add one when we ensureBackingStore.

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::ensureBackingStore):

2014-05-07  Simon Fraser  <simon.fraser@apple.com>

        This assertion was wrong and fired every time. Remove it.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):

2014-05-07  Enrica Casucci  <enrica@apple.com>

        WK2: Programatic scroll requests during scroll or zoom animation to reveal focused element are ignored.
        https://bugs.webkit.org/show_bug.cgi?id=132657
        <rdar://problem/16468462>

        Reviewed by Benjamin Poulain.

        With the scrolling model we use on iOS, a programatic scroll
        request can be received while we are still animating to reveal
        the focused input element. Changing the scroll offset while animating
        leads to unpredictable results. We now cancel the animation if
        a programatic scroll request is received.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:WebCore::]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2014-05-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Speculative fix for crash in PlatformCALayerRemote::recursiveBuildTransaction
        https://bugs.webkit.org/show_bug.cgi?id=132666

        Reviewed by Tim Horton.
        
        Crash reports suggest that owner() can be null. Assert and protect
        against this.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):

2014-05-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16831276> [iOS] Unparenting a WKWebView that’s loading pauses it
        https://bugs.webkit.org/show_bug.cgi?id=132659

        Reviewed by Tim Horton.

        * UIProcess/Cocoa/NavigationState.h: Added a member variable.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::didChangeIsLoading): When transitioning into loading state,
        acquire a background activity token. When transitioning out of loading state, dispose of
        the token.

2014-05-07  Jeremy Jones  <jeremyj@apple.com>

        HTMLMediaElement should exitFullscreen when view is removed from the window.
        https://bugs.webkit.org/show_bug.cgi?id=132506

        Reviewed by Tim Horton.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        Request WebVideoFUllscreenManagerProxy to exitFullscreen when removed from the window.
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Make requestExitFullscreen() public instead of private.

2014-05-07  Alexey Proskuryakov  <ap@apple.com>

        Make blob size computation lazy
        https://bugs.webkit.org/show_bug.cgi?id=132653

        Reviewed by Anders Carlsson.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        (WebKit::NetworkBlobRegistry::blobSize):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        (WebKit::NetworkConnectionToWebProcess::blobSize):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        (WebKit::BlobRegistryProxy::blobSize):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2014-05-06  Simon Fraser  <simon.fraser@apple.com>

        Add scrolling tree logging to RemoteLayerTree output
        https://bugs.webkit.org/show_bug.cgi?id=132640

        Reviewed by Beth Dakin.
        
        Support scrolling tree logging in the RemoteLayerTree log channel
        output.
        
        Encode/decode ScrollingStateTree::hasChangedProperties() so we can use
        it to avoid logging. Log all the things.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::RemoteScrollingCoordinatorTransaction::encode):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        (WebKit::RemoteScrollingTreeTextStream::RemoteScrollingTreeTextStream):
        (WebKit::RemoteScrollingTreeTextStream::increaseIndent):
        (WebKit::RemoteScrollingTreeTextStream::decreaseIndent):
        (WebKit::RemoteScrollingTreeTextStream::writeIndent):
        (WebKit::dumpProperty):
        (WebKit::RemoteScrollingTreeTextStream::operator<<):
        (WebKit::RemoteScrollingTreeTextStream::dump):
        (WebKit::RemoteScrollingTreeTextStream::recursiveDumpNodes):
        (WebKit::RemoteScrollingCoordinatorTransaction::description):
        (WebKit::RemoteScrollingCoordinatorTransaction::dump):
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):

2014-05-07  Hyowon Kim  <hw1008.kim@samsung.com>

        GraphicsLayer::client() should return a reference.
        https://bugs.webkit.org/show_bug.cgi?id=126372

        Reviewed by Simon Fraser.

        GraphicsLayers always have a GraphicsLayerClient attached,
        so make client() a reference and remove some unnecessary branches.
        The author of the changes in the mac port is Andreas Kling <akling@apple.com>.

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::initialize):
        (WebKit::PageOverlayController::installPageOverlay):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):
        (WebKit::LayerTreeHostGtk::createPageOverlayLayer):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::createGraphicsLayer):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):

2014-05-07  Shivakumar JM  <shiva.jm@samsung.com>

        Cleanup the build from unused parameter in UIProcess Module
        https://bugs.webkit.org/show_bug.cgi?id=131969

        Reviewed by Csaba Osztrogonác.

        Fixed unused parameter by omitting the parameter name

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient):
        * UIProcess/WebFindClient.cpp:
        (WebKit::WebFindClient::didFindString):

2014-05-07  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Remove runtime feature
        https://bugs.webkit.org/show_bug.cgi?id=132382

        Reviewed by Benjamin Poulain.

        Remove cssGridLayoutEnabled setting usage.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetCSSGridLayoutEnabled): Deleted.
        (WKPreferencesGetCSSGridLayoutEnabled): Deleted.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:
        * UIProcess/API/gtk/WebKitSettings.cpp:
        (webKitSettingsConstructed):
        * UIProcess/gtk/ExperimentalFeatures.cpp:
        * UIProcess/gtk/ExperimentalFeatures.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * mac/WebKit2.order:

2014-05-07  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r168393 to fix !IOS builds.

        * Shared/WebEvent.h:

2014-05-06  Brady Eidson  <beidson@apple.com>

        Followup to "Add WK2 SPI to prevent the previous back/forward item from remaining in the list"
        <rdar://problem/16248710> and https://bugs.webkit.org/show_bug.cgi?id=132636

        Reviewed by NOBODY (My mistake while addressing previous review feedback)

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient): During review feedback, this client switched from default negative to default
          positve, so when the client isn't implemented...  return true instead of false.

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem): Fix nonsensical comments while I'm at it.

2014-05-06  Brady Eidson  <beidson@apple.com>

        Add WK2 SPI to prevent the previous back/forward item from remaining in the list
        <rdar://problem/16248710> and https://bugs.webkit.org/show_bug.cgi?id=132636

        Reviewed by Sam Weinig.

        Add new PageLoaderClient SPI to keep the current back/forward item from remaining in the list:
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::shouldKeepCurrentBackForwardListItemInList):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/API/C/WKPageLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::shouldKeepCurrentBackForwardListItemInList):
        * UIProcess/WebPageProxy.h:

        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::addItem): Use that SPI to determine whether we should insert the new item after
        the previous item, or simply replace the previous item.
        (WebKit::WebBackForwardList::goToItem): Use that SPI to determine whether the previous item stays or goes.

2014-05-06  Dan Bernstein  <mitz@apple.com>

        -[WKWebView isLoading] is NO immediately after -loadRequest: until the provisional load starts
        https://bugs.webkit.org/show_bug.cgi?id=132639

        Reviewed by Darin Adler.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::commitChanges): Updated for change from isLoadingState to isLoading.
        (WebKit::PageLoadState::isLoading): Renamed from isLoadingState, changed to take Data and
        check whether there is a non-null pending API request URL. If so, return true.
        * UIProcess/PageLoadState.h:

2014-05-06  Dean Jackson  <dino@apple.com>

        [Mac] Allow focus rings to redraw themselves if necessary
        https://bugs.webkit.org/show_bug.cgi?id=132593

        Reviewed by Simon Fraser.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add DrawFocusRingAtTime and DrawCellFocusRingWithFrameAtTime.

2014-05-06  Benjamin Poulain  <benjamin@webkit.org>

        <rdar://problem/16833442> [iOS WebKit2]: Keep the order of contentView in _scrollView after rotation
        https://bugs.webkit.org/show_bug.cgi?id=132634

        Reviewed by Enrica Casucci.

        Nice idea of Yongjun.

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

2014-05-06  Timothy Hatcher  <timothy@apple.com>

        Take WKView's topContentInset into account when docking Web Inspector to the right.

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

        Reviewed by Joseph Pecoraro.

        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectedViewFrameDidChange): Subtract topContentInset
        from the height of the frame for the Inspector.

2014-05-06  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WebKit2 does not set CanPreventNativeGestures on the platform events
        https://bugs.webkit.org/show_bug.cgi?id=132594

        Reviewed by Simon Fraser.

        Set CanPreventNativeGestures on the plaform event.
        Change the tracking of WKContentView to be similar to WebPageProxy.

        * Shared/WebEvent.h:
        (WebKit::WebTouchEvent::WebTouchEvent):
        (WebKit::WebTouchEvent::canPreventNativeGestures):
        (WebKit::WebTouchEvent::setCanPreventNativeGestures):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformTouchEvent::WebKit2PlatformTouchEvent):
        * Shared/ios/WebTouchEventIOS.cpp:
        (WebKit::WebTouchEvent::encode):
        (WebKit::WebTouchEvent::decode):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):

2014-05-06  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add tap highlight on the simple UITapGestureRecognizer
        https://bugs.webkit.org/show_bug.cgi?id=132623
        <rdar://problem/16709507>

        Reviewed by Enrica Casucci.

        Add a low latency highlight for tap/click.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::commitPotentialTapFailed):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _showTapHighlightWithColor:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):
        (-[WKContentView _didGetTapHighlightForRequest:color:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):
        (-[WKContentView _finishInteraction]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _singleTapDidReset:]):
        (-[WKContentView _commitPotentialTapFailed]):
        (-[WKContentView _singleTapCommited:]):
        (-[WKContentView _attemptClickAtLocation:]):
        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.h: Added.
        * UIProcess/ios/WKSyntheticClickTapGestureRecognizer.m: Added.
        (-[WKSyntheticClickTapGestureRecognizer setGestureRecognizedTarget:action:]):
        (-[WKSyntheticClickTapGestureRecognizer setResetTarget:action:]):
        (-[WKSyntheticClickTapGestureRecognizer setState:]):
        (-[WKSyntheticClickTapGestureRecognizer reset]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::potentialTapAtPosition):
        (WebKit::WebPageProxy::commitPotentialTap):
        (WebKit::WebPageProxy::cancelPotentialTap):
        (WebKit::WebPageProxy::tapHighlightAtPosition):
        (WebKit::WebPageProxy::commitPotentialTapFailed):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleSyntheticClick):
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::sendTapHighlightForNodeIfNecessary):
        (WebKit::WebPage::potentialTapAtPosition):
        (WebKit::WebPage::commitPotentialTap):
        (WebKit::WebPage::cancelPotentialTap):
        (WebKit::WebPage::tapHighlightAtPosition):

2014-05-06  Anders Carlsson  <andersca@apple.com>

        Put WebArchive and WebArchiveResource in the API namespace.

        Rubber-stamped by Dan Bernstein.

        * Shared/API/c/WKSharedAPICast.h:
        * Shared/API/c/mac/WKWebArchive.cpp:
        (WKWebArchiveGetTypeID):
        (WKWebArchiveCreate):
        (WKWebArchiveCreateWithData):
        (WKWebArchiveCreateFromRange):
        (WKWebArchiveCopyMainResource):
        * Shared/API/c/mac/WKWebArchiveResource.cpp:
        (WKWebArchiveResourceGetTypeID):
        (WKWebArchiveResourceCreate):
        * Shared/APIWebArchive.cpp: Renamed from Source/WebKit2/Shared/WebArchive.cpp.
        (API::WebArchive::create):
        (API::WebArchive::WebArchive):
        (API::WebArchive::~WebArchive):
        (API::WebArchive::mainResource):
        (API::WebArchive::subresources):
        (API::WebArchive::subframeArchives):
        (API::releaseCFData):
        (API::WebArchive::data):
        (API::WebArchive::coreLegacyWebArchive):
        * Shared/APIWebArchive.h: Renamed from Source/WebKit2/Shared/WebArchive.h.
        * Shared/APIWebArchiveResource.cpp: Renamed from Source/WebKit2/Shared/WebArchiveResource.cpp.
        (API::WebArchiveResource::create):
        (API::WebArchiveResource::WebArchiveResource):
        (API::WebArchiveResource::~WebArchiveResource):
        (API::releaseCFData):
        (API::WebArchiveResource::data):
        (API::WebArchiveResource::URL):
        (API::WebArchiveResource::MIMEType):
        (API::WebArchiveResource::textEncoding):
        (API::WebArchiveResource::coreArchiveResource):
        * Shared/APIWebArchiveResource.h: Renamed from Source/WebKit2/Shared/WebArchiveResource.h.
        * WebKit2.xcodeproj/project.pbxproj:

2014-05-06  Alex Christensen  <achristensen@webkit.org>

        Removed unnecessary notImplemented.h includes.
        https://bugs.webkit.org/show_bug.cgi?id=132587

        Reviewed by Anders Carlsson.

        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp:
        * WebProcess/WebCoreSupport/WebInspectorFrontendClient.cpp:
        Removed notImplemented from list of includes.

2014-05-05  Jeremy Jones  <jeremyj@apple.com>

        Implement scan backward and forward in video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=132517

        Reviewed by Simon Fraser.

        Plumb through scanning/seeking functions.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::fastSeek):
        (WebKit::WebVideoFullscreenManagerProxy::beginScanningForward):
        (WebKit::WebVideoFullscreenManagerProxy::beginScanningBackward):
        (WebKit::WebVideoFullscreenManagerProxy::endScanning):
        * WebProcess/ios/WebVideoFullscreenManager.messages.in:

2014-05-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Prefetch DNS hostnames on tap highlight
        https://bugs.webkit.org/show_bug.cgi?id=132509

        Reviewed by Alexey Proskuryakov.

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

2014-05-05  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Flickery scrolling inside overflow-scrolling: touch
        https://bugs.webkit.org/show_bug.cgi?id=132591
        <rdar://problem/16760466>

        Reviewed by Tim Horton.
        
        Avoid triggering layer tree commits that touch the layer's boundsOrigin
        while the user is scrolling in the UI process.
        
        Fix the WKOverflowScrollViewDelegate to pass along an "inUserInteration"
        flag to the ScrollingTree to say that we're in the middle of a user interaction
        (and also to send a final non-interactive update). That gets passed along
        to the web process, and turned into "SyncScrollingLayerPosition" update.
        AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll() consults
        this, and uses it to set a flag on the ScrollableArea to say that the scroll
        is a user scroll.
        
        RenderLayerBacking then makes use of this (in existing code, shared with WK1)
        to avoid triggering layer bounds setting. Instead, it now just calls syncBoundsOrigin(),
        which updates the GraphicsLayer without touching platform layers. This is necessary
        so that GraphicsLayer geometry is up-to-date (used for tiled layer visibility
        computations).
        
        Finally, a hack in GraphicsLayerCA::computeVisibleRect() is conditionalized
        for WebKit1 by checking the type of platform layer.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::rootScrollingNodeID):
        (WebKit::RemoteScrollingCoordinatorProxy::isPointInNonFastScrollableRegion):
        (WebKit::RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate scrollViewDidScroll:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDecelerating:]):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollViewDidScroll):
        * WebProcess/Scrolling/RemoteScrollingCoordinator.h:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.messages.in:
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode):

2014-05-05  Alexey Proskuryakov  <ap@apple.com>

        Stop using BlobData on client side
        https://bugs.webkit.org/show_bug.cgi?id=132582

        Reviewed by Sam Weinig.

        Update for WebCore changes.

        * CMakeLists.txt:
        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerFileBlobURL):
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerFileBlobURL):
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * Shared/FileAPI/BlobRegistrationData.cpp: Removed.
        * Shared/FileAPI/BlobRegistrationData.h: Removed.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<BlobPart>::encode):
        (IPC::ArgumentCoder<BlobPart>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerFileBlobURL):
        (WebKit::BlobRegistryProxy::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2014-05-05  Beth Dakin  <bdakin@apple.com>

        Need a delegate that informs the UI process when the page's pin state changes
        https://bugs.webkit.org/show_bug.cgi?id=132583
        -and corresponding-
        <rdar://problem/16806231>

        Reviewed by Anders Carlsson.

        New UIClient function pinnedStateDidChange. 

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::pinnedStateDidChange):

        Create WKPageUIClientV3 to add this function.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/C/WKPageUIClient.h:

        Change default initialization to true instead of false, which makes more sense for 
        this API.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        (WebKit::WebPageProxy::resetState):
        (WebKit::WebPageProxy::didChangeScrollOffsetPinningForMainFrame):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2014-05-05  Anders Carlsson  <andersca@apple.com>

        Add SPI to provide the WebCrypto master key
        https://bugs.webkit.org/show_bug.cgi?id=132586
        <rdar://problem/16091460>

        Reviewed by Dan Bernstein.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::webCryptoMasterKey):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::LoaderClient::webCryptoMasterKey):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::wrapCryptoKey):

2014-05-05  Gavin Barraclough  <baraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=132522
        Clean up ProcessThrottler

        Unreviewed: bad build fix. Will work out what the right include is asap.

        * UIProcess/ios/WebProcessProxyIOS.mm:

2014-05-05  Sam Weinig  <sam@webkit.org>

        [Cocoa WebKit2] Add SPI to clear all visited links in a VisitedLinkProvider
        https://bugs.webkit.org/show_bug.cgi?id=132573

        Reviewed by Dan Bernstein.

        * Shared/VisitedLinkTable.cpp:
        (WebKit::VisitedLinkTable::VisitedLinkTable):
        (WebKit::VisitedLinkTable::clear):
        * Shared/VisitedLinkTable.h:
        Add functions to clear the visited link table.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:
        (-[_WKVisitedLinkProvider removeAll]):
        Add SPI.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::removeAll):
        * UIProcess/VisitedLinkProvider.h:
        A remove all resets the provider and notifies all the attached processes.

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::removeAllVisitedLinks):
        * WebProcess/WebPage/VisitedLinkTableController.h:
        * WebProcess/WebPage/VisitedLinkTableController.messages.in:
        Add message to clear the visited links for a process.

2014-05-05  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Special case ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture() for image documents
        https://bugs.webkit.org/show_bug.cgi?id=132553

        Reviewed by Tim Horton.

        When collecting the geometry for the smart magnification gesture, always return the image of an image document
        on iOS. On iOS, it does not make much sense to return the whole document rect when the gesture is not over the image.

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

2014-05-02  Gavin Barraclough  <baraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=132522
        Clean up ProcessThrottler

        Reviewed by Geoffrey Garen.

        The initial implementation of ProcessThrottler relied on the reply from the
        SetViewState message to ensure the page visibility notifications have a chance
        to be delivered. This resulted in:
            - unnecessarily complicated interface to ProcessThrottler (in VisibilityState class)
            - complexity bleeding out into WebPageProxy (handling 'hiding' state).
            - for cases other than view hiding, no suspension notification in the WebContent.

        To fix these issues add an explicit handshake from the ProcessThrottler to the WebPage.
        This gives us two things:
            - All previously posted messages (e.g. SetViewState) will be processed before suspension.
            - WebContent is always (bar timeout) notified before suspension.

        Since this interlock ensures the SetViewState message will be processed, the WKContentView no
        longer needs to request a reply from SetViewState, and WebPageProxy can lose all the 'hiding'
        state tracking. In turn, we can simplify VisibilityToken to a couple of simpler types, without
        the interface to change state - just acquire/release to keep the process runnable or permit
        suspension.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
            - VisibilityToken -> BackgroundActivityToken
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
            - m_visibilityToken -> m_activityToken, remove m_pendingViewStateUpdates
              updateVisibilityToken -> updateActivityToken
        (WebKit::WebPageProxy::reattachToWebProcess):
            - updateVisibilityToken -> updateActivityToken
        (WebKit::WebPageProxy::viewStateDidChange):
            - remove m_pendingViewStateUpdates, updateActivityToken after sending SetViewState
        (WebKit::WebPageProxy::updateActivityToken):
            - m_visibilityToken -> m_activityToken, no need to handle 'hiding' state.
        (WebKit::WebPageProxy::updateVisibilityToken): Deleted.
            - renamed to updateActivityToken
        (WebKit::WebPageProxy::didUpdateViewState): Deleted.
            - implementation moved back into header.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didUpdateViewState):
            - implementation moved back into header.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
            - ProcessThrottler constructor now passed WebProcessProxy.
        * UIProcess/WebProcessProxy.h:
            - added ProcessWillSuspend/ProcessReadyToSuspend
        * UIProcess/WebProcessProxy.messages.in:
            - added ProcessWillSuspend/ProcessReadyToSuspend
        * UIProcess/ios/ProcessAssertion.h:
        (WebKit::ProcessAssertion::state):
            - accessor
        * UIProcess/ios/ProcessThrottler.h:
        (WebKit::ProcessThrottler::VisibilityToken::visibility): Deleted.
        (WebKit::ProcessThrottler::VisibilityToken::setVisibility): Deleted.
            - removed VisibilityToken class, replaced with ForegroundActivityToken/BackgroundActivityToken.
        (WebKit::ProcessThrottler::ProcessThrottler): Deleted.
        (WebKit::ProcessThrottler::visibilityToken): Deleted.
        (WebKit::ProcessThrottler::didConnnectToProcess): Deleted.
        (WebKit::ProcessThrottler::assertionState): Deleted.
        (WebKit::ProcessThrottler::updateAssertion): Deleted.
            - moved implementations to .mm.
        * UIProcess/ios/ProcessThrottler.mm:
        (WebKit::ProcessThrottler::ForegroundActivityToken::ForegroundActivityToken):
        (WebKit::ProcessThrottler::ForegroundActivityToken::~ForegroundActivityToken):
        (WebKit::ProcessThrottler::BackgroundActivityToken::BackgroundActivityToken):
        (WebKit::ProcessThrottler::BackgroundActivityToken::~BackgroundActivityToken):
            - new, simpler replacement for VisibilityToken. Instantiate to keep a processes running, release to suspend.
        (WebKit::ProcessThrottler::ProcessThrottler):
            - constructor, now initializes WebProcessProxy pointer & timer mechanism
        (WebKit::ProcessThrottler::assertionState):
            - select the appropriate AssertionState give current ActivityTokens.
        (WebKit::ProcessThrottler::updateAssertionNow):
            - update the current ProcessAssertion.
        (WebKit::ProcessThrottler::updateAssertion):
            - update the current ProcessAssertion, delay running->suspended transitions to give the process a chance to clean up.
        (WebKit::ProcessThrottler::didConnnectToProcess):
            - moved from header.
        (WebKit::ProcessThrottler::suspendTimerFired):
            - timeout to prevent processes from running in the background for too long.
        (WebKit::ProcessThrottler::processReadyToSuspend):
            - handshake from the WebContent process to acknowledge it is ready to suspend.
        (WebKit::ProcessThrottler::VisibilityToken::VisibilityToken): Deleted.
        (WebKit::ProcessThrottler::VisibilityToken::~VisibilityToken): Deleted.
        (WebKit::ProcessThrottler::VisibilityToken::hideTimerFired): Deleted.
        (WebKit::ProcessThrottler::VisibilityToken::setVisibilityInternal): Deleted.
            - removed VisibilityToken class, replaced with ForegroundActivityToken/BackgroundActivityToken.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
            - no longer necessary to request a response from SetViewState; this interlock is now managed by the ProcessThrottler.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::sendProcessWillSuspend):
        (WebKit::WebProcessProxy::processReadyToSuspend):
            - added ProcessWillSuspend/ProcessReadyToSuspend
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::processWillSuspend):
            - notification from the WebContent process that we will be suspended; for now just send back an ack.
        * WebProcess/WebProcess.h:
            - added ProcessWillSuspend/ProcessReadyToSuspend
        * WebProcess/WebProcess.messages.in:
            - added ProcessWillSuspend/ProcessReadyToSuspend

2014-05-05  Jeremy Jones  <jeremyj@apple.com>

        Implement beginScrubbing and endScrubbing for video fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=132520

        Reviewed by Eric Carlson.

        Plumb through beginScrubbing and endScrubbing.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::beginScrubbing):
        (WebKit::WebVideoFullscreenManagerProxy::endScrubbing):
        * WebProcess/ios/WebVideoFullscreenManager.messages.in:

2014-05-05  Tim Horton  <timothy_horton@apple.com>

        Use a layer delegate instead of web_disableAllActions wherever possible
        https://bugs.webkit.org/show_bug.cgi?id=132560
        <rdar://problem/16459284>

        Reviewed by Simon Fraser.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setAcceleratedCompositingModeRootLayer:]):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Make use of WebActionDisablingCALayerDelegate where possible.
        Also, UIKit disables actions for us, so don't bother doing anything on iOS.

2014-05-05  Martin Hock  <mhock@apple.com>

        Session-aware plugin autostart data
        https://bugs.webkit.org/show_bug.cgi?id=131758
        <rdar://problem/15906540>

        Reviewed by Alexey Proskuryakov.

        * Shared/WebProcessCreationParameters.cpp:
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/Plugins/PlugInAutoStartProvider.cpp:
        (WebKit::PlugInAutoStartProvider::PlugInAutoStartProvider):
        (WebKit::PlugInAutoStartProvider::addAutoStartOriginHash):
        (WebKit::PlugInAutoStartProvider::autoStartOriginHashesCopy):
        (WebKit::PlugInAutoStartProvider::autoStartOriginsTableCopy):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsTableWithItemsPassingTest):
        (WebKit::PlugInAutoStartProvider::setAutoStartOriginsArray):
        (WebKit::PlugInAutoStartProvider::didReceiveUserInteraction):
        * UIProcess/Plugins/PlugInAutoStartProvider.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::addPlugInAutoStartOriginHash):
        (WebKit::WebContext::plugInDidReceiveUserInteraction):
        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::pluginDidReceiveUserInteraction):
        * WebProcess/WebCoreSupport/WebPlugInClient.cpp:
        (WebKit::WebPlugInClient::didStartFromOrigin):
        * WebProcess/WebCoreSupport/WebPlugInClient.h:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::isPlugInAutoStartOriginHash):
        (WebKit::WebProcess::shouldPlugInAutoStartFromOrigin):
        (WebKit::WebProcess::plugInDidStartFromOrigin):
        (WebKit::WebProcess::didAddPlugInAutoStartOriginHash):
        (WebKit::WebProcess::resetPlugInAutoStartOriginDefaultHashes):
        (WebKit::WebProcess::resetPlugInAutoStartOriginHashes):
        (WebKit::WebProcess::plugInDidReceiveUserInteraction):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-05-05  Andy Estes  <aestes@apple.com>

        Another iOS build fix after r168260.

        Removed an unnecessary 'using namespace WebCore'.

        * UIProcess/ios/WebMemoryPressureHandlerIOS.cpp:

2014-05-05  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * UIProcess/API/Cocoa/WKWebView.mm:

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

        [EFL][WK2] Refactor favicon database APIs
        https://bugs.webkit.org/show_bug.cgi?id=132519

        Reviewed by Gyuyoung Kim.

        ewebkit2 has two options to get favicon.

        The first option is ewk_view_favicon_get with "favicon,changed" signal.
        It's simple to use but it always adds the callback to EwkView although applications does not use favicon.

        The other option is ewk_favicon_database_icon_get with ewk_favicon_database_icon_change_callback_add API.
        But the callback doesn't have information about Ewk_Favicon_Database to call ewk_favicon_database_icon_get.

        This patch removed ewk_view_favicon_get and "favicon,changed" signal.
        In addition, improved ewk_favicon_database_icon_change_callback.

        * UIProcess/API/efl/EwkView.cpp: Remove ewk_favicon_database related code.
        (EwkView::EwkView):
        (EwkView::~EwkView):
        (EwkView::informURLChange):
        (EwkView::handleFaviconChanged):
        (EwkView::createFavicon): Deleted.
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/ewk_favicon_database.cpp:
        (EwkFaviconDatabase::iconDataReadyForPageURL):
        (EwkFaviconDatabase::didChangeIconForPageURL): Deleted. dead code.
        * UIProcess/API/efl/ewk_favicon_database.h:
        Refactor Ewk_Favicon_Database_Icon_Change_Cb and improve doxygen.
        * UIProcess/API/efl/ewk_favicon_database_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_favicon_get): Deleted.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:
        (EWK2FaviconDatabaseTest::requestFaviconData):
        (TEST_F):

2014-05-05  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Swipe snapshots should be taken asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=132417
        <rdar://problem/16535921>

        Reviewed by Anders Carlsson.

        Reorganize takeViewSnapshot to return a ViewSnaphot with the image
        filled in (the other properties are filled in by ViewSnapshotStore).

        Make ViewSnapshotStore use a fixed size instead of count for the snapshot cache.
        iOS doesn't use purgeable snapshots, so make the cache much smaller there.

        Use CARenderServerCaptureLayerWithTransform to achieve async snapshotting.

        Rename WebKit::ViewSnapshotStore::Snapshot to WebKit::ViewSnapshot so that
        it can be forward-declared in a bunch of places.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _takeViewSnapshot:]):
        Use CARenderServerCaptureLayerWithTransform.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/mac/WKView.mm:
        (createIOSurfaceFromImage):
        (-[WKView _takeViewSnapshot:]):
        Adjust to the new push model.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::takeViewSnapshot):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::takeViewSnapshot):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::takeViewSnapshot):
        Plumbing.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        Realize an object that can be used as the layer contents from the slot ID.

        * UIProcess/ios/WebMemoryPressureHandlerIOS.cpp:
        (WebKit::WebMemoryPressureHandler::sharedHandler):
        (WebKit::WebMemoryPressureHandler::WebMemoryPressureHandler):
        * UIProcess/WebMemoryPressureHandlerIOS.h:
        Add a memory pressure handler for the UI process. This does not use
        WebCore's platform independent memory pressure handler because that
        mechanism only allows for one handler per process, and we don't want to
        stomp on any handlers installed by WebKit1 in a process where the WebKits coexist.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _takeViewSnapshot]): Deleted.
        Get rid of an unnecessary bounce through WKContentView.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::retrieveSnapshotForItem):
        (WebKit::ViewGestureController::endSwipeGesture):
        Use the new name, ViewSnapshot.

        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshot::ViewSnapshot):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::~ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::snapshottingContext):
        Use a custom CAContext for snapshotting so that snapshots don't
        disappear when the main context is destroyed on hibernation.

        (WebKit::ViewSnapshotStore::removeSnapshotImage):
        (WebKit::ViewSnapshotStore::pruneSnapshots):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        (WebKit::ViewSnapshotStore::getSnapshot):
        (WebKit::ViewSnapshotStore::discardSnapshots):
        (WebKit::ViewSnapshot::clearImage):
        (WebKit::ViewSnapshot::hasImage):
        (WebKit::createIOSurfaceFromImage): Deleted.
        (WebKit::ViewSnapshotStore::Snapshot::clearImage): Deleted.
        (WebKit::ViewSnapshotStore::Snapshot::hasImage): Deleted.
        Cache by image size instead of counts.

        * WebKit2.xcodeproj/project.pbxproj:

2014-05-04  Pratik Solanki  <psolanki@apple.com>

        Reduce calls to CFURLCacheCopySharedURLCache
        https://bugs.webkit.org/show_bug.cgi?id=132464
        <rdar://problem/16806694>

        Address review comments by collapsing multi-line code into a single ASSERT.

        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):

2014-05-04  Pratik Solanki  <psolanki@apple.com>

        Shortcircuit shouldUseCredentialStorage callback
        https://bugs.webkit.org/show_bug.cgi?id=132308
        <rdar://problem/16806708>

        Reviewed by Alexey Proskuryakov.

        If we are going to return true from the shouldUseCredentialStorage callback then we don't
        really need to have CFNetwork/Foundation call us. We can just disable the callback and
        CFNetwork will assume true. Add a separate subclass that implements this callback when we
        need to return false. We can also eliminate the corresponding async callbacks. This avoids
        pingponging between dispatch queue and main thread in the common case.

        No new tests because no change in functionality.

        * NetworkProcess/NetworkResourceLoader.cpp: Remove shouldUseCredentialStorageAsync() callbacks.
        * NetworkProcess/NetworkResourceLoader.h:

2014-05-04  Beth Dakin  <bdakin@apple.com>

        Top content inset: Margin tiles should not display in the inset area when pinned 
        to the top of the page
        https://bugs.webkit.org/show_bug.cgi?id=132535
        -and corresponding-
        <rdar://problem/16613039>

        Reviewed by Simon Fraser.

        Encode and decode the ScrollingStateScrollingNode’s m_topContentInset even though 
        we don’t use it for anything yet. Since the headerLayer and footerLayer are not 
        encoded or decoded yet, I did not encode/decode the insetClipLayer yet, which, 
        like the header and footer layers, would not yet be used. 
        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):

2014-05-03  Commit Queue  <commit-queue@webkit.org>

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

        broke ~15 tests on WK2 debug (Requested by kling on #webkit).

        Reverted changeset:

        "Shortcircuit shouldUseCredentialStorage callback"
        https://bugs.webkit.org/show_bug.cgi?id=132308
        http://trac.webkit.org/changeset/168232

2014-05-03  Tim Horton  <timothy_horton@apple.com>

        [iOS] REGRESSION (WebKit2): Page isn't clipped properly during back/forward swipe
        https://bugs.webkit.org/show_bug.cgi?id=132538
        <rdar://problem/16266027>

        Reviewed by Simon Fraser.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureController.h:
        Add a clipping layer above the live swipe layer, which explicitly clips to bounds.

2014-05-02  Pratik Solanki  <psolanki@apple.com>

        Shortcircuit shouldUseCredentialStorage callback
        https://bugs.webkit.org/show_bug.cgi?id=132308
        <rdar://problem/16806708>

        Reviewed by Alexey Proskuryakov.

        If we are going to return true from the shouldUseCredentialStorage callback then we don't
        really need to have CFNetwork/Foundation call us. We can just disable the callback and
        CFNetwork will assume true. Add a separate subclass that implements this callback when we
        need to return false. We can also eliminate the corresponding async callbacks. This avoids
        pingponging between dispatch queue and main thread in the common case.

        No new tests because no change in functionality.

        * NetworkProcess/NetworkResourceLoader.cpp: Remove shouldUseCredentialStorageAsync() callbacks.
        * NetworkProcess/NetworkResourceLoader.h:

2014-05-02  Pratik Solanki  <psolanki@apple.com>

        Reduce calls to CFURLCacheCopySharedURLCache
        https://bugs.webkit.org/show_bug.cgi?id=132464
        <rdar://problem/16806694>

        Reviewed by Alexey Proskuryakov.

        CFURLCacheCopySharedURLCache grabs a mutex and can sometimes block. Avoid that by stashing
        the cache reference in a static.

        * NetworkProcess/NetworkResourceLoader.h: Coalesce ifdef'd code.
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::tryGetShareableHandleFromSharedBuffer):
        (WebKit::NetworkResourceLoader::willCacheResponseAsync): Use more correct ifdef for
        Foundation based callback.

2014-05-03  Sam Weinig  <sam@webkit.org>

        [Cocoa WebKit2] Add basic _WKWebsiteDataStore implementation
        https://bugs.webkit.org/show_bug.cgi?id=132526

        Reviewed by Anders Carlsson.

        - Renames WKSession to _WKWebsiteDataStore to better reflect its intended use (renaming
          the implementation object will come later).
        - Makes _WKWebsiteDataStore work as a wrapped Objective-C object.
        - Adds the ability to set a _WKWebsiteDataStore on the WKWebViewConfiguration.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKSession.h:
        * UIProcess/API/Cocoa/WKSession.mm:
        (-[WKSession dealloc]): Deleted.
        (-[WKSession ephemeral]): Deleted.
        (-[WKSession API::]): Deleted.
        * UIProcess/API/Cocoa/WKSessionInternal.h:
        (WebKit::wrapper): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _websiteDataStore]):
        (-[WKWebViewConfiguration _setWebsiteDataStore:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKSession.h.
        * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKSession.mm.
        (+[_WKWebsiteDataStore nonPersistentDataStore]):
        (-[_WKWebsiteDataStore isNonPersistentDataStore]):
        (-[WKSession ephemeral]): Deleted.
        * UIProcess/API/Cocoa/_WKWebsiteDataStoreInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKSessionInternal.h.
        * WebKit2.xcodeproj/project.pbxproj:

2014-05-03  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Assertion in PlatformCAFilters::setFiltersOnLayer with animated reference filter
        https://bugs.webkit.org/show_bug.cgi?id=132528
        <rdar://problem/16671660>

        Reviewed by Tim Horton.
        
        Allow PASSTHROUGH filters to be encoded and sent to the UI process; they can be set
        on layers as the result of a filter animation using a reference filter, and just get
        ignored anyway, but encoding them maintains consistency of the filters list.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<FilterOperation>::encode): Assert during encoding if
        we try to encode a NONE or REFERENCE filter (to match the decoding assertions).
        (IPC::decodeFilterOperation): Allow decoding of PASSTHROUGH filters. Have
        trying to decode a NONE or REFERENCE filter mark the message as invalid.
        (IPC::ArgumentCoder<IDBKeyData>::decode): Mark the message invalid when receiving
        unexpected key types.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<): Have the logging not crash if
        a filter is null (should never happen).

2014-05-02  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove unused WKErrorRecoveryAttempting
        https://bugs.webkit.org/show_bug.cgi?id=132503

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (didFailProvisionalLoadWithErrorForFrame):
        (didFailLoadWithErrorForFrame):
        (createErrorWithRecoveryAttempter): Deleted.
        (-[WKBrowsingContextController attemptRecoveryFromError:]): Deleted.
        * UIProcess/API/Cocoa/WKErrorRecoveryAttempting.m: Removed.
        * UIProcess/API/Cocoa/_WKFormDelegate.h:
        * WebKit2.xcodeproj/project.pbxproj:

2014-05-02  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2) Need to support reanalyze button for Chinese Traditional.
        https://bugs.webkit.org/show_bug.cgi?id=132504
        <rdar://problem/16778862>

        Reviewed by Benjamin Poulain.

        For traditional Chinese we support reanalyzing of the text to perform
        transformations on the text based on the selected language and keyboard.
        This is done by pressing the Reanalyze button on the system
        menu. This patch adds the necessary code to canPerformAction to enable
        the button when appropriate as well as the implementation of the action
        itself.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _reanalyze:]):
        (-[WKContentView canPerformAction:withSender:]):

2014-05-02  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2) Need to support transliterate chinese button (简⇄繁) for Traditional Chinese.
        https://bugs.webkit.org/show_bug.cgi?id=132500
        <rdar://problem/16778870>

        Reviewed by Benjamin Poulain.

        For traditional Chinese we support the transliterate to simplified Chinese.
        This is done by pressing the 简⇄繁 button on the system
        menu. This patch adds the necessary code to canPerformAction to enable
        the button when appropriate as well as the implementation of the action
        itself.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _transliterateChinese:]):
        (-[WKContentView canPerformAction:withSender:]):

2014-05-02  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen UI does not appear after WebProcess has crashed
        https://bugs.webkit.org/show_bug.cgi?id=132442

        Reviewed by Darin Adler.

        Cleanup WebVideoFullscreenManagerProxy after a WebProcess crash.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::reattachToWebProcess):
        recreate WebVideoFullscreenManagerProxy after a WebProcess crash.

        (WebKit::WebPageProxy::resetState):
        invalidate and release WebVideoFullscreenManagerProxy on crash.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::~WebVideoFullscreenManagerProxy):
        don't assume m_page is valid.

        (WebKit::WebVideoFullscreenManagerProxy::invalidate):
        do cleanup invalidation in reponse to a WebProcess crash.

2014-05-02  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] More animation madness for when the extendedBackground is modified in an animation block
        https://bugs.webkit.org/show_bug.cgi?id=132497

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (updateTopAndBottomExtendedBackgroundExclusionIfNecessary):
        Do not early return when _extendedBackgroundExclusionInsets.left is empty. That way, if executed in an animation block,
        the top of bottom view will animate from their current size to an empty width.

        When creating the layer, set up their height without animation. Otherwise it is possible to see the height animating
        while the left inset is animating.

        (-[WKWebView _setExtendedBackgroundExclusionInsets:]):
        When replacing the scrollview, make sure the frame and color are not animated. Otherwise the transition between
        scrollView and _mainExtendedBackgroundView can be visible if _setExtendedBackgroundExclusionInsets: is invoked
        in an animation block.

        (-[WKWebView _endAnimatedResize]):
        Nuke the top and bottom insets when possible. [WKWebView _endAnimatedResize] is unfrequent, so it is a good opportunity
        to free the memory.

2014-05-02  Alexey Proskuryakov  <ap@apple.com>

        Remove Blob contentDisposition handling
        https://bugs.webkit.org/show_bug.cgi?id=132490

        Reviewed by Sam Weinig.

        * Shared/FileAPI/BlobRegistrationData.cpp:
        (WebKit::BlobRegistrationData::encode):
        (WebKit::BlobRegistrationData::decode):

2014-05-02  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Adapt the rubberband constraints when the page get smaller than the scrollview - insets
        https://bugs.webkit.org/show_bug.cgi?id=132457

        Reviewed by Enrica Casucci.

        It is quite common for us to have a WKContentView that is scalled smaller than the WKWebView, content
        insets included.

        In those cases, update the constraints to fit the content properly in the view.

        * UIProcess/ios/WKScrollView.mm:
        (valuesAreWithinOnePixel):
        (-[WKScrollView _rubberBandOffsetForOffset:maxOffset:minOffset:range:outside:]):

2014-05-02  Mark Rowe  <mrowe@apple.com>

        -[_WKThumbnailView _requestSnapshotIfNeeded] assumes that taking a snapshot will always succeed
        <https://webkit.org/b/132489> / <rdar://problem/16704660>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _requestSnapshotIfNeeded]): Don't attempt to create a CGImageRef if we failed
        to create a ShareableBitmap. This handles both the callback receiving a null Handle and a failure
        within ShareableBitmap::create.

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

        Clean up FormDataElement
        https://bugs.webkit.org/show_bug.cgi?id=132483

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::encode):

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

        Add and implement KeyedDecoder::decodeBytes
        https://bugs.webkit.org/show_bug.cgi?id=132479

        Reviewed by Tim Horton.

        * Shared/cf/KeyedDecoder.cpp:
        (WebKit::KeyedDecoder::decodeBytes):
        * Shared/cf/KeyedDecoder.h:

2014-05-02  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] WebKit2 File Upload Support
        https://bugs.webkit.org/show_bug.cgi?id=132024

        Reviewed by Enrica Casucci.

        * Configurations/WebKit2.xcconfig:
        Include MobileCoreServices on iOS for kUTTypeImage/kUTTypeMovie.

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

        * UIProcess/WebOpenPanelResultListenerProxy.h:
        * UIProcess/WebOpenPanelResultListenerProxy.cpp:
        (WebKit::filePathsFromFileURLs):
        (WebKit::WebOpenPanelResultListenerProxy::chooseFiles):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::runOpenPanel):
        (WebKit::WebPageProxy::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        * WebProcess/WebPage/WebOpenPanelResultListener.h:
        * WebProcess/WebPage/WebOpenPanelResultListener.cpp:
        (WebKit::WebOpenPanelResultListener::didChooseFilesWithDisplayStringAndIcon):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChooseFilesForOpenPanelWithDisplayStringAndIcon):
        Message forwarding for choosing files and providing a display string and icon,
        leading down to the existing WebCore FileChooser method.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleRunOpenPanel):
        Add a default handler for file open panel on iOS.
        Forwards to the content view.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView lastInteractionLocation]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _longPressRecognized:]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _doubleTapRecognized:]):
        (-[WKContentView _twoFingerDoubleTapRecognized:]):
        Keep track of the last interaction location. This matches previous behavior
        of showing the file upload popover where the user tapped, to handle
        cases where the <input> is hidden.

        (-[WKContentView _showRunOpenPanel:resultListener:]):
        (-[WKContentView fileUploadPanelDidDismiss:]):
        Handle showing the cleaning up after the file upload panel.

        * UIProcess/ios/forms/WKFileUploadPanel.h:
        * UIProcess/ios/forms/WKFileUploadPanel.mm: Added.
        (squareCropRectForSize):
        (squareImage):
        (thumbnailSizedImageForImage):
        (-[_WKFileUploadItem isVideo]):
        (-[_WKFileUploadItem fileURL]):
        (-[_WKFileUploadItem displayImage]):
        (-[_WKImageFileUploadItem initWithFilePath:originalImage:]):
        (-[_WKImageFileUploadItem isVideo]):
        (-[_WKImageFileUploadItem fileURL]):
        (-[_WKImageFileUploadItem displayImage]):
        (-[_WKVideoFileUploadItem initWithFilePath:mediaURL:]):
        (-[_WKVideoFileUploadItem isVideo]):
        (-[_WKVideoFileUploadItem fileURL]):
        (-[_WKVideoFileUploadItem displayImage]):
        Helper class for each image picker selection. Knows how to get
        a file URL and thumbnail display image for the item.

        (-[WKFileUploadPanel initWithView:]):
        (-[WKFileUploadPanel dealloc]):
        (-[WKFileUploadPanel _dispatchDidDismiss]):
        (-[WKFileUploadPanel _cancel]):
        (-[WKFileUploadPanel _chooseFiles:displayString:iconImage:]):
        Lifetime of the upload panel requires that either cancel or choose
        must happen as we go through the file picking process.

        (-[WKFileUploadPanel presentWithParameters:WebKit::resultListener:WebKit::]):
        (-[WKFileUploadPanel dismiss]):
        API to show or dismiss the panel.

        (-[WKFileUploadPanel _dismissDisplayAnimated:]):
        Helper to clean up the UI as it progresses or completes no matter the device idiom.

        (-[WKFileUploadPanel _presentPopoverWithContentViewController:animated:]):
        (-[WKFileUploadPanel _presentFullscreenViewController:animated:]):
        UI presentation for the appropriate idiom.

        (-[WKFileUploadPanel _mediaTypesForPickerSourceType:]):
        (-[WKFileUploadPanel _showMediaSourceSelectionSheet]):
        (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]):
        Showing the action sheet or image picker.

        (-[WKFileUploadPanel popoverControllerDidDismissPopover:]):
        (-[WKFileUploadPanel _willMultipleSelectionDelegateBeCalled]):
        (-[WKFileUploadPanel imagePickerController:didFinishPickingMediaWithInfo:]):
        (-[WKFileUploadPanel imagePickerController:didFinishPickingMultipleMediaWithInfo:]):
        (-[WKFileUploadPanel imagePickerControllerDidCancel:]):
        Action sheet or image picker handlers.

        (-[WKFileUploadPanel _processMediaInfoDictionaries:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _processMediaInfoDictionaries:atIndex:processedResults:processedImageCount:processedVideoCount:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):
        (-[WKFileUploadPanel _displayStringForPhotos:videos:]):
        Processing selections from the image picker to FileUploadItems.

2014-05-01  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Animations on vox.com look wrong
        https://bugs.webkit.org/show_bug.cgi?id=132462
        <rdar://problem/16731884>

        Reviewed by Sam Weinig.
        
        PlatformCALayerRemote was managing animations incorrectly; aninations
        would stick around in m_properties.addedAnimations and get added a second
        time by mistake.
        
        Animations have to be managed a little differently to other properties,
        since they are not steady-state things. A given commit has to send over
        the added and removed animations, and then clear the layer properties.
        
        Do this by adding PlatformCALayerRemote::didCommit(), which is called
        after the layer properties have been encoded, and have it clear the lists
        of added and removed animations.
        
        removeAnimationForKey() also has to remove the animation from addedAnimations
        so that an add/remove in the same commit doesn't send the animation to the
        UI process.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::didCommit):
        (WebKit::PlatformCALayerRemote::removeAnimationForKey):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):

2014-05-01  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Can't scroll on gatesnotes.com 
        https://bugs.webkit.org/show_bug.cgi?id=132459
        <rdar://problem/16770909>

        Reviewed by Benjamin Poulain.
        
        The custom UIView hit-testing code was finding views that were created by
        the compositing code for clipping, above the UIScrollViews. We only ever
        need to find UIScrollViews here for touch overflow-scrolling, so constrain
        the hit-testing code to only return UIScrollViews.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (-[UIView _recursiveFindDescendantScrollViewAtPoint:withEvent:]):
        (-[UIView _findDescendantViewAtPoint:withEvent:]):
        (-[UIView _recursiveFindDescendantViewAtPoint:withEvent:]): Deleted.

2014-05-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        REGRESSION(r168118): [GTK] build broken due to shouldTrackVisitedLinks
        https://bugs.webkit.org/show_bug.cgi?id=132447

        Unreviewed GTK build fix.

        shouldTrackVisitedLinks was removed on r168118.
        Visited link coloring works as expected after this change.

        * UIProcess/gtk/WebContextGtk.cpp:
        (WebKit::WebContext::platformInitializeWebProcess): Remove
        shouldTrackVisitedLinks parameter.

2014-05-01  Enrica Casucci  <enrica@apple.com>

        REGRESSION (WebKit2) Need to support Learn button.
        https://bugs.webkit.org/show_bug.cgi?id=132454
        <rdar://problem/16778889>

        Reviewed by Benjamin Poulain.

        For traditional Chinese we support the ability to add shortcuts
        for typing. This is done by pressing the Learn button on the system
        menu. This patch adds the necessary code to canPerformAction to enable
        the button when appropriate as well as the implementation of the action
        itself.
        It also adds a check for the Replace button not to be shown when the
        selection only contains CJ characters.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _addShortcut:]):
        (-[WKContentView canPerformAction:withSender:]):

2014-05-01  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Tweak the extended background exclusion for MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=132449

        Reviewed by Beth Dakin.

        Some tweaks for Mobile:
        -Use UIViews instead of CALayers to have the same animation timing as the top views.
        -The left extended background insets should not exclude the top and bottom insets.

        Since this code is in the middle of 2 hot paths, also added some performance tweaks.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        In the normal case, we do not have extended background exclusion. To avoid creating a background view, we use
        the scrollview to render the background.
        The separate background view is created lazily if needed.

        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _frameOrBoundsChanged]):
        (updateTopAndBottomExtendedBackgroundExclusionIfNecessary):
        This create the top and bottom extended background view as needed and update their frames for the current insets.

        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _setExtendedBackgroundExclusionInsets:]):
        When an exclusion inset is needed, create a view for it, transfer the color from the ScrollView, and reset the color
        of the scrollview.

2014-05-01  Alexey Proskuryakov  <ap@apple.com>

        Move size computation for Blob constructor into BlobRegistryImpl
        https://bugs.webkit.org/show_bug.cgi?id=132439

        Reviewed by Sam Weinig.

        Plumbing to make this version of registerBlobURL synchronous for now.
        I expect to make it async again when data structures on client side are simplified.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURL):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURL):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURL):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2014-05-01  Beth Dakin  <bdakin@apple.com>

        REGRESSION(168053): Repro crash navigating to another page after selecting phone 
        numbers on a page
        https://bugs.webkit.org/show_bug.cgi?id=132444
        -and corresponding-
        <rdar://problem/16787285>

        Reviewed by Darin Adler.

        Missing null-check.
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect):

2014-05-01  Anders Carlsson  <andersca@apple.com>

        Remove WKBundleSetShouldTrackVisitedLinks and associate code
        https://bugs.webkit.org/show_bug.cgi?id=132441

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
        (WKBundleSetShouldTrackVisitedLinks): Deleted.
        * WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setShouldTrackVisitedLinks): Deleted.
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::addVisitedLink):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::setShouldTrackVisitedLinks): Deleted.
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::shouldTrackVisitedLinks): Deleted.

2014-05-01  Anders Carlsson  <andersca@apple.com>

        window.testRunner.keepWebHistory() should update the UI process state
        https://bugs.webkit.org/show_bug.cgi?id=132440

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetAddsVisitedLinks):
        (WKPageSetAddsVisitedLinks):
        * UIProcess/API/C/WKPagePrivate.h:

2014-05-01  Filip Pizlo  <fpizlo@apple.com>

        Roll out r60161.

        Rubber stamped by Mark Hahnenberg.
        
        This breaks our debugging workflow.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):

2014-05-01  Anders Carlsson  <andersca@apple.com>

        WKWebView doesn't track visited links (for visited link coloring)
        https://bugs.webkit.org/show_bug.cgi?id=132438
        <rdar://problem/16704519>

        Reviewed by Dan Bernstein.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/APIHistoryClient.h:
        (API::HistoryClient::addsVisitedLinks):
        (API::HistoryClient::shouldTrackVisitedLinks): Deleted.
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetHistoryClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _addsVisitedLinks]):
        (-[WKWebView _setAddsVisitedLinks:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]):
        * UIProcess/Cocoa/HistoryClient.h:
        * UIProcess/Cocoa/HistoryClient.mm:
        (WebKit::HistoryClient::shouldTrackVisitedLinks): Deleted.
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::addVisitedLinkHashFromPage):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/VisitedLinkProvider.messages.in:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setHistoryClient):
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::processes):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::addsVisitedLinks):
        (WebKit::WebPageProxy::setAddsVisitedLinks):
        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::addVisitedLink):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-05-01  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] The highlight view needs to be in WKWebView coordinates
        https://bugs.webkit.org/show_bug.cgi?id=132435
        <rdar://problem/16708861>

        Reviewed by Tim Horton.

        _UIHighlightView needs to be in WKWebView coordinates so that it render unscaled for any page scale factor.
        The view needs to be a child of WKContentView so that it moves/scales with the page.

        To fix the issue, add an inverse transform root layer for the hightlight, and scale the coordinates to their
        inverse scaled counterpart.

        The scale is not updated live with the scaling of WKContentView but that should be fine since the view disappear
        on any scaling operation (and I would prefer not add live painting during scaling animation).

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView _didGetTapHighlightForRequest:color:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):
        (-[WKContentView _cancelInteraction]):

2014-05-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] There are many warnings with software backend
        https://bugs.webkit.org/show_bug.cgi?id=132422

        Reviewed by Gyuyoung Kim.

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

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        Roll out fix for https://bugs.webkit.org/show_bug.cgi?id=131637:
        Clean up unnecessary methods in the BackForwardClient interface

        It broke a regression test and an API test.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        (WebKit::InjectedBundleBackForwardList::clear):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp:
        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy):
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount):
        (WebKit::WebBackForwardListProxy::forwardListCount):
        (WebKit::WebBackForwardListProxy::close):
        (WebKit::WebBackForwardListProxy::clear):
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        (WebKit::WebBackForwardListProxy::create):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/ios/WebBackForwardListProxyIOS.mm: Copied from Source/WebKit2/WebProcess/WebPage/ios/WebBackForwardListProxyIOS.mm.

2014-04-30  Brady Eidson  <beidson@apple.com>

        Only reveal selection service UI after a short delay.
        <rdar://problem/16777346> and https://bugs.webkit.org/show_bug.cgi?id=132418

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/SelectionOverlayController.cpp:
        (WebKit::SelectionOverlayController::SelectionOverlayController):
        (WebKit::SelectionOverlayController::destroyOverlay): Also stop the hover timer.
        (WebKit::SelectionOverlayController::selectionRectsDidChange): Mark the highlight as dirty.
        (WebKit::SelectionOverlayController::hoverTimerFired): If the mouse is still over the highlight,
          set the visible flag and setNeedsDisplay().
        * WebProcess/WebPage/SelectionOverlayController.h:

        * WebProcess/WebPage/mac/SelectionOverlayControllerMac.mm:
        (WebKit::SelectionOverlayController::drawRect): Recreate the highlight if it exists but
          is marked as dirty. After doing that, possibly reset the hover timer.
          Also, only performing the actual drawing if the visible flag is set.
        (WebKit::SelectionOverlayController::mouseEvent): If the mouse moves on or off the highlight,
          start or stop the hover timer accordingly.
        (WebKit::SelectionOverlayController::mouseHoverStateChanged): Handle starting/stopping the
          hover timer.
        (WebKit::SelectionOverlayController::clearHighlight): Deleted.

2014-04-30  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Animated resize incorrectly assumes the layout width is the same as the view width
        https://bugs.webkit.org/show_bug.cgi?id=132373
        <rdar://problem/16762178>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        Fix a couple of bugs when the left/right obscured insets change, and/or when the minimum layout size
        is narrower than the view itself.

        In order:
        -We need to perfom and update if the insets change since the unobscuredRect will also change.
        -The min/max zoom scale should be based on the minimum layout size, that's the definition of minimum layout size
         in scrollview coordinate :)
        -The old web view width in content coordinate could be narrower than the old view bounds if there are left or right
         insets.

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        Remove ENABLE_PLUGIN_PROXY_FOR_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=132396

        Reviewed by Eric Carlson.
        
        Remove ENABLE_PLUGIN_PROXY_FOR_VIDEO and related code.

        * Configurations/FeatureDefines.xcconfig:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createMediaPlayerProxyPlugin): Deleted.
        (WebKit::WebFrameLoaderClient::hideMediaPlayerProxyPlugin): Deleted.
        (WebKit::WebFrameLoaderClient::showMediaPlayerProxyPlugin): Deleted.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-04-30  Brady Eidson  <beidson@apple.com>

        If there are no services available, do not show the service controls UI
        <rdar://problem/16735665> and https://bugs.webkit.org/show_bug.cgi?id=132410

        Reviewed by Tim Horton.

        Add a lightweight class that lazily polls the appropriate APIs for whether or not appropriate services
        are installed and usable on the system:
        * UIProcess/mac/ServicesController.h: Added.
        (WebKit::ServicesController::imageServicesExist):
        (WebKit::ServicesController::selectionServicesExist):
        * UIProcess/mac/ServicesController.mm: Added.
        (WebKit::ServicesController::shared):
        (WebKit::ServicesController::ServicesController):
        (WebKit::ServicesController::refreshExistingServices):
        (WebKit::ServicesController::refreshExistingServicesTimerFired):

        Add "image services exist" and "selection services exist" parameters:
        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        (WebKit::WebContext::refreshExistingServices): Called when the context menu proxy realizes that
          services no longer exist.
        * UIProcess/WebContext.h:

        Each WebProcess hangs on to its own copy of the flags for whether or not the services exist:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeWebProcess):
        (WebKit::WebProcess::setEnabledServices):
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::imageServicesExist):
        (WebKit::WebProcess::selectionServicesExist):

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu): If the menu creation failed, the set of services
          on the system must have changed. So ask the WebContext to refresh them.

        * WebProcess/WebPage/SelectionOverlayController.cpp:
        (WebKit::SelectionOverlayController::selectionRectsDidChange): If services don't exist, don't create an
          overlay (and destroy any existing overlay!)

        * WebProcess/WebPage/mac/SelectionOverlayControllerMac.mm:
        (WebKit::SelectionOverlayController::drawRect): If services don't exist, don't draw, and destroy the overlay.

        * WebProcess/WebProcess.messages.in:
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-30  Gavin Barraclough  <baraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=132415
        Fix snapshotting on WebKit2

        Reviewed by Geoff Garen

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
            - Use a VisibilityToken to keep the process runnable.

2014-04-30  Gavin Barraclough  <baraclough@apple.com>

        Fix PageVisibility on iOS
        https://bugs.webkit.org/show_bug.cgi?id=132393

        Rubber stamped by Tim Horton

        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewVisibleOrOccluded):
        (WebKit::PageClientImpl::isVisuallyIdle):
            - m_contentView -> m_webView

2014-04-30  Benjamin Poulain  <benjamin@webkit.org>

        [iOS][WK2] Add a SPI to exclude the extended background from some areas of WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=132406
        <rdar://problem/16762197>

        Reviewed by Beth Dakin.

        Move the extended background to a separate layer bellow the UIScrollView.

        The geometry of that layer is then changed based on ExtendedBackgroundExclusionInsets
        as needed.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _setExtendedBackgroundExclusionInsets:]):
        (-[WKWebView _extendedBackgroundExclusionInsets]):
        (-[WKWebView pageExtendedBackgroundColor]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-30  Simon Fraser  <simon.fraser@apple.com>

        Fix build error when building for iOS simulator.

        * UIProcess/ios/ProcessAssertion.mm:

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        Move Blob.slice() implementation into BlobRegistryImpl
        https://bugs.webkit.org/show_bug.cgi?id=132402

        Reviewed by Anders Carlsson.

        * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp:
        (WebKit::NetworkBlobRegistry::registerBlobURLForSlice):
        * NetworkProcess/FileAPI/NetworkBlobRegistry.h:
        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::registerBlobURLForSlice):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * WebProcess/FileAPI/BlobRegistryProxy.cpp:
        (WebKit::BlobRegistryProxy::registerBlobURLForSlice):
        * WebProcess/FileAPI/BlobRegistryProxy.h:

2014-04-30  Beth Dakin  <bdakin@apple.com>

        Phone number data detection UI is offset for iframes, pages with topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=132372
        -and corresponding-
        <rdar://problem/16651235>

        Reviewed by Tim Horton.

        Make the overlay an OverlayType::Document, which will keep everything relative to 
        the main Document’s coordinates. 
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded):

        Make frames work by converting to the main  document’s coordinate space.
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect):

2014-04-30  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Unnecessary explicit initialization of LayoutUnit from r167985.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        Darin points out that I can just use “/2” instead of “/LayoutUnit(2.0)”.

2014-04-30 David Hyatt  <hyatt@apple.com>

        [New Multicolumn] Enable new multi-column mode
        https://bugs.webkit.org/show_bug.cgi?id=131825

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesStore.h:

2014-04-30  Brian J. Burg  <burg@cs.washington.edu>

        Clean up unnecessary methods in the BackForwardClient interface
        https://bugs.webkit.org/show_bug.cgi?id=131637

        Reviewed by Andreas Kling.

        Remove stubs for iOS-specific methods in the BackForwardClient interface.

        Construct a WebBackForwardListProxy directly, and make the WebCore page
        own the BackForwardClient instance. Convert uses of backForward().client()
        to accept references instead of raw pointers.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/InjectedBundleBackForwardList.cpp:
        (WebKit::InjectedBundleBackForwardList::clear):
        * WebProcess/WebPage/WebBackForwardListProxy.cpp: Store a reference to
        WebCore::Page instead of a pointer.
        (WebKit::WebBackForwardListProxy::WebBackForwardListProxy):
        (WebKit::WebBackForwardListProxy::create): Deleted.
        (WebKit::WebBackForwardListProxy::addItem):
        (WebKit::WebBackForwardListProxy::goToItem):
        (WebKit::WebBackForwardListProxy::itemAtIndex):
        (WebKit::WebBackForwardListProxy::backListCount):
        (WebKit::WebBackForwardListProxy::forwardListCount):
        (WebKit::WebBackForwardListProxy::close):
        (WebKit::WebBackForwardListProxy::clear):
        (WebKit::WebBackForwardListProxy::isActive):
        * WebProcess/WebPage/WebBackForwardListProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/ios/WebBackForwardListProxyIOS.mm: Removed.

2014-04-30  Gavin Barraclough  <baraclough@apple.com>

        Fix PageVisibility on iOS
        https://bugs.webkit.org/show_bug.cgi?id=132393

        Reviewed by Andreas Kling.

        Currently page visibility API doesn't work correctly on WK2 iOS for a few reasons,
        the most significant of which being that the moment a WKWebView leaves the window
        we'll suspend the content process, which removes the possibility for any notification
        to be delivered. This patch addresses this issue, by allowing the process to run for
        long enough for the notification to be delivered.

        1) Introduce a new class, ProcessThrottler, to encapsulate the process suspension logic.
        2) WebPageProxy uses ProcessThrottler::VisibilityToken to communicate visibility to the throttler.
        3) WebPageProxy tracks pending didUpdateViewState messages to detect when the view state update in
           the web content process has completed.
        4) Distiguish between 'Background' and 'Suspended' states in the ProcessAssertion.

        * Shared/ChildProcessProxy.h:
            - moved m_assertion to NetworkProcessProxy / WebProcessProxy.
        * UIProcess/Network/NetworkProcessProxy.h:
            - added m_assertion.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
            - initialize VisibilityToken state.
        (WebKit::WebPageProxy::reattachToWebProcess):
            - reinitialize VisibilityToken state.
        (WebKit::WebPageProxy::viewStateDidChange):
            - update VisibilityToken, increment m_pendingViewStateUpdates as necessary.
        (WebKit::WebPageProxy::updateVisibilityToken):
            - update the VisibiliyToken based on page visibility, and whether an update is still pending.
        (WebKit::WebPageProxy::didUpdateViewState):
            - detect when a view state change has completed in the web process, and update throttle state as necessary.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::didUpdateViewState): Deleted.
            - moved to .cpp.
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::WebProcessProxy):
            - initialize m_throttler.
        (WebKit::WebProcessProxy::didFinishLaunching):
            - notify the PageThrottler of the new connection.
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::throttler):
            - added accessor.
        (WebKit::WebProcessProxy::updateProcessState): Deleted.
            - moved trottling login to ProcessThrottler.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewWindowActive):
        (WebKit::PageClientImpl::isViewFocused):
        (WebKit::PageClientImpl::isViewVisible):
        (WebKit::PageClientImpl::isViewVisibleOrOccluded):
            - these should only be true when the view is in a window.
        (WebKit::PageClientImpl::isVisuallyIdle):
            - this should only be true when the view is not in a window.
        * UIProcess/ios/ProcessAssertion.h:
        * UIProcess/ios/ProcessAssertion.mm:
        (WebKit::flagsForState):
            - map from enum -> BKSAssertion flags values.
        (WebKit::ProcessAssertion::ProcessAssertion):
            - use flagsForState (add support for Suspended state).
        (WebKit::ProcessAssertion::setState):
            - use flagsForState (add support for Suspended state).
        * UIProcess/ios/ProcessThrottler.h: Added.
        (WebKit::ProcessThrottler::VisibilityToken::visibility):
            - accessor.
        (WebKit::ProcessThrottler::VisibilityToken::setVisibility):
            - update Visibility value; update the token as necessary.
        (WebKit::ProcessThrottler::ProcessThrottler):
            - constructor; does not take an assention until didConnnectToProcess is called.
        (WebKit::ProcessThrottler::visibilityToken):
            - create a VisibilityToken.
        (WebKit::ProcessThrottler::didConnnectToProcess):
            - take an assertion.
        (WebKit::ProcessThrottler::weakPtr):
            - create a weak pointer, used for references from VisibilityToken to the throttler.
        (WebKit::ProcessThrottler::assertionState):
            - determine the correct AssertionState for the process, based on current visibility.
        (WebKit::ProcessThrottler::updateAssertion):
            - update assertion, called in response to visibility change.
        * UIProcess/ios/ProcessThrottler.mm: Added.
        (WebKit::ProcessThrottler::VisibilityToken::VisibilityToken):
            - constructor.
        (WebKit::ProcessThrottler::VisibilityToken::~VisibilityToken):
            - set visibility to hidden to reset.
        (WebKit::ProcessThrottler::VisibilityToken::hideTimerFired):
            - automatically decay from Hiding -> Hidden on a timeout.
        (WebKit::ProcessThrottler::VisibilityToken::setVisibilityInternal):
            - update counters tracking visibility in ProcessThrottler.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didMoveToWindow]):
            - This affects all view state flags, not just the 'InWindow' state.
              If the view moves out of a window request a reply from the WebContent - we use this
              to detect when the page visibility event has completed.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState): Deleted.
            - removed.
        * WebKit2.xcodeproj/project.pbxproj:
            - added new files.

2014-04-30  Anders Carlsson  <andersca@apple.com>

        Preemptive header fixes for when WebKit.framework is going to provide the modern API
        https://bugs.webkit.org/show_bug.cgi?id=132394

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBrowsingContextPolicyDelegate.h:
        (NS_ENUM):
        Delete WKNavigationType for now. Ultimately the entire delegate should be removed.

        * UIProcess/API/Cocoa/WKPreferences.h:
        Add a header guard so we can avoid importing WKPreferences.h more than once.

        * WebKit2.xcodeproj/project.pbxproj:
        _WKScriptWorld.h should be private, not public.
        WKScriptMessagePrivate.h and WKUserContentControllerPrivate.h should be private, not project.

2014-04-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Ensure UIProcess checks in to webinspectord after spawning a WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=132389

        Reviewed by Timothy Hatcher.

        We aggregate WebProcess WebView's under the UIProcess. If the UIProcess
        didn't connect to webinspectord these WebViews would have remained
        hidden. Always have the UIProcess connect to webinspectord when it
        spawns a WebProcess and may have a child process holding views that
        it ultimately owns and should display under the UIProcess name.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):

2014-04-30  Zalan Bujtas  <zalan@apple.com>

        [iOS]Subpixel rendering: Extra line of pixels next to the YouTube loading indicator.
        https://bugs.webkit.org/show_bug.cgi?id=132391

        Reviewed by Simon Fraser.

        CG and GraphicsContext clipping should use the same coordinates. Snapping either one
        while leaving the other unsnapped results in clipping mismatch and that may produce
        unpainted areas.

        Not testable.

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

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=132363
        Make Blob RawData immutable

        Reviewed by Anders Carlsson.

        * Shared/FileAPI/BlobRegistrationData.cpp: (WebKit::BlobRegistrationData::decode):
        Create RawData in one step.

2014-04-30  Brady Eidson  <beidson@apple.com>

        Followup to: Handle selection services menu.
        <rdar://problem/16727798> and https://bugs.webkit.org/show_bug.cgi?id=132362

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::setupServicesMenu): Remove an ASSERT from previous version of the patch
          that landed. I’d forgotten to add this stray change to my staging area.

2014-04-30  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Enable runtime feature by default
        https://bugs.webkit.org/show_bug.cgi?id=132189

        Reviewed by Benjamin Poulain.

        * Shared/WebPreferencesStore.h: Remove unneeded changes that
        enable/disable the runtime feature depending on the compilation flag.
        And set it to true by default.
        * UIProcess/gtk/ExperimentalFeatures.cpp: Set it to true by default.

2014-04-30  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Wrong units used in offset calculation from r167961.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        I accidentally mixed and matches LayoutUnits with Ints in offset calculation here.
        It should all just be in LayoutUnits.

2014-04-29  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] When pageScaleFactor * deviceScaleFactor = 1, the tile grid is completely messed up
        https://bugs.webkit.org/show_bug.cgi?id=132368

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::PlatformCALayerRemote):
        PlatformCALayerRemote always initialized the content scale to 1. Since contentsScale is supposed to reflect
        zoomScale * deviceScaleFactor, the value should be 2.

        This was causing bugs whenever the page scale factor was 1/2 on retina device (device scale factor = 2).

        When the page is initialized, GraphicsLayerCA::updateContentsScale(0.5) computes a contentsScale of 1. There is an early
        return on if (contentsScale == m_layer->contentsScale()). Since PlatformCALayerRemote->contentsScale() was incorreclty
        returning one, we were leaving the tile backing unmodified.

        Later, when the transaction is commited, the tile backing would still be default initialized and would render everything
        at the wrong scale.

2014-04-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac] tag the video layers with descriptive name to aid debugging
        https://bugs.webkit.org/show_bug.cgi?id=132371

        Reviewed by Darin Adler.

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode): Set the 
            fullscreen host layer name in a debug build.

2014-04-29  Brady Eidson  <beidson@apple.com>

        Handle selection services menu.
        <rdar://problem/16727798> and https://bugs.webkit.org/show_bug.cgi?id=132362

        Reviewed by Tim Horton.

        Add members for the relevant info for showing a service menu for a selection:
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::controlledDataIsEditable):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::controlledSelectionData):
        (WebKit::ContextMenuContextData::needsServicesMenu):

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::replaceSelectionWithPasteboardData): Changed to allow for multiple types on the overridden pasteboard.
        (WebKit::WebPageProxy::showSelectionServiceMenu):

        Update the services menu code to know the difference between an image service and a selection service:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
        (-[WKSharingServicePickerDelegate sharingService:willShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        (WebKit::WebContextMenuProxyMac::setupServicesMenu):
        (WebKit::WebContextMenuProxyMac::clearServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::setupImageServicesMenu): Deleted.
        (WebKit::WebContextMenuProxyMac::clearImageServicesMenu): Deleted.

        * WebProcess/WebCoreSupport/WebPasteboardOverrides.cpp:
        (WebKit::WebPasteboardOverrides::getDataForOverride):

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::replaceSelectionWithPasteboardData): Changed to allow for multiple types on the overridden pasteboard.
        (WebKit::WebPage::handleSelectionServiceClick): Pass the relevant selection data through to the UIProcess as RTFD data.

        * WebProcess/WebPage/mac/SelectionOverlayControllerMac.mm:
        (WebKit::SelectionOverlayController::handleClick): Notify the WebPage of the click.

2014-04-29  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16745596> [Cocoa] Crash when invoking a method with an unsigned parameter on a remote object
        https://bugs.webkit.org/show_bug.cgi?id=132366

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (encodeInvocation): Handle the 'I' type code. Interpret the 'q' and 'Q' type codes in an
        architecture-independent manner.
        (decodeInvocationArguments): Ditto.

2014-04-29  Roger Fong  <roger_fong@apple.com>

        Don't immediately snapshot plugin to allow for proper dominant plugin detection.
        https://bugs.webkit.org/show_bug.cgi?id=132294.
        <rdar://problem/16745679>

        Reviewed by Dean Jackson.

        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::didInitializePlugin):
        Instead of immediately setting the display state to DisplaySnapshot,
        put it on a timer to let the page fully layout and get hit test properly.

2014-04-28  Roger Fong  <roger_fong@apple.com>

        Plugins hidden by images should autoplay.
        https://bugs.webkit.org/show_bug.cgi?id=132222.
        <rdar://problem/16653536>

        Reviewed by Jon Lee and Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::determinePrimarySnapshottedPlugIn):
        If the image on top of the plugin is similarly sized and similarly positioned as the plugin rect,
        set the plugin to autoplay. This is assuming that the previous snapshot checks have passed as well.

2014-04-29  Filip Pizlo  <fpizlo@apple.com>

        Use LLVM as a backend for the fourth-tier DFG JIT (a.k.a. the FTL JIT)
        https://bugs.webkit.org/show_bug.cgi?id=112840

        Rubber stamped by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:

2014-04-29  Brady Eidson  <beidson@apple.com>

        Change Image Controls replacement to use selection and paste
        <rdar://problem/16302722> and https://bugs.webkit.org/show_bug.cgi?id=131992

        Reviewed by Tim Horton.

        Add a "pasteboard override" mechanism which allows WebKit to keep pasteboard content local
        to the WebProcess and access it there without having to message up to the UI process:
        * WebProcess/WebCoreSupport/WebPasteboardOverrides.cpp: Added.
        (WebKit::WebPasteboardOverrides::sharedPasteboardOverrides):
        (WebKit::WebPasteboardOverrides::WebPasteboardOverrides):
        (WebKit::WebPasteboardOverrides::addOverride):
        (WebKit::WebPasteboardOverrides::removeOverride):
        (WebKit::WebPasteboardOverrides::overriddenTypes):
        (WebKit::WebPasteboardOverrides::getDataForOverride):
        * WebProcess/WebCoreSupport/WebPasteboardOverrides.h: Added.

        Change the pasteboard strategy to consult the pasteboard overrides before consulting the native pasteboard:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::getTypes):
        (WebKit::WebPlatformStrategies::bufferForType):

        Add "replaceSelectionWithPasteboardData" which uses the new pasteboard overrides mechanism
        and then has WebCore perform the replacement:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::replaceSelectionPasteboardName):
        (WebKit::WebPage::replaceSelectionWithPasteboardData):

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::replaceSelectionWithPasteboardData):

        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::page):
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]): Use "replaceSelectionWithPasteboardData".
        (WebKit::WebContextMenuProxyMac::WebContextMenuProxyMac):
        (WebKit::WebContextMenuProxyMac::replaceControlledImage): Deleted.

        Remain other remnants of "replaceControlledImage":
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::replaceControlledImage): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::replaceControlledImage): Deleted.
        * WebProcess/WebPage/WebContextMenu.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::replaceControlledImage): Deleted.

        * WebKit2.xcodeproj/project.pbxproj:

2014-04-29  Tim Horton  <timothy_horton@apple.com>

        Build fix.

        * DatabaseProcess/ios/DatabaseProcessIOS.mm:

2014-04-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2] DatabaseProcess should be sandboxed
        https://bugs.webkit.org/show_bug.cgi?id=132324
        <rdar://problem/15961708>

        Reviewed by Darin Adler.

        * Configurations/WebKit2.xcconfig: Added the profile to the list of files skipped
        on iOS.

        * DatabaseProcess/DatabaseProcess.cpp: (WebKit::DatabaseProcess::initializeDatabaseProcess):
        Consume a sandbox extension for IndexedDB directory (which we get with initialization
        message after entering sandbox).

        * DatabaseProcess/ios: Added.
        * DatabaseProcess/ios/DatabaseProcessIOS.mm: Copied from Source/WebKit2/DatabaseProcess/mac/DatabaseProcessMac.mm.
        Separated from Mac version to match how other processes are implemented.

        * DatabaseProcess/mac/DatabaseProcessMac.mm: (WebKit::DatabaseProcess::initializeProcessName):
        Removed ifdefs.

        * DatabaseProcess/mac/com.apple.WebKit.Databases.sb.in: Added.

        * DerivedSources.make: Generate the profile from .sb.in.

        * Shared/Databases/DatabaseProcessCreationParameters.cpp:
        (WebKit::DatabaseProcessCreationParameters::encode):
        (WebKit::DatabaseProcessCreationParameters::decode):
        * Shared/Databases/DatabaseProcessCreationParameters.h:
        Added a sandbox extension for indexedDatabaseDirectory.

        * Shared/SecurityOriginData.h: Added an unrelated FIXME.

        * UIProcess/WebContext.cpp: (WebKit::WebContext::ensureDatabaseProcess): Create
        a sandbox extension for indexedDatabaseDirectory.

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

2014-04-28  Andy Estes  <aestes@apple.com>

        [iOS] Introduce -didNotHandleTapAsClickAtPoint: to WKUIDelegatePrivate
        https://bugs.webkit.org/show_bug.cgi?id=132316

        Reviewed by Darin Adler.

        One WebKit2 client is interested to know if a tap was not handled by an element that responds to clicks.
        Introduce a new, private WKUIDelegate method telling it that a tap at a location was not handled as a click on
        an element.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::didNotHandleTapAsClick):
        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::didNotHandleTapAsClick):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didNotHandleTapAsClick):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap): Sent Messages::WebPageProxy::DidNotHandleTapAsClick if the tap wasn't handled, no
        node responded to the click event, or the responding node wasn't an element.

2014-04-29  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Avoid Vector copies in WebViewBaseInputMethodFilter::setPreedit()
        https://bugs.webkit.org/show_bug.cgi?id=132323

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp:
        (WebKit::WebViewBaseInputMethodFilter::setPreedit): Inline the Vector object construction into
        the WebPageProxy::setComposition() call to avoid extra Vector copies and moves.

2014-04-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16750708> REGRESSION (r159358): Crash in InjectedBundleHitTestResult::frame
        https://bugs.webkit.org/show_bug.cgi?id=132318

        Reviewed by Andy Estes.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction): Fixed a typo: set
        the source frame, not the destination frame.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Changed to get the
        frame for the action not from a hit test result, because some link activation actions are
        not mouse events, but rather from the event’s target.

2014-04-28  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Restore the scroll position and scale from the HistoryItem (mostly)
        https://bugs.webkit.org/show_bug.cgi?id=132307
        <rdar://problem/16031704>

        Reviewed by Simon Fraser.

        Restore the scroll position and scale on back-forward by restoring the values from HistoryItem.
        This covers the common cases, see <rdar://problem/16031704>.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _didCommitLoadForMainFrame]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLoadForMainFrame]):
        Get rid of the old code restoring the scroll position. This is now done by the WebProcess.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        Update the scrolling tree after invoking didCommitLayerTree() on the WebPageProxy.

        WKContentView and WKWebView states are updated in response to didCommitLayerTree(), the content size
        and scale in particular are set there.

        After that, the content size/scale is in the same state as the layerTree update, and we can scroll
        the content as needed.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::restoreViewState):
        iOS WebKit1 uses a custom restoreViewState(), do the same for WebKit2 since the generic code is #ifdefed out.
        This is also necessary for the main frame's state update.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::restorePageState):
        Restore the scale and position of the main frame. For now, we assume m_userHasChangedPageScaleFactor is set otherwise
        the initial-scale would override the restored value. We will need to fix that, the value should probably be saved with
        the history.

2014-04-28  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] iOS fix after r167867
        https://bugs.webkit.org/show_bug.cgi?id=132302

        Reviewed by Simon Fraser.

        iOS Touch Points uses "phase" for describing the touch points state for historical reasons.
        This patch adds state() as a synonym for phase, and revert r167893.

        * Shared/WebEvent.h:
        (WebKit::WebPlatformTouchPoint::state):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::areAllTouchPointsReleased):

2014-04-28  Andy Estes  <aestes@apple.com>

        Fix a transcription error from r167901.

        When addressing Darin's review feedback, I moved the iteration of dataArray from
        QuickLookDocumentData::append() to WebQuickLookHandleClient::didReceiveDataArray(),
        but I forgot to update the context argument to CFArrayApplyFunction() accordingly.

        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.cpp:
        (WebKit::WebQuickLookHandleClient::didReceiveDataArray):

2014-04-28  Enrica Casucci  <enrica@apple.com>

        [WK2 iOS] Need to show title in the action sheet for images not inside an anchor element.
        https://bugs.webkit.org/show_bug.cgi?id=132304
        <rdar://problem/16535227>

        Reviewed by Benjamin Poulain.

        If the image in not inside an anchor tag, we must use the title attribute as
        title for the action sheet.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):

2014-04-28  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Swipe): Discard snapshots made with a different view size/pixel density
        https://bugs.webkit.org/show_bug.cgi?id=132115

        Reviewed by Simon Fraser.

        We shouldn't try to use snapshots if they no longer match the destination view size.
        To do this, we need an accurate understanding of the topContentInset, both for the Web view,
        and for any custom views, because we don't want to include the inset area in the snapshot,
        and we don't want to reject snapshots that differ from the current view only because they have an inset or not.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _takeViewSnapshot]):
        (-[WKView _setCustomSwipeViewsTopContentInset:]):
        Add and plumb through a topContentInset property to apply to the custom swipe views.
        For simplicitly's sake in the multi-view case, it is applied in window coordinates,
        so clients will have to do conversions if necessary.
        Don't include the top content inset in the snapshot that is taken.

        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::setCustomSwipeViewsTopContentInset):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::windowRelativeBoundsForCustomSwipeViews):
        Apply the aforementioned custom swipe view top content inset.

        (WebKit::ViewGestureController::determineSnapshotLayerParent):
        (WebKit::ViewGestureController::determineLayerAdjacentToSnapshotForParent):
        Factor these out of beginSwipeGesture.

        (WebKit::ViewGestureController::retrieveSnapshotForItem):
        Don't return a snapshot if the current deviceScaleFactor doesn't match that
        at which the snapshot was taken, or if the size of the snapshot doesn't match
        the unobscured part of the snapshot layer (the layer's size sans top content inset).

        (WebKit::layerGeometryFlippedToRoot): Added.
        Determine whether geometry flipping occurs between a layer and the root of the tree it is in.

        (WebKit::ViewGestureController::applyDebuggingPropertiesToSwipeViews):
        Factor out debugging layer properties, and add some borders and backgrounds to our layers.
        I switched to invert instead of blur because blur makes the borders hard to use.

        (WebKit::ViewGestureController::beginSwipeGesture):
        Add an additional layer, the swipeLayer, which is the parent of the swipeSnapshotLayer.
        We use this layer to compensate for geometry flipping, since we don't necessarily
        know the structure of the layer tree ahead of time when inserting snapshots into the
        client's layer tree, in the custom swipe view case.
        The swipe layer is always the full size of the view, including topContentInset, and
        has a white background in order to fill in that space. The snapshot layer is the size
        of the view *excluding* the topContentInset, which should match the size of the snapshot image
        itself (and we reject the image and just paint white if this is not the case).

        (WebKit::ViewGestureController::handleSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        Move and remove the new swipeLayer.

        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Store the deviceScaleFactor at the time the snapshot was taken.
        Fix a bug where the count of snapshots with live images was too high
        because we were failing to decrement it when replacing a snapshot of
        an existing item with a fresh one.

2014-04-28  Enrica Casucci  <enrica@apple.com>

        WK2 iOS: crash when handling a synthetic keyboard event.
        https://bugs.webkit.org/show_bug.cgi?id=132296
        <rdar://problem/16469726>

        Reviewed by Benjamin Poulain.

        Adding a null check, since synthetic keyboard events do not
        have a corresponding platform event. We already do this on OS X.

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

2014-04-24  Andy Estes  <aestes@apple.com>

        [iOS] Implement WebQuickLookHandleClient for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=132157

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/_WKNSFileManagerExtras.h: Added.
        * Shared/API/Cocoa/_WKNSFileManagerExtras.mm: Added.
        (+[NSFileManager _web_createTemporaryFileForQuickLook:]): Called WebCore::createTemporaryFileForQuickLook().
        * Shared/ios/QuickLookDocumentData.cpp: Added.
        (WebKit::QuickLookDocumentData::QuickLookDocumentData):
        (WebKit::QuickLookDocumentData::append): Appened each CFDataRef to m_data and added their sizes to m_size.
        (WebKit::QuickLookDocumentData::decodedData): Returned the combined CFDataRef created by decode().
        Named this method 'decodedData' to indicate that it should only be called on objects populated by decode().
        (WebKit::QuickLookDocumentData::clear): Cleared m_data and reset m_size to 0.
        (WebKit::QuickLookDocumentData::encode): Implemented a custom encoding function to avoid having to combine
        m_data into contiguous memory at encoding time. Encoded m_size then sequentially encoded each member of m_data.
        (WebKit::QuickLookDocumentData::decode): Decoded the byte stream into a single CFDataRef. Eagerly copied the
        decoded data rather than using a DataReference since we know this will outlive the decoder.
        * Shared/ios/QuickLookDocumentData.h: Added.
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didStartLoadForQuickLookDocumentInMainFrame):
        (API::LoaderClient::didFinishLoadForQuickLookDocumentInMainFrame):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::LoaderClient::didStartLoadForQuickLookDocumentInMainFrame):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForQuickLookDocumentInMainFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didStartLoadForQuickLookDocumentInMainFrame):
        (WebKit::WebPageProxy::didFinishLoadForQuickLookDocumentInMainFrame):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::didCreateQuickLookHandle):
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.cpp: Added.
        (WebKit::WebQuickLookHandleClient::WebQuickLookHandleClient): Sent DidStartLoadForQuickLookDocumentInMainFrame
        to WebPageProxy.
        (WebKit::WebQuickLookHandleClient::didReceiveDataArray): Appended dataArray to m_data.
        (WebKit::WebQuickLookHandleClient::didFinishLoading): Sent DidFinishLoadForQuickLookDocumentInMainFrame to
        WebPageProxy and then cleared m_data.
        (WebKit::WebQuickLookHandleClient::didFail): Cleared m_data.
        * WebProcess/WebCoreSupport/ios/WebQuickLookHandleClient.h: Added.
        (WebKit::WebQuickLookHandleClient::create):

2014-04-28  Brady Eidson  <beidson@apple.com>

        Hide service controls for selection behind a runtime switch
        <rdar://problem/16736616> and https://bugs.webkit.org/show_bug.cgi?id=132291

        Reviewed by Tim Horton.

        * Shared/WebPreferencesStore.h:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectionRectsDidChange): Do nothing if the UI is disabled.

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

        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::serviceControlsEnabled):

2014-04-28  Commit Queue  <commit-queue@webkit.org>

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

        caused crashes+timeouts+layout test failures described in the
        bug (Requested by thorton on #webkit).

        Reverted changeset:

        "Coalesce responses on network process side"
        https://bugs.webkit.org/show_bug.cgi?id=132229
        http://trac.webkit.org/changeset/167853

2014-04-28  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS buld.

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

2014-04-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Make subview rebuilding more incremental
        https://bugs.webkit.org/show_bug.cgi?id=132162
        <rdar://problem/16718916>

        Reviewed by Sam Weinig.
        
        Previously we did bulk replacement of subviews, but that triggers
        UIKit to send spurious will/DidMoveToWindow messages, which can
        interfere with UIScrollView scrolling.
        
        Make _web_setSubviews more incremental, only removing
        deleted subviews, adding new ones, and moving existing ones
        into the correct order.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (-[UIView _web_setSubviews:]):

2014-04-24  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] flickery scrolling with overflow-scrolling:touch
        https://bugs.webkit.org/show_bug.cgi?id=132150
        <rdar://problem/16683006>

        Reviewed by Tim Horton.
        
        Maintain a flag that tells us if the user is interacting
        with the UIScrollView, and while set, don't clobber the contentOffset
        via scrolling tree updates.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate initWithScrollingTreeNode:WebKit::]):
        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDecelerating:]): We need this one,
        not scrollViewDidEndScrollingAnimation:, to detect the end of decleration.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndScrollingAnimation:]): Deleted.

2014-04-28  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [X11] Add missing case for mime type application/x-webkit-test-netscape
        https://bugs.webkit.org/show_bug.cgi?id=132278

        Reviewed by Darin Adler.

        Case for x-webkit-test-netscape has been omitted along with r167759.

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

2014-04-28  Zan Dobersek  <zdobersek@igalia.com>

        [WK2][X11] NetscapePluginModule::scanPlugin() should write UTF-8 strings to stdout
        https://bugs.webkit.org/show_bug.cgi?id=132245

        Reviewed by Carlos Garcia Campos.

        NetscapePluginModule::scanPlugin(), in the helper writeLine function, takes each character
        of the given string and writes it out as a UChar, doing two fputc calls for each byte of the
        16-bit type.

        This fails badly with characters with integer value less than 256 as the most significant byte
        of the UChar is written out as a null character. This effectively chops the output that's gathered
        in the UIProcess and is parsed in PluginProcessProxy::scanPlugin().

        To avoid all this, the UTF-8 encoding of the string is written out in the PluginProcess, and
        String::fromUTF8() is called in the UIProcess to properly decode the received string.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::writeCharacter):
        (WebKit::writeLine):
        (WebKit::writeByte): Deleted.
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::scanPlugin):

2014-04-28  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Missing return statement in webkit_plugin_get_description()
        https://bugs.webkit.org/show_bug.cgi?id=132263

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitPlugin.cpp:
        (webkit_plugin_get_description): Actually return the data of the cached
        plugin description CString.

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash in debug build with removing windowed plugin child widgets from the view
        https://bugs.webkit.org/show_bug.cgi?id=132252

        Reviewed by Philippe Normand.

        It crashes due to an assert in HashTable that checks the iterators
        validity. The problem is that we are iterating the children map
        and the callback called on every iteration might modify the map,
        making the iterators invalid. This happens when the WebView is
        destroyed, GtkContainer calls gtk_container_foreach() with
        gtk_widget_destroy as callback. When a widget inside a container
        is destroyed, it's removed from the container, and in our case,
        the child widget is removed from the map. This fixes several
        crashes when running layout tests in debug bot.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall): Use copyKeysToVector() instead
        of using a range iterator for the map keys and check in every
        iteration that the child widget from the keys vector is still
        present in the map before calling the callback.

2014-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] GObject introspection links to installed libs when using jhbuild
        https://bugs.webkit.org/show_bug.cgi?id=132220

        Reviewed by Martin Robinson.

        The problem is that gobject-introspection is linking the temporary
        binaries adding the library paths present LDFLAGS environment
        variable first, taking precedence over the libraries in the build
        dir. Since the libraries paths of the dependencies are already
        correctly deduced by gobject-introspection using ldd, we can
        just unset the LDFLAGS variable before calling g-ir-scanner to
        make sure the libraries in the build dir take predence.

        * PlatformGTK.cmake:

2014-04-27  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r164702): Double tap doesn't stay under the new element once the animation finishes
        https://bugs.webkit.org/show_bug.cgi?id=132239
        <rdar://problem/16192842>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePage):
        The change in r167864 broke iOS animated resize, because it was depending on
        the dynamic size update code not running if the scale wasn't going to change.
        So, as a band-aid we should bail from doing that work if the scales aren't different.
        In the long term we should try to untangle this code and make it less platform dependent.

2014-04-27  Eunmi Lee  <eunmi15.lee@samsung.com>

        TouchEvent is not handled after releasing any point among touched points.
        https://bugs.webkit.org/show_bug.cgi?id=132043

        Reviewed by Benjamin Poulain.

        Handle TouchEvent until all touched points are released by setting
        trackingTouchEvents variable to false when all points are released.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::areAllTouchPointsReleased):
        (WebKit::WebPageProxy::handleTouchEventSynchronously):
        (WebKit::WebPageProxy::handleTouchEventAsynchronously):
        (WebKit::WebPageProxy::handleTouchEvent):

2014-04-27  Alexey Proskuryakov  <ap@apple.com>

        Don't use DispatchMessageEvenWhenWaitingForSyncReply for messages from NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=132144

        Reviewed by Darin Adler.

        * NetworkProcess/AsynchronousNetworkLoaderClient.cpp:
        (WebKit::AsynchronousNetworkLoaderClient::willSendRequest):
        (WebKit::AsynchronousNetworkLoaderClient::canAuthenticateAgainstProtectionSpace):
        Dont use the IPC::DispatchMessageEvenWhenWaitingForSyncReply flag. It's not needed,
        almost never works in NetworkProcess, but may cause trouble if it did.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess): Removed
        setOnlySendMessagesAsDispatchWhenWaitingForSyncReplyWhenProcessingSuchAMessage()
        function call, because there are no more any messages in NetworkProcess it could affect.

        * Platform/IPC/Connection.cpp: (IPC::Connection::dispatchMessage): Added a FIXME
        for an unrelated bug Anders and myself noticed while looking into this.

2014-04-27  Dan Bernstein  <mitz@apple.com>

        [Cocoa] -[WKWebProcessPlugInController parameters] returns nil if no parameters have been set yet
        https://bugs.webkit.org/show_bug.cgi?id=132223

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::bundleParameters): Create the WKWebProcessBundleParameters if
        needed.

2014-04-27  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r164702): Double tap doesn't stay under the new element once the animation finishes
        https://bugs.webkit.org/show_bug.cgi?id=132239
        <rdar://problem/16192842>

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePage):
        The early-return added to WebPage::scalePage breaks callers who depend
        on being able to call scalePage() with the same scale but a different
        origin and having that change take effect.

        Page::setPageScaleFactor already has the requisite logic, so move
        the early return down after that call, and guard only notification
        of page scale changes.

2014-04-25  Andy Estes  <aestes@apple.com>

        [iOS] Stop creating a WKWebResourceQuickLookDelegate for every WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=132215

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo): Called QuickLookHandle::create() directly.
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/ios/WebResourceLoaderIOS.mm: Removed.

2014-04-27  Sam Weinig  <sam@webkit.org>

        [iOS WebKit2] Add support for text autosizing
        <rdar://problem/16545245>
        https://bugs.webkit.org/show_bug.cgi?id=132237

        Reviewed by Tim Horton.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::textAutosizingWidth):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        Pass the text autosizing width from the UIProcess to WebProcess.

2014-04-27  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Zoom): Pages with 'background-attachment: fixed' don't behave correctly when zoomed
        https://bugs.webkit.org/show_bug.cgi?id=132225
        <rdar://problem/15729975>

        Reviewed by Darin Adler.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::layerForTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::shadowLayerForTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::adjustTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):
        Factor out code to choose which layer (and shadow layer) to apply the transient zoom to.
        If we have a contentsContainmentLayer (because we have composited background-attachment: fixed),
        it applies page scale, so we should apply the transient zoom to that layer
        instead of the RenderView's main GraphicsLayer.

2014-04-27  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. iOS build fix.

        * UIProcess/ios/SmartMagnificationController.h:

2014-04-27  Zan Dobersek  <zdobersek@igalia.com>

        Move cross-port WebKit2 code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129670

        Reviewed by Darin Adler.

        Replace uses of OwnPtr, PassOwnPtr in cross-port WebKit2 code with std::unique_ptr.

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):
        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.h:
        * NetworkProcess/NetworkProcess.h:
        (WebKit::NetworkProcess::addSupplement):
        * NetworkProcess/SynchronousNetworkLoaderClient.cpp:
        (WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
        * NetworkProcess/SynchronousNetworkLoaderClient.h:
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::dispatchWorkQueueMessageReceiverMessage):
        * Platform/IPC/Connection.h:
        * Platform/IPC/MessageReceiver.h:
        * Platform/Module.h:
        * Platform/WorkQueue.h:
        * Platform/efl/ModuleEfl.cpp:
        (WebKit::Module::load):
        * Platform/mac/LayerHostingContext.mm:
        * Shared/APIURL.h:
        * Shared/Network/CustomProtocols/CustomProtocolManager.h:
        * Shared/Plugins/NPRemoteObjectMap.cpp:
        * Shared/ShareableBitmap.h:
        * UIProcess/DrawingAreaProxyImpl.h:
        * UIProcess/InspectorServer/WebSocketServer.cpp:
        (WebKit::WebSocketServer::didAcceptConnection):
        (WebKit::WebSocketServer::didCloseWebSocketServerConnection):
        * UIProcess/InspectorServer/WebSocketServer.h:
        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
        (WebKit::connectionCallback):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::createDownloadProxy):
        * UIProcess/Network/NetworkProcessProxy.h:
        * UIProcess/Notifications/WebNotificationManagerProxy.h:
        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
        (WebKit::WebPluginSiteDataManager::getSitesWithData):
        (WebKit::WebPluginSiteDataManager::clearSiteData):
        (WebKit::WebPluginSiteDataManager::didGetSitesWithDataForAllPlugins):
        (WebKit::WebPluginSiteDataManager::didClearSiteDataForAllPlugins):
        * UIProcess/Plugins/WebPluginSiteDataManager.h:
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::callCallbackFunction):
        (WebKit::StorageManager::getOriginsInternal):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::ExceededDatabaseQuotaRecords::areBeingProcessed):
        (WebKit::ExceededDatabaseQuotaRecords::createRecord):
        (WebKit::ExceededDatabaseQuotaRecords::add):
        (WebKit::ExceededDatabaseQuotaRecords::next):
        (WebKit::WebPageProxy::handleMouseEvent):
        (WebKit::WebPageProxy::handleWheelEvent):
        (WebKit::WebPageProxy::processNextQueuedWheelEvent):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::createDownloadProxy):
        * UIProcess/WebProcessProxy.h:
        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
        (WebKit::PluginDestructionProtector::PluginDestructionProtector):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.cpp:
        (WebKit::NetscapePluginStream::deliverData):
        * WebProcess/Plugins/Netscape/NetscapePluginStream.h:
        * WebProcess/Plugins/PluginProcessConnectionManager.h:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::initialize):
        (WebKit::PluginProxy::didCreatePluginInternal):
        (WebKit::PluginProxy::didFailToCreatePluginInternal):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::createWebEvent):
        (WebKit::PluginView::handleEvent):
        * WebProcess/Plugins/PluginView.h:
        * WebProcess/WebCoreSupport/WebPopupMenu.h:
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::beginPrinting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::addSupplement):

2014-04-27  Antti Koivisto  <antti@apple.com>

        Coalesce responses on network process side
        https://bugs.webkit.org/show_bug.cgi?id=132229

        Reviewed by Andreas Kling.
        
        To reduce IPC we should coalesce response data in the network process and send it over with single IPC call.

        * NetworkProcess/AsynchronousNetworkLoaderClient.cpp:
        (WebKit::AsynchronousNetworkLoaderClient::AsynchronousNetworkLoaderClient):
        (WebKit::AsynchronousNetworkLoaderClient::didReceiveResponse):
        (WebKit::AsynchronousNetworkLoaderClient::didReceiveBuffer):
        (WebKit::AsynchronousNetworkLoaderClient::didFinishLoading):
        (WebKit::AsynchronousNetworkLoaderClient::didFail):
        (WebKit::AsynchronousNetworkLoaderClient::dispatchPartialCoalescedResponse):
        (WebKit::AsynchronousNetworkLoaderClient::clearCoalescedResponse):
        (WebKit::AsynchronousNetworkLoaderClient::responseCoalesceTimerFired):
        
            Coalesce the response. Completed response is sent on didFinishLoading. If the coalesce timer fires
            before that the data accumulated so far is dispatched.

        * NetworkProcess/AsynchronousNetworkLoaderClient.h:
        * NetworkProcess/NetworkResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveCompleteResponse):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/Network/WebResourceLoader.messages.in:
        
            Add a new message type that covers didReceiveResponse, didReceiveBuffer and didFinishLoading in a single message.

2014-04-26  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r167775): Safari crashes in ViewSnapshotStore::pruneSnapshots after loading 20 pages
        https://bugs.webkit.org/show_bug.cgi?id=132204
        <rdar://problem/16735622>

        Reviewed by Dan Bernstein and Sam Weinig.

        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::pruneSnapshots):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Fix a bug where the count of snapshots with live images was too high
        because we were failing to decrement it when replacing a snapshot of
        an existing item with a fresh one.

2014-04-26  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Rename a bundle form delegate method
        https://bugs.webkit.org/show_bug.cgi?id=132221

        Reviewed by Adele Peterson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Renamed.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Check for the method
        under the old (“new”) name and under the new name.

2014-04-25  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Synthesized getter for WKNavigationAction's _userInitiated property has the wrong name
        https://bugs.webkit.org/show_bug.cgi?id=132219

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:

2014-04-25  Simon Fraser  <simon.fraser@apple.com>

        [iOS] getAssistedNodeInformation crashes getting the bounding box if it doesn't have a renderer
        https://bugs.webkit.org/show_bug.cgi?id=132217
        <rdar://problem/16671662>

        Reviewed by Dean Jackson.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation): Check that m_assistedNode has
        a renderer before asking for its bounding box.

2014-04-25  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add an intermediary view to do the target transform and adjustment transform
        https://bugs.webkit.org/show_bug.cgi?id=132175

        Reviewed by Enrica Casucci.

        Some utility views of WKContentView account for the transforms between the content view
        and the utility view.

        Since the dynamic resize relies on setting subLayerTransforms, it is getting in the way.

        This patch adds a layer in between for the animation. That way the content view remains
        unscaled.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _endAnimatedResize]):

2014-04-25  Enrica Casucci  <enrica@apple.com>

        REGRESSION (iOS WebKit2): Selection is not being repainted during live resize.
        https://bugs.webkit.org/show_bug.cgi?id=132216
        <rdar://problem/16628819>

        Reviewed by Benjamin Poulain.

        Since the selection is drawn in the UIProcess on iOS,
        we need to update the selection rects and force a repaint
        during a live resize.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidLayout):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateSelectionAppearance):

2014-04-25  Brady Eidson  <beidson@apple.com>

        Add a selection overlay.
        <rdar://problem/16727797> and https://bugs.webkit.org/show_bug.cgi?id=132200

        Reviewed by David Hyatt.

        * WebKit2.xcodeproj/project.pbxproj:

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectionRectsDidChange): Pass the new selection rects on
          to the selection overlay controller.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

        * WebProcess/WebPage/SelectionOverlayController.cpp: Added.
        (WebKit::SelectionOverlayController::SelectionOverlayController):
        (WebKit::SelectionOverlayController::createOverlayIfNeeded):
        (WebKit::SelectionOverlayController::destroyOverlay):
        (WebKit::SelectionOverlayController::pageOverlayDestroyed):
        (WebKit::SelectionOverlayController::willMoveToWebPage):
        (WebKit::SelectionOverlayController::didMoveToWebPage):
        (WebKit::SelectionOverlayController::selectionRectsDidChange):
        (WebKit::SelectionOverlayController::drawRect):
        (WebKit::SelectionOverlayController::mouseEvent):
        * WebProcess/WebPage/SelectionOverlayController.h: Added.
        (WebKit::SelectionOverlayController::create):
        * WebProcess/WebPage/mac/SelectionOverlayControllerMac.mm: Added.
        (WebKit::SelectionOverlayController::drawRect):
        (WebKit::SelectionOverlayController::mouseEvent):
        (WebKit::SelectionOverlayController::handleClick):
        (WebKit::SelectionOverlayController::clearHighlight):

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

2014-04-25  Enrica Casucci  <enrica@apple.com>

        Remove duplicate member variable in WKAutocorrectionRects and WKAutocorrectionContext.
        https://bugs.webkit.org/show_bug.cgi?id=132206

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKContentViewInteraction.mm:

2014-04-25  Dean Jackson  <dino@apple.com>

        Allow a platform-specific size enumeration to be passed into popup-menu display
        https://bugs.webkit.org/show_bug.cgi?id=132195

        Reviewed by Brent Fulgham. With some in-person review comments from Sam Weinig.

        Platforms like OS X use a set of predefined sizes for built-in controls
        used for <select>: normal, small and mini. Expose that information to
        the PopupMenuClient via the PopupMenuStyle, allowing it to be passed
        into the platform code in WebKitSystemInterface.

        * Shared/PlatformPopupMenuData.cpp: Encode and decode the PopupMenuSize enum.
        (WebKit::PlatformPopupMenuData::encode):
        (WebKit::PlatformPopupMenuData::decode):
        * Shared/PlatformPopupMenuData.h: Add PopupMenuSize member variable.
        * UIProcess/mac/WebPopupMenuProxyMac.mm:
        (WebKit::WebPopupMenuProxyMac::showPopupMenu): Convert the PopupMenuSize
        into a WKControlSize, and pass that into WKPopupMenu.
        * WebProcess/WebCoreSupport/mac/WebPopupMenuMac.mm:
        (WebKit::WebPopupMenu::setUpPlatformData): Add the PopupMenuSize to
        the PlatformPopupMenuData.

2014-04-25  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r167775): Safari crashes in ViewSnapshotStore::pruneSnapshots after loading 20 pages
        https://bugs.webkit.org/show_bug.cgi?id=132204
        <rdar://problem/16729123>

        Reviewed by Anders Carlsson.

        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::ViewSnapshotStore):
        (WebKit::ViewSnapshotStore::pruneSnapshots):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Keep track of the number of snapshots that actually have live images; the
        size of the snapshot map no longer represents that.
        Also, fix the crash by using the UUID from the current item instead of from
        the (potentially null) most distant item; r167775 accidentally typo'd this.

2014-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Plugin process crashes with GTK2 windowed plugins
        https://bugs.webkit.org/show_bug.cgi?id=132127

        Reviewed by Martin Robinson.

        It happens sometimes because the socket is used before the plug
        has been added. A runtime critical warnings is shown and it
        sometimes ends up crashing.

        * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp:
        (WebKit::NetscapePlugin::platformPostInitializeWindowed): Do not
        show the plug widget until the socket is connected.

2014-04-24  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] Enable optimization to mmap downloaded resources once they become file-backed.
        <https://webkit.org/b/132171>
        <rdar://problem/16720733>

        Implement a CFNetwork-based version of NetworkResourceLoader::willCacheResponseAsync()
        and activate the DiskCacheMonitor code path. This means that once resources go into
        file system cache, we get notified and mmap them from disk, saving heaps of memory.

        Reviewed by Antti Koivisto.

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        * NetworkProcess/mac/NetworkResourceLoaderMac.mm:
        (WebKit::NetworkResourceLoader::willCacheResponseAsync):

2014-04-24  Andreas Kling  <akling@apple.com>

        [iOS WebKit2] RemoteLayerTreeDrawingArea should force CA to garbage collect surfaces.
        <https://webkit.org/b/132160>
        <rdar://problem/16110687>

        Do an empty CATransaction at the end of RemoteLayerTreeDrawingArea::flushLayers()
        to get CA to garbage collect its IOSurfaces. This helps clean up unused surfaces
        that we'd otherwise end up hanging on to for a long time.

        Reviewed by Tim Horton.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):

2014-04-24  Commit Queue  <commit-queue@webkit.org>

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

        Incorrectly reverted the change in r167547 for
        webkit.org/b/131898 (Requested by rniwa on #webkit).

        Reverted changeset:

        "Cursor doesn't change back to pointer when leaving the Safari
        window"
        https://bugs.webkit.org/show_bug.cgi?id=132038
        http://trac.webkit.org/changeset/167700

2014-04-24  Brady Eidson  <beidson@apple.com>

        Rename "IMAGE_CONTROLS" feature to "SERVICE_CONTROLS"
        https://bugs.webkit.org/show_bug.cgi?id=132155

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::operator=):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/WebContextMenu.cpp:
        * WebProcess/WebPage/WebContextMenu.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-04-24  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Add some missing overrides and remove unnecessary virtuals
        https://bugs.webkit.org/show_bug.cgi?id=132153

        Reviewed by Darin Adler.

        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:

2014-04-24  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Use a single struct for the snapshot, and pass it around
        https://bugs.webkit.org/show_bug.cgi?id=132114

        Reviewed by Simon Fraser.

        Have only a single map in ViewSnapshotStore, from back-forward item
        to ViewSnapshotStore::Snapshot, and return the Snapshot struct when looking
        up snapshots (via getSnapshot()), so that future patches can persist additional
        information along with the snapshot.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::retrieveSnapshotForItem):
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::endSwipeGesture):
        Adopt getSnapshot() instead of snapshotAndRenderTreeSize().
        Move retrieveSnapshotForItem out into a separate function (for future use).

        * UIProcess/mac/ViewSnapshotStore.h:
        (WebKit::ViewSnapshotStore::disableSnapshotting):
        (WebKit::ViewSnapshotStore::enableSnapshotting):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::pruneSnapshots):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        (WebKit::ViewSnapshotStore::getSnapshot):
        (WebKit::ViewSnapshotStore::snapshotAndRenderTreeSize): Deleted.
        Make Snapshot struct public.
        Get rid of the separate map of back-forward items to render tree sizes.
        When evicting, instead of removing the entry, clear out its snapshot image;
        this way, we can keep other snapshot metadata around.

2014-04-24  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Should properly handle focus redirect (keyboard state changes when focus changes).
        https://bugs.webkit.org/show_bug.cgi?id=132136
        <rdar://problem/16238336>

        Reviewed by Benjamin Poulain.

        Focusing a field from JavaScript should not make the keyboard or the select picker
        appear unless the user has already started interacting with one of the fields in the page.
        Adding a parameter to StartAssistingNode to indicate whether the focus change is a result
        of a user action.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userIsInteracting:userObject:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::dispatchTouchEvent):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::handleTap):
        (WebKit::WebPage::elementDidFocus):

2014-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        FontCache::fontCache() never returns nullptr so it can be made to return a reference instead
        https://bugs.webkit.org/show_bug.cgi?id=132110

        Reviewed by Tim Horton.

        Updates callers to use '.' instead of '->'.

        No new tests are necessary because there should be no behavior change.

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

2014-04-24  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Manage AudioSession category according to media type
        https://bugs.webkit.org/show_bug.cgi?id=132096

        Reviewed by Jer Noble.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Tell WebCore to manage the AudioSession.

2014-04-24  Tim Horton  <timothy_horton@apple.com>

        [wk2] Provide SPI allowing clients to hand events directly to swipe code, bypassing scrolling
        https://bugs.webkit.org/show_bug.cgi?id=132092
        <rdar://problem/15948244>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _tryToSwipeWithEvent:ignoringPinnedState:]):
        Added. Hand the event directly to ViewGestureController, optionally
        ignoring whether or not the WKView is scrollable (always pretending that it is not).

        * UIProcess/mac/ViewGestureController.h:
        (WebKit::ViewGestureController::shouldIgnorePinnedState):
        (WebKit::ViewGestureController::setShouldIgnorePinnedState):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::scrollEventCanBecomeSwipe):
        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):
        (WebKit::scrollEventCanBecomeSwipe):
        If we're ignoring the view's pinned state, pretend that we're always pinned,
        and don't worry about sending events to WebCore.

2014-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] wmode='transparent' for flash plugin doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=120055

        Reviewed by Gustavo Noronha Silva.

        Force opaque window mode for flash plugin when wmode='transparent',
        since X11 backend doesn't support transparency. We should add
        proper transparency support because forcing opaque window mode
        doesn't really work. Handle this as a plugin quirk instead of
        adding X11 specific code to WebFrameLoaderClient::createPlugin().

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::determineQuirks): Add
        ForceFlashWindowlessMode quirk for flash in case of EFL platform
        because EFL port doesn't support windowed plugins.
        * Shared/Plugins/PluginQuirks.h: Add ForceFlashWindowlessMode X11
        plugin quirk.
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::initialize): Modify or add wmode
        parameter for flash plugin, to force opaque window mode when
        transparent mode is specified or when ForceFlashWindowlessMode
        quirk is present.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::createPlugin): Remove X11 specific code.

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

        [iOS WK2] Missing content inside long overflow-scrolling:touch 
        https://bugs.webkit.org/show_bug.cgi?id=132105

        Reviewed by Tim Horton.
        
        PlatformCALayerRemote needs to track bounds origin as well as size,
        since iOS uses bounds origin for overflow scrolling.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::updateBackingStore):
        (WebKit::PlatformCALayerRemote::bounds):
        (WebKit::PlatformCALayerRemote::setBounds):

2014-04-23  Andreas Kling  <akling@apple.com>

        Remove unused WKPageSetMemoryCacheClientCallsEnabled API.
        <https://webkit.org/b/132098>

        This API was added to WK2 back in 2011 but never actually used.

        Reviewed by Anders Carlsson.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetMemoryCacheClientCallsEnabled): Deleted.
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::creationParameters):
        (WebKit::WebPageProxy::setMemoryCacheClientCallsEnabled): Deleted.
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setMemoryCacheMessagesEnabled): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        [iOS WK2] Make -webkit-overflow-scrolling:touch work
        https://bugs.webkit.org/show_bug.cgi?id=132097

        Reviewed by Tim Horton.
        
        Scrolling of UIScrollViews in content (for -webkit-overflow-scrolling:touch)
        depends on them getting hit-tested correctly. UIKit hit testing assumes
        that subviews are enclosed by their ancestors, but this is not true of
        web content. In addition, we had a root layer that was zero sized.
        
        Fix by overriding hitTest:withEvent: on our content WKViews to hit
        test subviews even if they are not enclosed.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (-[UIView _recursiveFindDescendantViewAtPoint:withEvent:]):
        (-[UIView _findDescendantViewAtPoint:withEvent:]):
        (-[WKCompositingView hitTest:withEvent:]):
        (-[WKTransformView hitTest:withEvent:]):
        (-[WKRemoteView hitTest:withEvent:]):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updatePreferences):
        Update debug borders on the root layer.
        (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged):
        Size the root layer to the contents size. This isn't strictly necessary
        given the hit testing overrides, but seems sensible to do anyway.

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

        Nonopaque layers double-paint with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=132101

        Reviewed by Tim Horton.
        
        The non-IOSurface code path was failing to clear the backing store
        before painting.

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

2014-04-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Image and text documents sometime gets the webpage viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=132099

        Reviewed by Tim Horton.

        When didReceiveMobileDocType(), if the doctype was not XHTML mobile, we were setting
        the viewport configuration to webpageParameters(). This is obviously not correct for
        Image and Text documents.

        This patch moves the code deciding the default configuration out of WebPage::didCommitLoad()
        and use it from WebPage::didCommitLoad() and WebPage::didReceiveMobileDocType().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::didReceiveMobileDocType):
        (WebKit::WebPage::resetViewportDefaultConfiguration):

2014-04-23  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix a few mistakes affecting the initial layout and the initial unobscured rect
        https://bugs.webkit.org/show_bug.cgi?id=132093
        <rdar://problem/16703237>

        Reviewed by Tim Horton.

        The user of WKWebView can setup a size on device pixels, which can add half a point to the minimum
        layout size. By rounding this up before applying the page scale, we ended up with rounding errors
        on the layout size and the transitory unobscured content rect.

        This patch fixes changes the minimal layout size to float point values to reduce the rounding problems.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (setViewportConfigurationMinimumLayoutSize):
        (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]):
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPageProxy::setMinimumLayoutSizeForMinimalUI):

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didCommitLoad):
        Defaulting the content size to the minimum layout size only works if the initial-scale is 1.
        ViewportConfiguration knows exactly what to do before the first layout.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setViewportConfigurationMinimumLayoutSize):
        (WebKit::WebPage::setMinimumLayoutSizeForMinimalUI):
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        A few fixes here:
        -setZoomedOutPageScaleFactor() was incorrectly using the initial scale. 99% of the time, initial scale
         and minimum scale are equal, but the page can specify something different with the viewport meta tag.
        -Use floating point for manipulating the minimum layout sizes, then round the value.
        -minimumLayoutSizeInDocumentCoordinate was scaled the wrong way around.

        (WebKit::WebPage::viewportConfigurationChanged):

2014-04-23  Yongjun Zhang  <yongjun_zhang@apple.com>

        Support encoding/decoding NSUInteger arguments in WKRemoteObjectCoder.
        https://bugs.webkit.org/show_bug.cgi?id=132040

        Add support for encoding/decoding NSUInteger arguments.

        Reviewed by Sam Weinig.

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

2014-04-22  Ryosuke Niwa  <rniwa@webkit.org>

        Cursor doesn't change back to pointer when leaving the Safari window
        https://bugs.webkit.org/show_bug.cgi?id=132038

        Reviewed by Alexey Proskuryakov.

        Since the cursor type is now updated asynchronously after r147739,
        [window windowNumber] != [NSWindow windowNumberAtPoint:[NSEvent mouseLocation] belowWindowWithWindowNumber:0]
        evalutes to false depending on how fast cursor is moving.

        Instead, check whether the NSWindow of the WebView is the key window or not since
        key window appears to control the cursor style in Cocoa as far as I've tested:
        https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/WinPanel/Concepts/ChangingMainKeyWindow.html

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setCursor):

2014-04-22  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add SPI to expose provisional URL from Frame.
        https://bugs.webkit.org/show_bug.cgi?id=132014

        Add methods to return the provisional URL from WKWebProcessPlugInFrame.

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _provisionalURL]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:

2014-04-22  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Split iOS touch event dispatch for the regular touch event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=132033

        Reviewed by Simon Fraser.

        The generic touch event dispatching does not work well with iOS gesture recognizers.
        Some events are required to be synchronous, while other needs can be asynchronous and
        can even use event coalescing. We only need UI callback for the synchronous events.

        Previously, that was implemented by changing the property ShouldSendEventsSynchronously
        on WebPageProxy. That is causing issues when synchronous events are sent right after asynchronous
        events because the responses in WebPageProxy::didReceiveEvent() easily get out of order.

        This patch completely split the UIGestureRecognizerDispatching from the normal asynchronous event dispatching.

        Synchronous events are sent directly to the WebProcess and report the result to the PageClient right away.

        Asynchronous events are sent to the EventDispatcher where they are coalesced until the main thread is free
        to process events.

        There can be a race where a synchronous event comes before the asynchronous events are processed. In that case,
        the synchronous event handler starts by getting the events out of the EventDispatcher and dispatch them first.

        * Shared/NativeWebTouchEvent.h:
        (WebKit::NativeWebTouchEvent::uniqueId): Deleted.
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::handleSynchronousTouchEvent):
        (WebKit::WebPageProxy::sendAsynchronousTouchEvent):
        (WebKit::WebPageProxy::didReceiveEvent):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _webTouchEventsRecognized:]):
        (-[WKContentView _webTouchEvent:WebKit::preventsNativeGestures:]):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::EventDispatcher):
        (WebKit::EventDispatcher::clearQueuedTouchEventsForPage):
        (WebKit::EventDispatcher::getQueuedTouchEventsForPage):
        (WebKit::EventDispatcher::touchEvent):
        (WebKit::EventDispatcher::dispatchTouchEvents):
        * WebProcess/WebPage/EventDispatcher.h:
        * WebProcess/WebPage/EventDispatcher.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::dispatchTouchEvent):
        (WebKit::WebPage::touchEventSync):
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::touchEventSyncForTesting):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dispatchAsynchronousTouchEventsQueue):

2014-04-22  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS hit-testing does not work when page is zoomed
        https://bugs.webkit.org/show_bug.cgi?id=132013

        Reviewed by Simon Fraser.

        Implement accessibilityHitTest so that the point can be converted correctly.

        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2014-04-22  Commit Queue  <commit-queue@webkit.org>

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

        Going a different way with this (Requested by bradee-oh on
        #webkit).

        Reverted changeset:

        "Change Image Controls replacement to use selection and paste"
        https://bugs.webkit.org/show_bug.cgi?id=131992
        http://trac.webkit.org/changeset/167674

2014-04-22  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused local variable
        https://bugs.webkit.org/show_bug.cgi?id=132020

        Reviewed by Alexey Proskuryakov.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectPopover initWithView:hasGroups:]):

2014-04-22  Brady Eidson  <beidson@apple.com>

        Change Image Controls replacement to use selection and paste
        <rdar://problem/16302722> and https://bugs.webkit.org/show_bug.cgi?id=131992

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]): Write the
          replacement data to a special pasteboard, then replace the current selection from
          that pasteboard.

        Remove all other code used to support the old replacement mechanism:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::replaceControlledImage): Deleted.
        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        (WebKit::WebContextMenuProxyMac::page):
        (WebKit::WebContextMenuProxyMac::replaceControlledImage): Deleted.
        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::replaceControlledImage): Deleted.
        * WebProcess/WebPage/WebContextMenu.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::replaceControlledImage): Deleted.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-04-22  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Remove duplicated code to set size to the DrawingArea.
        https://bugs.webkit.org/show_bug.cgi?id=131972

        Reviewed by Andreas Kling.

        DrawingArea's size is set in the WebView.cpp when EwkView's size is
        changed, so we don't have to set again in the PageViewportController.

        * UIProcess/CoordinatedGraphics/PageViewportController.cpp:
        (WebKit::PageViewportController::didChangeViewportSize):

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

        WKThumbnailView doesn't quite work with topContentInset
        https://bugs.webkit.org/show_bug.cgi?id=131976
        <rdar://problem/16642127>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        _WKThumbnailView always needs a layer.
        We don't want to use snapshots by default, this was debugging accidentally landed in the last change.

        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        Don't request a new snapshot if the scale is the same as the existing one.
        Reduce the height of the snapshot by the topContentInset.
        Having the origin at (0, 0) is still correct, as the inset content is in negative Y space,
        and (0, 0) is the true origin of the content.

        (-[_WKThumbnailView setScale:]):
        When not snapshotting, we've decided that WKThumbnailView should apply the scale to the WKView layer tree,
        instead of depending on clients to do so.

        (-[_WKThumbnailView setUsesSnapshot:]):
        We *do* need to apply thumbnail scale in the web process even when snapshotting,
        because we use the live layer tree temporarily while waiting for the asynchronous
        snapshot to return. This was a misstep in the last thumbnail view patch.

2014-04-22  Shivakumar JM  <shiva.jm@samsung.com>

        [WebKit2] Cleanup the build from unused parameter in WebProcess Module 
        https://bugs.webkit.org/show_bug.cgi?id=131970

        Reviewed by Darin Adler.

        Fix a build warning by removing the parameters in function paintLayerContents() to fix build warning.

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

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

        [GTK] Crash after getting web view context property with g_object_get
        https://bugs.webkit.org/show_bug.cgi?id=131983

        Reviewed by Philippe Normand.

        The problem is that the getter is using g_value_take_object() and
        the default context is destroyed when the caller releases its ref.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewGetProperty): Use g_value_set_object() instead of
        g_value_take_object().

2014-04-22  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Remove unnecessary includes in files of Source/WebKit2/UIProcess/API/efl
        https://bugs.webkit.org/show_bug.cgi?id=131979

        Reviewed by Gyuyoung Kim.

        Removed unnecessary includes of header files.
        In addition, tried to use forward declarations.

        * UIProcess/API/efl/EwkView.cpp:
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/EwkViewCallbacks.h:
        * UIProcess/API/efl/GestureRecognizer.h:
        * UIProcess/API/efl/ewk_context_menu_item_private.h:
        * UIProcess/API/efl/ewk_context_menu_private.h:
        * UIProcess/API/efl/ewk_download_job.cpp:
        * UIProcess/API/efl/ewk_download_job_private.h:
        * UIProcess/API/efl/ewk_form_submission_request.cpp:
        * UIProcess/API/efl/ewk_form_submission_request_private.h:
        * UIProcess/API/efl/ewk_navigation_data.cpp:
        * UIProcess/API/efl/ewk_navigation_data_private.h:
        * UIProcess/API/efl/ewk_page_group_private.h:
        * UIProcess/API/efl/ewk_popup_menu_private.h:
        * UIProcess/API/efl/ewk_view.cpp:
        * UIProcess/API/efl/ewk_window_features_private.h:
        * UIProcess/efl/PageUIClientEfl.cpp:
        * UIProcess/efl/ViewClientEfl.cpp:

2014-04-21  Tim Horton  <timothy_horton@apple.com>

        [wk2] Don't send intrinsic content size updates with dirty layout
        https://bugs.webkit.org/show_bug.cgi?id=131964
        <rdar://problem/14292718>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeIfNeeded):
        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
        (WebKit::TiledCoreAnimationDrawingArea::updateIntrinsicContentSizeTimerFired): Deleted.
        Instead of using a timer (which can fire while layout is dirty) to coalesce
        intrinsic content size changes, send them only from flushLayers, just after updating layout.
        This ensures that we never get intermediate intrinsic content sizes that won't be painted.

2014-04-21  Tim Horton  <timothy_horton@apple.com>

        Remove a unnecessary forward-declared class from TiledCoreAnimationDrawingArea.

        Rubber-stamped by Simon Fraser.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:

2014-04-21  Simon Fraser  <simon.fraser@apple.com>

        Don't try to use a null connection()->xpcConnection()
        https://bugs.webkit.org/show_bug.cgi?id=131961

        Reviewed by Dan Bernstein.
        
        If running with -WebKit2UseXPCServiceForWebProcess NO, connection()->xpcConnection()
        is null and xpc_connection_get_pid() would crash, so null-check the xpcConnection.

        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):

2014-04-21  Dan Bernstein  <mitz@apple.com>

        WebKit part of <rdar://problem/16631323> Page::setDefersLoading doesn’t do anything when using the Network process
        https://bugs.webkit.org/show_bug.cgi?id=131939

        Reviewed by David Kilzer.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::NetworkConnectionToWebProcess::setDefersLoading): Added. Forwards the message to
        the NetworkResourceLoader. 
        * NetworkProcess/NetworkConnectionToWebProcess.h:

        * NetworkProcess/NetworkConnectionToWebProcess.messages.in: Added SetDefersLoading message.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::NetworkResourceLoader): Initialize new member variable
        m_defersLoading from the new field in the loader parameters.
        (WebKit::NetworkResourceLoader::start): Added. Like WebCore::ResourceLoader, if loading is
        deferred, keep the request in m_deferredRequest and bail out.
        (WebKit::NetworkResourceLoader::setDefersLoading): Added. Similar to
        WebCore::ResourceLoader::setDefersLoading.
        * NetworkProcess/NetworkResourceLoader.h:
        (WebKit::NetworkResourceLoader::defersLoading): 

        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters): Initialize new field
        defersLoading to false.
        (WebKit::NetworkResourceLoadParameters::encode): Encode new field.
        (WebKit::NetworkResourceLoadParameters::decode): Decode new field.
        * Shared/Network/NetworkResourceLoadParameters.h: Added defersLoading field.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Populate defersLoading field in the load
        parameters.
        (WebKit::WebResourceLoadScheduler::setDefersLoading): Send a message to the Network process.
        * WebProcess/Network/WebResourceLoadScheduler.h:

2014-04-21  Anders Carlsson  <andersca@apple.com>

        Errors passed to delegate methods should have recovery attempters
        https://bugs.webkit.org/show_bug.cgi?id=131957
        <rdar://problem/16642539>

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.h: Added.
        * UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.mm: Added.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::createErrorWithRecoveryAttempter):
        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.h: Added.
        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm: Added.
        (-[WKReloadFrameErrorRecoveryAttempter initWithWebView:frameHandle:urlString:]):
        (-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-21  Eric Carlson  <eric.carlson@apple.com>

        [Mac] implement WebKitDataCue
        https://bugs.webkit.org/show_bug.cgi?id=131799

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.

2014-04-21  Beth Dakin  <bdakin@apple.com>

        topContentInset does not play well with fullscreen elements
        https://bugs.webkit.org/show_bug.cgi?id=131955
        -and corresponding-
        <rdar://problem/16651925>

        Reviewed by Sam Weinig.

        If you take an element (such as a <video>) fullscreen when you have a 
        topContentInset set, there will be an inset-sized gap at the top of the fullscreen 
        video.

        Save and restore the topContentInset whenever the scroll position is saved and 
        restored.
        * WebProcess/FullScreen/WebFullScreenManager.cpp:
        (WebKit::WebFullScreenManager::WebFullScreenManager):
        (WebKit::WebFullScreenManager::saveScrollPosition):
        (WebKit::WebFullScreenManager::restoreScrollPosition):
        * WebProcess/FullScreen/WebFullScreenManager.h:

2014-04-21  Gavin Barraclough  <baraclough@apple.com>

        Don't use ProcessAssertion on simulator
        https://bugs.webkit.org/show_bug.cgi?id=131950

        Rubber stamped by Enrica Casucci

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        * UIProcess/ios/ProcessAssertion.h:

2014-04-21  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] support replacements for misspelled words.
        https://bugs.webkit.org/show_bug.cgi?id=131827
        <rdar://problem/16319657>

        Reviewed by Darin Adler.

        This is the second a final piece to support replacements.
        It adds some entrypoints used by the keyboard code to perform
        replacement when reaching the edge of a word using backspace.
        I've modified the behavior of replaceSelectedText to work both
        with caret or range selections.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView isReplaceAllowed]):
        (-[WKContentView _characterBeforeCaretSelection]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::replaceSelectedText):

2014-04-21  Gavin Barraclough  <baraclough@apple.com>

        Don't use ProcessAssertion on simulator
        https://bugs.webkit.org/show_bug.cgi?id=131950

        Rubber stamped by Benjamin Poulain

        * UIProcess/ios/ProcessAssertion.mm:
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::setState):

2014-04-21  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::checkEntitlements):

2014-04-21  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        (WebKit::XPCServiceInitializer):

2014-04-21  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Implement CSS viewport units
        https://bugs.webkit.org/show_bug.cgi?id=131863
        <rdar://problem/16279088>

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (setMinimumLayoutSizeForMinimalUI):
        (-[WKWebView _minimumLayoutSizeOverrideForMinimalUI]):
        (-[WKWebView _setMinimumLayoutSizeOverrideForMinimalUI:]):
        Add _setMinimumLayoutSizeOverrideForMinimalUI:, which pushes said size
        down from the client to WebPageIOS, below.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setMinimumLayoutSizeForMinimalUI):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setMinimumLayoutSizeForMinimalUI):
        (WebKit::WebPage::viewportConfigurationChanged):
        Update FrameView's viewport size based on the minimum layout size for minimal UI (if we have it)
        or the normal minimum layout size, scaled to the page's initial scale.

2014-04-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix the dynamic viewport update when the viewport's max-scale conflict with the transition
        https://bugs.webkit.org/show_bug.cgi?id=131884

        Reviewed by Darin Adler.

        <rdar://problem/16667291>

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        It is fairly common to have a viewport configuration with min-scale=1 and max-scale=1.
        Since we were only changing the minimumScale for the transition, the target scale was affected
        by max-scale. This was breaking the transition from portrait to landscale.

2014-04-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Make dynamic viewport size update content aware
        https://bugs.webkit.org/show_bug.cgi?id=131874

        Reviewed by Tim Horton.

        When possible, adjust the scroll position based on the content on dynamic viewport resize.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::scalePage):
        (WebKit::WebPage::pageDidScroll):
        * WebProcess/WebPage/WebPage.h:
        The scrolling heuristic are not invertible, especially the content heuristic. To have the right
        behavior when doing resize without changing the page, we save the old scroll position and restore
        it when the content size and scale is restored.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        On dynamic update, start by finding what node is at the center of the screen. After the layout, put that
        node back in the center.

        (WebKit::WebPage::updateVisibleContentRects):

2014-04-21  Anders Carlsson  <andersca@apple.com>

        Need default WKNavigationDelegate behavior
        https://bugs.webkit.org/show_bug.cgi?id=131944
        <rdar://problem/15949822>

        Reviewed by Dan Bernstein.

        Port the WebKit1 default delegate behavior over.

        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-04-21  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose WebPage::setDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=131943

        Reviewed by Anders Carlsson, but he doesn’t like this.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _defersLoading]): Added this accessor.
        (-[WKWebProcessPlugInBrowserContextController _setDefersLoading:]): Ditto.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:
        Declared new property _defersLoading.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::defersLoading): Added this getter.
        * WebProcess/WebPage/WebPage.h:

2014-04-21  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=131938

        Reviewed by Alexey Proskuryakov.

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

2014-04-21  Anders Carlsson  <andersca@apple.com>

        Check the com.apple.security.network.client entitlement for all processes
        https://bugs.webkit.org/show_bug.cgi?id=131942
        <rdar://problem/12354188>

        Reviewed by Dan Bernstein.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (WebKit::NetworkServiceInitializerDelegate::NetworkServiceInitializerDelegate):
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        (WebKit::XPCServiceInitializerDelegate::checkEntitlements):

2014-04-20  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove interfaces in the To Be Removed groups
        https://bugs.webkit.org/show_bug.cgi?id=131925

        Reviewed by Darin Adler.

        * Shared/API/Cocoa/WKRemoteObjectInterface.h: Removed.
        * Shared/API/Cocoa/WKRemoteObjectInterface.mm: Removed.
        * Shared/API/Cocoa/WKRemoteObjectRegistry.h: Removed.
        * Shared/API/Cocoa/WKRemoteObjectRegistry.mm: Removed.
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.h: Removed.
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm: Removed.
        * UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKProcessPoolToBeRemoved.mm: Removed.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInBrowserContextControllerToBeRemoved.mm: Removed.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2014-04-20  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Crash when setting a bundle parameter to nil
        https://bugs.webkit.org/show_bug.cgi?id=131917

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setObject:forBundleParameter:]): If the object is nil, use
        -[NSMutableDictionary removeObjectForKey:] rather than -setObject:forKey:.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        (-[WKWebProcessBundleParameters setParameter:forKey:]): Ditto.

        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::setBundleParameter): Unrelatedly, create m_bundleParameters if
        needed, as it may have not been created on intialization if no bundle parameters were set
        at the time.

2014-04-20  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Remove unused -webView:didFinishLoadingNavigation: delegate method
        https://bugs.webkit.org/show_bug.cgi?id=131914

        Reviewed by Sam Weinig.

        * UIProcess/Cocoa/NavigationState.h: Removed flag from m_navigationDelegateMethods struct.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Removed check for whether the method is
        implemented.
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame): Stopped calling the method
        if implemented.

2014-04-19  Anders Carlsson  <andersca@apple.com>

        Plug-in process crashes if NP_Initialize returns an error the second time it's called
        https://bugs.webkit.org/show_bug.cgi?id=131903
        <rdar://problem/14355462>

        Reviewed by Sam Weinig.

        * Shared/Plugins/Netscape/NetscapePluginModule.cpp:
        (WebKit::NetscapePluginModule::decrementLoadCount):
        Don't try to unload the plug-in if it hasn't been initialized.

2014-04-19  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Implement blend modes
        https://bugs.webkit.org/show_bug.cgi?id=131891
        <rdar://problem/16490085>

        Reviewed by Tim Horton.

        Implement blend modes with UI-side compositing.
        
        PlatformCALayer::setBlendMode() becomes pure virtual, and overridden in
        PlatformCALayerMac and PlatformCALayerRemote.
        PlatformCAFilters::setBlendingFiltersOnLayer() now takes a raw platform
        layer, so it can be called from the UI process on a CALayer*.
        
        Add BlendMode to LayerProperties, and initialize, encode and decode it,
        as well as adding dumping support for blend modes.
        
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::setBlendMode):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2014-04-19  Joseph Pecoraro  <pecoraro@apple.com>

        Fix leak of UIScreenEdgePanGestureRecognizer in WKSwipeTransitionController
        https://bugs.webkit.org/show_bug.cgi?id=131877

        Reviewed by Darin Adler.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (-[WKSwipeTransitionController gestureRecognizerForInteractiveTransition:WithTarget:action:]):

2014-04-19  Dan Bernstein  <mitz@apple.com>

        Don’t install a source file inside WebProcess.app.

        * WebKit2.xcodeproj/project.pbxproj: Removed ViewUpdateDispatcher.messages.in from
        WebProcess’s Copy Bundle Resources build phase.

2014-04-19  Darin Adler  <darin@apple.com>

        [Mac] WebView adjusts the cursor even when another window is in front
        https://bugs.webkit.org/show_bug.cgi?id=131898
        rdar://problem/14619911

        Reviewed by Dan Bernstein.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setCursor:]): Deleted. Moved the code all into PageClientImpl, since none of it
        interacts with anything special about a WKView.

        * UIProcess/API/mac/WKViewInternal.h: Deleted the _setCursor: method.

        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::setCursor): Added a check that the window is under the cursor
        and do nothing if it's not.

2014-04-19  Dan Bernstein  <mitz@apple.com>

        Use XPC services in the iOS Simulator, but not in Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=131894

        Reviewed by Anders Carlsson.

        * Configurations/NetworkService.Development.xcconfig: Defined INFOPLIST_FILE for the
        Simulator.
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/WebContentService.Development.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::systemDirectoryPath): Added this helper function that returns a slash-terminated
        path to the System directory in the current runtime.
        (WebKit::ProcessLauncher::launchProcess): Changed to use the above function to tell whether
        a development version of WebKit2 is being used.
        * WebKit2Prefix.h: Set WTF_USE_XPC_SERVICES to 1 when targeting the iOS Simulator, but not
        when targeting Mountain Lion.

2014-04-19  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Crash in -[WKWebProcessPlugInHitTestResult nodeHandle] when nodeHandle() is null
        https://bugs.webkit.org/show_bug.cgi?id=131888

        Reviewed by Jon Honeycutt.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm:
        (-[WKWebProcessPlugInHitTestResult nodeHandle]): Added a null check.

2014-04-19  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Fuzzy layers on sites using perspective and transforms
        https://bugs.webkit.org/show_bug.cgi?id=131873
        <rdar://problem/16540576>

        Reviewed by Sam Weinig.
        
        Always set rasterizationScale on CALayers in the UI process
        (as we do for WK1) so that layers are rasterized taking the
        device scale into account. We can do unconditionally; this
        is benign on layers that CA doesn't rasterize.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):

2014-04-18  Simon Fraser  <simon.fraser@apple.com>

        Use 'override' in GraphicsLayerCA
        https://bugs.webkit.org/show_bug.cgi?id=131882

        Reviewed by Tim Horton.
        
        Add an 'override'.

        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:

2014-04-19  Darin Adler  <darin@apple.com>

        Assertion in WebPage::runModal accesses object after it may have been destroyed
        https://bugs.webkit.org/show_bug.cgi?id=131875

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::runModal): Ref the WebPage so it's still around so we can
        check the m_isRunningModal flag.

2014-04-18  Commit Queue  <commit-queue@webkit.org>

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

        Broke 32-bit build (Requested by ap on #webkit).

        Reverted changeset:

        "[Mac] implement WebKitDataCue"
        https://bugs.webkit.org/show_bug.cgi?id=131799
        http://trac.webkit.org/changeset/167527

2014-04-18  Eric Carlson  <eric.carlson@apple.com>

        [Mac] implement WebKitDataCue
        https://bugs.webkit.org/show_bug.cgi?id=131799

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig: Define ENABLE_DATACUE_VALUE.

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

        Keep the WebPageProxy alive for the lifetime of all PageLoadState::Transaction objects
        https://bugs.webkit.org/show_bug.cgi?id=131872
        <rdar://problem/15758414>

        Reviewed by Dan Bernstein.

        * UIProcess/PageLoadState.cpp:
        (WebKit::PageLoadState::PageLoadState):
        (WebKit::PageLoadState::Transaction::Transaction):
        (WebKit::PageLoadState::Transaction::~Transaction):
        * UIProcess/PageLoadState.h:
        (WebKit::PageLoadState::Transaction::Transaction): Deleted.
        (WebKit::PageLoadState::Transaction::~Transaction): Deleted.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):

2014-04-18  Stephanie Lewis  <slewis@apple.com>

        We shouldn’t create page throttlers for other pages than WebKit2 pages.
        Part of <rdar://problem/16473045> Visibility state counters are often incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=131696

        Reviewed by Gavin Barraclough.

        Page throttlers were being created for SVG images and other page instances that
        were not accurately tracking the states that enable and disable page throttling.
        Make the throttler an unique ptr and only initialize it for WebKit2.

        This also fixes  an inefficiency where we would throttle a new page on creation because 
        we assumed it was visible even if that was not the case.

        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp: Check page throttler exists.
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/WebPage/WebPage.cpp: 
        (WebKit::WebPage::WebPage): Initialize page throttler for WebKit2 views.
        (WebKit::WebPage::mouseEvent): Check page throttler exists.
        (WebKit::WebPage::wheelEvent): ditto
        (WebKit::WebPage::keyEvent): ditto

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

        Don't allow app sandboxed apps without the network client entitlement to launch the network process
        https://bugs.webkit.org/show_bug.cgi?id=131868
        <rdar://problem/12354188>

        Reviewed by Dan Bernstein.

        * NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:
        (WebKit::NetworkServiceInitializerDelegate::NetworkServiceInitializerDelegate):
        Add a new delegate that implements checkEntitlements().

        (NetworkServiceInitializer):
        Pass the new delegate to XPCServiceInitializer.

        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.h:
        * Shared/EntryPointUtilities/mac/XPCService/XPCServiceEntryPoint.mm:
        Call checkEntitlements.

        (WebKit::XPCServiceInitializerDelegate::checkEntitlements):
        Return true.

        (WebKit::XPCServiceInitializerDelegate::hasEntitlement):
        Helper function that returns whether a client has the given entitlement.

        (WebKit::XPCServiceInitializerDelegate::isClientSandboxed):
        Helper function that checks whether the client is sandboxed.

2014-04-18  Alice Barraclough  <alice.barraclough@webkit.org>

        Find on page - extend API by providing highlighted match index
        https://bugs.webkit.org/show_bug.cgi?id=131776

        Reviewed by Tim Horton.

        * Shared/WebFindOptions.h: Add an option for determining match index.

        Plumb through the API layers the addition of a parameter for match index.
        * UIProcess/API/APIFindClient.h:
        (API::FindClient::didFindString):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (toFindOptions):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_OPTIONS):
        * UIProcess/API/Cocoa/_WKFindDelegate.h:
        * UIProcess/Cocoa/FindClient.h:
        * UIProcess/Cocoa/FindClient.mm:
        (WebKit::FindClient::setDelegate):
        (WebKit::FindClient::didFindString):
        * UIProcess/WebFindClient.cpp:
        (WebKit::WebFindClient::didFindString):
        * UIProcess/WebFindClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFindString):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        The actual tracking of the match index is contained in FindController class.
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::FindController): Start out as -1, understood to be an undefined index in this context.
        (WebKit::FindController::updateFindUIAfterPageScroll): 
            Perform the calculation of matchCount if the flag for DetermineMatchIndex is on.
        If matchCount exceeds max, keep the match index undefined because otherwise the finding could advance
        to a point where the index exceeds the match count, legitimately. If matchCount doesn't exceed the max, then make
        sure the match index, which had been being incremented or decremented blindly back in findString(), is normalized
        to be less than match count.
        (WebKit::FindController::findString): 
            If there is a user selection existing on the page, the next occurence of the string will be found after that
        selection. In that case we still want the index to properly reflect its ordinal  position within the entire document.
        Use findStringMatchingRanges to provide the match index, and set a flag that prevents the match index from being
        blindly incremented or decremented later. After findString() is actually called on the page, increment or decrement
        the find index under specific conditions. 
        (WebKit::FindController::hideFindIndicator): Reset match index when find UI goes away.
        * WebProcess/WebPage/FindController.h: Add m_foundStringMatchIndex to private variables.
        * WebProcess/WebPage/ios/FindControllerIOS.mm:
        (WebKit::FindController::hideFindIndicator): Reset match index when find UI goes away.

2014-04-18  Joseph Pecoraro  <pecoraro@apple.com>

        Correct some issues small issues in WK2 file upload InjectedBundle APIs
        https://bugs.webkit.org/show_bug.cgi?id=131852

        Reviewed by Dan Bernstein.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h:
        (API::InjectedBundle::PageUIClient::shouldGenerateFileForUpload):
        The default return value, meaning no, should return the null string. The
        result is checked later, and null string is a special value meaning no.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::generateFileForUpload):
        Pre-check for the correct client function we will use.

2014-04-18  Andy Estes  <aestes@apple.com>

        [iOS] REGRESSION (r167039): WebKit incorrectly sets a background process assertion state when displaying a PDF
        https://bugs.webkit.org/show_bug.cgi?id=131860
        <rdar://problem/16631282>

        Reviewed by Tim Horton.

        We were basing our process assertion state on whether or not the
        process had a WKContentView in a window, but when displaying a PDF
        we've removed the WKContentView from the window. Base this decision
        instead on whether or not the WKWebView is in the window.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView didMoveToWindow]):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::isViewInWindow):

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

        Address a couple of review comments
        https://bugs.webkit.org/show_bug.cgi?id=131856

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.h:

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

        Handle pluginOrigin being null
        https://bugs.webkit.org/show_bug.cgi?id=131849
        <rdar://problem/16655898>

        Reviewed by Alexey Proskuryakov.

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

2014-04-18  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a navigation delegate method corresponding to didFinishDocumentLoadForFrame for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=131847

        Reviewed by Anders Carlsson.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didFinishDocumentLoadForFrame): Added a navigationID parameter.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient): Updated for the above change in paramerers.
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: Declared new delegate method.
        * UIProcess/Cocoa/NavigationState.h: Declare override of didFinishDocumentLoadForFrame.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate): Initialize
        webViewNavigationDidFinishDocumentLoad flag in the delegate methods struct.
        (WebKit::NavigationState::LoaderClient::didFinishDocumentLoadForFrame): Added override
        of the client function which calls the delegate.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): Get and pass the navigation ID to
        the client.
        * UIProcess/WebPageProxy.h: Added navigationID parameter.
        * UIProcess/WebPageProxy.messages.in: Ditto.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDidFinishDocumentLoad): Get and send the navigation
        ID to the UI process.

2014-04-18  Philippe Normand  <pnormand@igalia.com>

        Remove NETWORK_INFO support
        https://bugs.webkit.org/show_bug.cgi?id=131841

        Reviewed by Gyuyoung Kim.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * Shared/API/c/WKBase.h:
        * Shared/APIObject.h:
        * Shared/WebNetworkInfo.cpp: Removed.
        * Shared/WebNetworkInfo.h: Removed.
        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKContext.cpp:
        (WKContextGetNetworkInfoManager): Deleted.
        * UIProcess/API/C/WKContext.h:
        * UIProcess/API/C/WKNetworkInfo.cpp: Removed.
        * UIProcess/API/C/WKNetworkInfo.h: Removed.
        * UIProcess/API/C/WKNetworkInfoManager.cpp: Removed.
        * UIProcess/API/C/WKNetworkInfoManager.h: Removed.
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::EwkContext):
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        * UIProcess/WebContext.h:
        * UIProcess/WebNetworkInfoManagerProxy.cpp: Removed.
        * UIProcess/WebNetworkInfoManagerProxy.h: Removed.
        * UIProcess/WebNetworkInfoManagerProxy.messages.in: Removed.
        * UIProcess/WebNetworkInfoProvider.cpp: Removed.
        * UIProcess/WebNetworkInfoProvider.h: Removed.
        * UIProcess/efl/NetworkInfoProvider.cpp: Removed.
        * UIProcess/efl/NetworkInfoProvider.h: Removed.
        * WebProcess/NetworkInfo/WebNetworkInfoManager.cpp: Removed.
        * WebProcess/NetworkInfo/WebNetworkInfoManager.h: Removed.
        * WebProcess/NetworkInfo/WebNetworkInfoManager.messages.in: Removed.
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.cpp: Removed.
        * WebProcess/WebCoreSupport/WebNetworkInfoClient.h: Removed.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):

2014-04-17  Daniel Bates  <dabates@apple.com>

        [iOS] Hook up screen.{availHeight, availWidth, height, width}
        https://bugs.webkit.org/show_bug.cgi?id=131821
        <rdar://problem/16413795>

        Reviewed by Benjamin Poulain and Tim Horton.

        Implement WebKit2-specific support infrastructure.

        Additionally substitute "screenSize" for "viewporScreenSize" to make the code more understandable.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode): Modified to encode the available screen size
        creation parameter.
        (WebKit::WebPageCreationParameters::decode): Modified to decode the available screen size
        creation parameter.
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters): Initialize the available screen size
        parameter.
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::screenSize): Renamed; formerly named viewportScreenSize.
        (WebKit::WebPageProxy::availableScreenSize): Added.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::screenSize): Renamed; formerly named viewportScreenSize.
        (WebKit::WebChromeClient::availableScreenSize): Added; turns around and calls WebPage::availableScreenSize().
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Hook up WebKit System Interface function WKGetAvailableScreenSize.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize available screen size instance variable.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::screenSize):
        (WebKit::WebPage::availableScreenSize):

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

        Remove unused API enums
        https://bugs.webkit.org/show_bug.cgi?id=131836

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-04-17  Brent Fulgham  <bfulgham@apple.com>

        Make RenderLayerBacking get the timingFunction of the correct animation.
        https://bugs.webkit.org/show_bug.cgi?id=100632

        Reviewed by Simon Fraser.

        * Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:
        (IPC::ArgumentCoder<GraphicsLayerAnimation>::decode): Update for new signatures for
        FloatAnimationValue, TransformAnimationValue, etc.

2014-04-17  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] support replacements for misspelled words.
        https://bugs.webkit.org/show_bug.cgi?id=131827
        <rdar://problem/16319657>

        Reviewed by Benjamin Poulain.

        This is the first part of the work to add support for replacements.
        It handles _promptForReplace in canPerformAction to decide
        whether to show the Replace button in the menu and add the
        implementation of the replace action.

        * Shared/EditorState.cpp:
        (WebKit::EditorState::encode):
        (WebKit::EditorState::decode):
        * Shared/EditorState.h:
        (WebKit::EditorState::EditorState):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView selectedText]):
        (-[WKContentView replaceText:withText:]):
        (-[WKContentView _promptForReplace:]):
        (-[WKContentView replace:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView selectWordForReplacement]): This is called
        by UIKit when the user taps on a mispelled word to select it.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::replaceSelectedText):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::editorState):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture): Removed m_shouldReturnWordForSelection.
        We now return always the word corresponding to the caret selection or
        the selected text up to a maximum of 200 characters.
        (WebKit::WebPage::extendSelection):
        (WebKit::WebPage::replaceSelectedText):

2014-04-17  Tim Horton  <timothy_horton@apple.com>

        [iOS] REGRESSION (r166975): WKPDFView is broken
        https://bugs.webkit.org/show_bug.cgi?id=131828

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        Bail from updating the scroll view parameters from the layer tree update
        while it's being managed by a custom content view.
        We'll get any changes again in the next commit after removing the custom
        content view (and painting the new page) anyway, so this should be OK.

2014-04-17  Pratik Solanki  <psolanki@apple.com>

        _webProcessIdentifier should return 0 if the web process crashed
        https://bugs.webkit.org/show_bug.cgi?id=131813
        <rdar://problem/16650605>

        Reviewed by Anders Carlsson.

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

2014-04-17  Darin Adler  <darin@apple.com>

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

        Reviewed by Brent Fulgham.

        * Shared/Plugins/NPRemoteObjectMap.cpp:
        (WebKit::NPRemoteObjectMap::pluginDestroyed): Use new-style code and write the
        deprecatedDeleteAllValues function out using a loop. Might be nice to return here
        and use unique_ptr instead some day, but I tried that before and got it wrong, so
        lets do that another time.

2014-04-17  Darin Adler  <darin@apple.com>

        Add separate flag for IndexedDatabase in workers since the current implementation is not threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=131785
        rdar://problem/16003108

        Reviewed by Brady Eidson.

        * Configurations/FeatureDefines.xcconfig: Added INDEXED_DATABASE_IN_WORKERS.

2014-04-17  Dan Bernstein  <mitz@apple.com>

        WebKit2 part of <rdar://problem/16601336> [Cocoa] _userInitiated is always NO in WKNavigationAction passed to -webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:
        https://bugs.webkit.org/show_bug.cgi?id=131783

        Reviewed by Tim Horton.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow): Set the isProcessingUserGesture field of
        the NavigationActionData to the corresponding value in the NavigationAction.
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): Ditto.
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix the DidCommitLoad initial scrolling position
        https://bugs.webkit.org/show_bug.cgi?id=131780

        Reviewed by Jon Honeycutt.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:]):
        That code is older than _obscuredInsets and used the contentInsets as a workaround.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Fix annoying scrolling bugs
        https://bugs.webkit.org/show_bug.cgi?id=131722

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:WebCore::]):
        We are scrolling at the wrong position when we have the "small obscured insets".

2014-04-16  Gavin Barraclough  <baraclough@apple.com>

        On iOS keep network process running using a process assertion rather than a boost
        https://bugs.webkit.org/show_bug.cgi?id=131779

        Reviewed by Benjamin Poulain.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
            - No need to leak a boost onto the NetworkProcess on iOS.
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::didFinishLaunching):
            - Take a ProcessAssertion on the NetworkProcess.
        * UIProcess/Shared/ChildProcessProxy.h:
            - Added m_assertion.
        * UIProcess/WebProcessProxy.h:
            - Removed m_assertion.
        * UIProcess/ios/ProcessAssertion.h: Added.
            - Added - refactored from WebProcessProxy.h.
        * UIProcess/ios/ProcessAssertion.mm: Added.
        (WebKit::ProcessAssertion::ProcessAssertion):
        (WebKit::ProcessAssertion::setState):
            - Added - refactored from WebProcessProxyIOS.mm.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState):
            - Code refactored out to ProcessAssertion.mm.
        * WebKit2.xcodeproj/project.pbxproj:
            - Added files.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Improve the approximation of the scroll position of the dynamic viewport size updates
        https://bugs.webkit.org/show_bug.cgi?id=131720

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:]):
        The scrolling tree was forcing scroll at the wrong scale during the transition. 

        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        This was left out by accident. The WebProcess was getting the new layout size twice, making
        WebPage::dynamicViewportSizeUpdate() very confused when the content size changes.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):
        Add scrolling adjustment for the dynamic relayout case:
        -Sticky top and bottom like the UIProcess.
        -Keep the same relative position of the unobscured rect's center.

        Also fix a bug in the horizontal and vertical adjustments: the code was using the exposed rect
        instead of the unobscured rect, which made the adjustments off by the size of the obscured insets.

        The type is changed from double to float since ARMv7 has a grudge against double.

2014-04-16  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Do not update the visible content rects when setting the same obscured insets multiple times
        https://bugs.webkit.org/show_bug.cgi?id=131633

        Reviewed by Darin Adler.

        We should avoid computing the visible content rects when not needed.

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

2014-04-16  Zan Dobersek  <zdobersek@igalia.com>

        Make IPC::Arguments a variadic template
        https://bugs.webkit.org/show_bug.cgi?id=131684

        Reviewed by Darin Adler.

        Make IPC::Arguments a variadic template that uses the template parameter pack to further
        define the std::tuple ValueType and is used to define the std::tuple container of the
        values passed into the container.

        * Platform/IPC/Arguments.h:
        (IPC::Arguments::Arguments):
        (IPC::Arguments::encode):
        (IPC::Arguments::decode):
        (IPC::Arguments0::encode): Deleted.
        (IPC::Arguments0::decode): Deleted.
        (IPC::Arguments1::Arguments1): Deleted.
        (IPC::Arguments1::encode): Deleted.
        (IPC::Arguments1::decode): Deleted.
        (IPC::Arguments2::Arguments2): Deleted.
        (IPC::Arguments2::encode): Deleted.
        (IPC::Arguments2::decode): Deleted.
        (IPC::Arguments3::Arguments3): Deleted.
        (IPC::Arguments3::encode): Deleted.
        (IPC::Arguments3::decode): Deleted.
        (IPC::Arguments4::Arguments4): Deleted.
        (IPC::Arguments4::encode): Deleted.
        (IPC::Arguments4::decode): Deleted.
        (IPC::Arguments5::Arguments5): Deleted.
        (IPC::Arguments5::encode): Deleted.
        (IPC::Arguments5::decode): Deleted.
        (IPC::Arguments6::Arguments6): Deleted.
        (IPC::Arguments6::encode): Deleted.
        (IPC::Arguments6::decode): Deleted.
        (IPC::Arguments7::Arguments7): Deleted.
        (IPC::Arguments7::encode): Deleted.
        (IPC::Arguments7::decode): Deleted.
        (IPC::Arguments8::Arguments8): Deleted.
        (IPC::Arguments8::encode): Deleted.
        (IPC::Arguments8::decode): Deleted.
        (IPC::Arguments10::Arguments10): Deleted.
        (IPC::Arguments10::encode): Deleted.
        (IPC::Arguments10::decode): Deleted.
        * Scripts/webkit2/LegacyMessages-expected.h:
        * Scripts/webkit2/Messages-expected.h:
        * Scripts/webkit2/messages.py: Clean up the code a bit.
        (reply_parameter_type):
        (arguments_type):
        (reply_type):
        (decode_type):
        (arguments_type_old): Deleted.
        (base_class): Deleted.
        (delayed_reply_type): Deleted.

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Deduplicate LayerTreeContext
        https://bugs.webkit.org/show_bug.cgi?id=131773

        Reviewed by Simon Fraser.

        There are three identical implementations, one for each platform, for no reason.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * Shared/LayerTreeContext.cpp: Renamed from Source/WebKit2/Shared/mac/LayerTreeContextMac.mm.
        (WebKit::LayerTreeContext::LayerTreeContext):
        (WebKit::LayerTreeContext::~LayerTreeContext):
        (WebKit::LayerTreeContext::encode):
        (WebKit::LayerTreeContext::decode):
        (WebKit::LayerTreeContext::isEmpty):
        (WebKit::operator==):
        * Shared/LayerTreeContext.h:
        (WebKit::operator!=): Deleted.
        * Shared/efl/LayerTreeContextEfl.cpp: Removed.
        * Shared/gtk/LayerTreeContextGtk.cpp: Removed.
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize):

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Don't build LayerTreeHost on Mac (and clean it up)
        https://bugs.webkit.org/show_bug.cgi?id=131769

        Reviewed by Simon Fraser.

        * WebKit2.xcodeproj/project.pbxproj:
        Don't include it in the project.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::updatePreferences):
        * WebProcess/WebPage/DrawingAreaImpl.cpp:
        (WebKit::DrawingAreaImpl::updatePreferences):
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::setLayerHostingMode): Deleted.
        (WebKit::LayerTreeHost::supportsAcceleratedCompositing): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        Get rid of LayerTreeHost::supportsAcceleratedCompositing, which always returns true everywhere.
        Remove some LayerTreeHost.h includes.
        Remove LayerTreeHost::setLayerHostingMode, which is PLATFORM(COCOA) and not needed.

2014-04-16  Simon Fraser  <simon.fraser@apple.com>

        Failing to decode a layer tree commit message resulted in silent and mysterious failure
        https://bugs.webkit.org/show_bug.cgi?id=131766
        <rdar://problem/16520894>

        Reviewed by Sam Weinig.
        
        If the message decode failed, we should have already marked the message as invalid.
        Failing to do so indicates in a decode code coding error.

        * Platform/IPC/HandleMessage.h:
        (IPC::handleMessage):
        (IPC::handleMessageVariadic):
        (IPC::handleMessageDelayed):

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Minor include sanity in WebPage.h
        https://bugs.webkit.org/show_bug.cgi?id=131752

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.h:
        Remove a bunch of unnecessary includes.
        Un-indent some stuff.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebPage/FindController.cpp:
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Add back more specific includes, into implementation files.
        
        * WebProcess/WebPage/WebUndoStep.cpp:
        (WebKit::WebUndoStep::~WebUndoStep):
        * WebProcess/WebPage/WebUndoStep.h:
        Add an out-of-line destructor.

2014-04-16  Gavin Barraclough  <baraclough@apple.com>

        REGRESSION: PCE.js is 20x slower in WebKit2 because timers are throttled
        https://bugs.webkit.org/show_bug.cgi?id=131189

        Unreviewed rollout of r166754

        This change is no longer necessary.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):

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

        Updating tests after bug 131721, [GTK] Fix unused parameter warnings.

        * Scripts/webkit2/LegacyMessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveWebPageMessage):
        (WebKit::WebPage::didReceiveSyncWebPageMessage):
        * Scripts/webkit2/MessageReceiver-expected.cpp:
        (WebKit::WebPage::didReceiveMessage):
        (WebKit::WebPage::didReceiveSyncMessage):

2014-04-16  Brendan Long  <b.long@cablelabs.com>

        [GTK] Fix unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=131721

        Reviewed by Darin Adler.

        * Scripts/webkit2/messages.py:
        (generate_message_handler): Add UNUSED_PARAM() for a couple parameters which aren't always used.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<LinearTimingFunction>::decode): Remove unused parameters.
        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::textDidChangeInTextField): Same.
        (API::InjectedBundle::FormClient::willSubmitForm): Same.
        (API::InjectedBundle::FormClient::willSendSubmitEvent): Same.
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didReceiveSyncMessage): Same.

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Accidentally included some style-checker-testing changes in the last commit.

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

2014-04-16  Tim Horton  <timothy_horton@apple.com>

        Fix some style checker complaints in PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=131706

        Reviewed by Darin Adler.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeValue:forParameter:]):
        (-[WKPDFPluginAccessibilityObject accessibilityAttributeNames]):
        (WebKit::PDFPlugin::attemptToUnlockPDF):
        (WebKit::PDFPlugin::updatePageAndDeviceScaleFactors):
        (WebKit::PDFPlugin::isEditingCommandEnabled):
        (WebKit::PDFPlugin::nextMatchForString):
        (WebKit::PDFPlugin::handleWheelEvent):
        (WebKit::PDFPlugin::liveData):

2014-04-15  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a form delegate method corresponding to willSubmitForm
        https://bugs.webkit.org/show_bug.cgi?id=131718

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setFormDelegate:]): Changed to define and create a FormClient (which derives
        from API::FormClient and messages a delegate), and set it as the form client.

        * UIProcess/API/Cocoa/_WKFormDelegate.h: Declared new delegate method.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Added a
        variant of willSubmitForm that returs a user object to pass to the delegate in the UI
        process, giving it a temporary name with “new”.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Changed willSubmitForm()
        to check for the new bundle delegate method first and encode the user object as user data.
        Moved the encoding of an NSObject <NSSecureCoding> as user data into a helper function.

2014-04-15  Hyowon Kim  <hw1008.kim@samsung.com>

        Make page overlay functionality working on coordinated graphics.
        https://bugs.webkit.org/show_bug.cgi?id=131425

        Reviewed by Darin Adler.

        Page overlay functionality did not work on coordinated graphics since r166975.
        This patch removes deprecated code related to the PageOverlay GraphicsLayer management.
        and makes CoordinatedLayerTreeHost use PageOverlayController.

        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::mainFrameContentSizeChanged):
        (WebKit::CoordinatedDrawingArea::didInstallPageOverlay): Deleted.
        (WebKit::CoordinatedDrawingArea::didUninstallPageOverlay): Deleted.
        (WebKit::CoordinatedDrawingArea::setPageOverlayNeedsDisplay): Deleted.
        (WebKit::CoordinatedDrawingArea::setPageOverlayOpacity): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.h:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::setRootCompositingLayer):
        (WebKit::CoordinatedLayerTreeHost::didFlushRootLayer):
        (WebKit::CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
        (WebKit::CoordinatedLayerTreeHost::didInstallPageOverlay): Deleted.
        (WebKit::CoordinatedLayerTreeHost::didUninstallPageOverlay): Deleted.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayNeedsDisplay): Deleted.
        (WebKit::CoordinatedLayerTreeHost::setPageOverlayOpacity): Deleted.
        (WebKit::CoordinatedLayerTreeHost::createPageOverlayLayer): Deleted.
        (WebKit::CoordinatedLayerTreeHost::destroyPageOverlayLayer): Deleted.
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h:
        * WebProcess/WebPage/LayerTreeHost.h:
        (WebKit::LayerTreeHost::didInstallPageOverlay):
        (WebKit::LayerTreeHost::didUninstallPageOverlay):
        (WebKit::LayerTreeHost::setPageOverlayNeedsDisplay):

2014-04-15  Dan Bernstein  <mitz@apple.com>

        Introduce API::FormClient
        https://bugs.webkit.org/show_bug.cgi?id=131714

        Reviewed by Tim Horton.

        * UIProcess/API/APIFormClient.h: Added.
        (API::FormClient::~FormClient):
        (API::FormClient::willSubmitForm):

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFormClient): Changed to create a WebFormClient and call
        WebPageProxy::setFormClient.

        * UIProcess/WebFormClient.cpp:
        (WebKit::WebFormClient::WebFormClient): Added a constructor from WKPageFormClientBase.
        * UIProcess/WebFormClient.h: Added inheritance from API::FormClient, marked overrides as
        such.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy): Initialize m_formClient member.
        (WebKit::WebPageProxy::setFormClient): Added. Updates m_formClient.
        (WebKit::WebPageProxy::close): Updated code to clear m_formClient.
        (WebKit::WebPageProxy::willSubmitForm): Updated for type change.
        (WebKit::WebPageProxy::initializeFormClient): Deleted.
        * UIProcess/WebPageProxy.h:

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

2014-04-15  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Pages often blank on first load if page loaded by typing the URL
        https://bugs.webkit.org/show_bug.cgi?id=131665

        Reviewed by Tim Horton.

        The document overlay-related code in RemoteLayerTreeDrawingArea::setRootCompositingLayer()
        was triggering a compositing layer flush when called with a null rootLayer, which happens
        for pages going into the page cache. This would trigger a layer flush that would clobber
        the root layer for the visible page, resulting in missing content.
        
        Also, rebuildCompositingLayerTree() is called recursively and the m_documentOverlayRootLayer
        was being added to (and then removed from) every single compositing layers.
        
        Fix both these by changing to a pull model, where RenderLayerCompositor requests
        the overlay layer via ChromeClient, and gets it at the end of every flush,
        adding to the children of the root layer.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::documentOverlayLayerForFrame):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):

2014-04-15  Jinwoo Song  <jinwoo7.song@samsung.com>

        [EFL][WK2] Pass Mouse movement data to WebMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=131663

        Reviewed by Gyuyoung Kim.

        Currently mouse movement data are not passed to WebMouseEvent. Instead, they are set to 0 as default.
        EFL port needs to send the deltaX and deltaY for PointerLock API which will be implemented later.

        * Shared/efl/WebEventFactory.cpp:
        (WebKit::WebEventFactory::createWebMouseEvent):

2014-04-15  Commit Queue  <commit-queue@webkit.org>

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

        Broke CSS filters (17 test crashes) (Requested by ap on
        #webkit).

        Reverted changeset:

        "[iOS WK2] Pages often blank on first load if page loaded by
        typing the URL"
        https://bugs.webkit.org/show_bug.cgi?id=131665
        http://trac.webkit.org/changeset/167298

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Pages often blank on first load if page loaded by typing the URL
        https://bugs.webkit.org/show_bug.cgi?id=131665

        Reviewed by Tim Horton.

        The document overlay-related code in RemoteLayerTreeDrawingArea::setRootCompositingLayer()
        was triggering a compositing layer flush when called with a null rootLayer, which happens
        for pages going into the page cache. This would trigger a layer flush that would clobber
        the root layer for the visible page, resulting in missing content.
        
        Also, rebuildCompositingLayerTree() is called recursively and the m_documentOverlayRootLayer
        was being added to (and then removed from) every single compositing layers.
        
        Fix both these by changing to a pull model, where RenderLayerCompositor requests
        the overlay layer via ChromeClient, and gets it at the end of every flush,
        adding to the children of the root layer.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::documentOverlayLayerForFrame):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/mac/ViewGestureControllerMac.mm:

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (WebKit2): Programmatic scrolls in overflow-scrolling:touch don't work
        https://bugs.webkit.org/show_bug.cgi?id=131649

        Reviewed by Tim Horton.
        
        Update the UIScrollView's contentOffset when we're told that the scroll position
        changed.
        
        Also refactor slightly to have a single exception-protected block.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * UIProcess/mac/ViewGestureControllerMac.mm:

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Sometimes-crash under handleSwipeGesture after closing a window or quitting
        https://bugs.webkit.org/show_bug.cgi?id=131648
        <rdar://problem/15966106>

        Reviewed by Simon Fraser.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::~ViewGestureController):
        (WebKit::ViewGestureController::trackSwipeGesture):
        Keep a Objective C object with a single boolean property, isCancelled, on
        the ViewGestureController, and also retained by the swipe-tracking block.
        When the ViewGestureController is destroyed, we set isCancelled to YES,
        and the next time the block is invoked, we will cancel the swipe without
        touching the destroyed ViewGestureController.

        (WebKit::ViewGestureController::handleSwipeGesture):
        Don't try to handle a swipe gesture if the drawing area is missing.

        (WebKit::ViewGestureController::endSwipeGesture):
        Clear the swipe cancellation tracker when the gesture completes.

2014-04-14  Enrica Casucci  <enrica@apple.com>

        REGRESSION(r166027) Menu is shown and immediately hidden after doubletap gesture.
        https://bugs.webkit.org/show_bug.cgi?id=131646
        <rdar://problem/16614374>

        Reviewed by Benjamin Poulain.

        This is a problem with every gesture that changes the selection
        We don't need to delay updating the selection if the selection is
        being changed with a gesture.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _didUpdateBlockSelectionWithTouch:withFlags:growThreshold:shrinkThreshold:]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        (-[WKContentView _selectionChanged]):

2014-04-14  Dan Bernstein  <mitz@apple.com>

        Let the bundle form client know whether a change in a text field was initiated by user typing
        https://bugs.webkit.org/show_bug.cgi?id=131643

        Reviewed by Sam Weinig.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Added
        initiatedByUserTyping parameter to the delegate method.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Updated overload of
        textDidChangeInTextField to take the initiatedByUserTyping parameter and pass it along to
        the delegate.

        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::textDidChangeInTextField): Added initiatedByUserTyping
        parameter.

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::textDidChangeInTextField): Maintained the existing
        behavior of not calling the C SPI client if the change was not initiated by user typing.
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h: Updated for added parameter.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textDidChangeInTextField): Changed to call the bundle client
        function unconditionally, but pass along whether the change was initiated by user typing.

2014-04-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a WKWebProcessPlugInFormDelegate method corresponding to willSendSubmitEvent
        https://bugs.webkit.org/show_bug.cgi?id=131639

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared
        new delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added an override
        of API::InjectedBundle::FormClient::willSendSubmitEvent which calls the new delegate
        method.

2014-04-14  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Change the SPI used when starting the rotation animation
        https://bugs.webkit.org/show_bug.cgi?id=131638

        Reviewed by Tim Horton.

        Having an update block where all the properties are changed is more convenient for Safari.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Hash table assertion closing a tab
        https://bugs.webkit.org/show_bug.cgi?id=131640

        Reviewed by Tim Horton.
        
        Have RemoteLayerTreeContext keep track of all PlatformCALayerRemotes,
        and clear their context pointer when it is being destroyed to avoid
        calling into a deleted object later.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::~PlatformCALayerRemote):
        (WebKit::PlatformCALayerRemote::addAnimationForKey):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        (WebKit::PlatformCALayerRemote::clearContext):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::~RemoteLayerTreeContext):
        (WebKit::RemoteLayerTreeContext::layerWasCreated):
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Allow dynamic changes of WKThumbnailView snapshot scale
        https://bugs.webkit.org/show_bug.cgi?id=131628
        <rdar://problem/16584156>

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        Don't bail from requesting a snapshot just because we already had one; we want to resnapshot.
        Keep track of when we bail from requesting a snapshot because we have one in-flight, so we can request it later.

        (-[_WKThumbnailView _didTakeSnapshot:]):
        Apply the scale to the bitmap size (whoops!).
        Make CA always resize the content to fill the thumbnail view's layer, respecting aspect ratio.
        Re-snapshot if we previously deferred a snapshot.

        (-[_WKThumbnailView setScale:]):
        If we get a scale change, request a new snapshot.

        (-[_WKThumbnailView setUsesSnapshot:]):
        Never apply thumbnail scale to the page if we're using snapshots. It's unnecessary,
        because scale will be applied simply when painting the software snapshot.
        Apply the thumbnail scale if we're going from usesSnapshot -> !usesSnapshot.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::snapshotAtSize):
        Snapshots should use the greater of the two scales, so as to never leave a portion of the snapshot unpainted.

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (WebKit2 View Gestures): Double-tap doesn't work properly when there's no element underneath the cursor
        https://bugs.webkit.org/show_bug.cgi?id=131629
        <rdar://problem/16192821>

        Reviewed by Dan Bernstein.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
        If there's nothing under the cursor, zoom towards the cursor instead of towards 0,0.

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        Run filter animations in the UI process with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=131199
        <rdar://problem/16479487>

        Reviewed by Sam Weinig.
        
        * Shared/WebCoreArgumentCoders.cpp: Removed lots of WebCore::
        (IPC::ArgumentCoder<SelectionRect>::decode):
        (IPC::ArgumentCoder<PasteboardWebContent>::encode):
        (IPC::ArgumentCoder<PasteboardWebContent>::decode):
        (IPC::ArgumentCoder<PasteboardImage>::encode):
        (IPC::ArgumentCoder<PasteboardImage>::decode):
        (IPC::ArgumentCoder<URL>::decode):
        (IPC::ArgumentCoder<UserStyleSheet>::encode):
        (IPC::ArgumentCoder<UserStyleSheet>::decode):
        (IPC::ArgumentCoder<UserScript>::encode):
        (IPC::ArgumentCoder<UserScript>::decode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::encode):
        (IPC::ArgumentCoder<ScrollableAreaParameters>::decode):
        (IPC::ArgumentCoder<FixedPositionViewportConstraints>::encode):
        (IPC::ArgumentCoder<FixedPositionViewportConstraints>::decode):
        (IPC::ArgumentCoder<StickyPositionViewportConstraints>::encode):
        (IPC::ArgumentCoder<StickyPositionViewportConstraints>::decode):
        (IPC::ArgumentCoder<FilterOperation>::encode):
        (IPC::decodeFilterOperation):
        (IPC::ArgumentCoder<FilterOperations>::encode):
        (IPC::ArgumentCoder<WebCore::UserStyleSheet>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::UserStyleSheet>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::UserScript>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::UserScript>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::ScrollableAreaParameters>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::ScrollableAreaParameters>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::FixedPositionViewportConstraints>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::FixedPositionViewportConstraints>::decode): Deleted.
        (IPC::ArgumentCoder<WebCore::StickyPositionViewportConstraints>::encode): Deleted.
        (IPC::ArgumentCoder<WebCore::StickyPositionViewportConstraints>::decode): Deleted.
        (IPC::encodeFilterOperation): Deleted.
        Add encoding/decoding support for FilterOperation.
        decodeFilterOperation() has to be a bare function because of the RefPtr
        out parameter.
        REFERENCE filters should never be encoded, since they have CachedSVGDocumentReferences.

        * Shared/WebCoreArgumentCoders.h:

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        Add logging for filter animations to the RemoteLayerTree log output.

        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::addAnimation): Deleted. We can run
        filter animations now.

        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
        KeyValues have a RefPtr<WebCore::FilterOperation> now (which can't be part of
        the union because we need its constructor to get called).
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::encode): Encode the filter.
        (WebKit::PlatformCAAnimationRemote::KeyframeValue::decode): Decode the filter.
        (WebKit::PlatformCAAnimationRemote::setFromValue): Implement.
        (WebKit::PlatformCAAnimationRemote::setToValue): Implement.
        (WebKit::PlatformCAAnimationRemote::setValues): Implement.
        (WebKit::animationValueFromKeyframeValue): Handle filters.

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the build.

        * UIProcess/mac/PageClientImpl.h:

2014-04-14  Simon Fraser  <simon.fraser@apple.com>

        [WK2 iOS] Scrolling to anchor links is broken
        https://bugs.webkit.org/show_bug.cgi?id=131618
        <rdar://problem/16599144>

        Reviewed by Tim Horton.
        
        The RemoteScrollingTree implements scrollingTreeNodeRequestsScroll
        to get informed about requested scroll position updates, and passes
        them along via the RemoteScrollingCoordinatorProxy, WebPageProxy and PageClient
        to the WKWebView, which performs a scroll.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _scrollToContentOffset:WebCore::]): Scroll to content offset,
        taking page scale and insets into account.
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::requestScroll):
        * UIProcess/CoordinatedGraphics/WebView.h:
        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeRequestsScroll):
        Pass scrolls along to the WebPageProxy for the root node. We will also need
        to handle programmatic scrolls for overflow soon.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeRequestsScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::requestScroll):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::canScrollView):
        (WebKit::PageClientImpl::requestScroll):
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::requestScroll):

2014-04-12  Antti Koivisto  <antti@apple.com>

        Keep secondary tile grid for zoomed-out scale
        https://bugs.webkit.org/show_bug.cgi?id=131586

        Reviewed by Darin Adler.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::PlatformCALayerRemoteTiledBacking):
        (WebKit::PlatformCALayerRemoteTiledBacking::customSublayers):
        
            Always request new sublayer list from tile controller.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Make WK(Web)View magnification setters actually use view-relative positions
        https://bugs.webkit.org/show_bug.cgi?id=131611
        <rdar://problem/15965239>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        Use scalePageInViewCoordinates instead.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::scalePageInViewCoordinates):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scalePageInViewCoordinates):
        (WebKit::WebPage::pageScaleFactor):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Add scalePageInViewCoordinates, which turns the scale centerpoint within the view
        into what scalePage expects: a post-scale scroll offset.

2014-04-14  Tim Horton  <timothy_horton@apple.com>

        Support setting a background color on page overlays
        https://bugs.webkit.org/show_bug.cgi?id=131600

        Reviewed by Darin Adler.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::PageOverlay):
        (WebKit::PageOverlay::bounds):
        (WebKit::PageOverlay::startFadeInAnimation):
        (WebKit::PageOverlay::startFadeOutAnimation):
        (WebKit::PageOverlay::startFadeAnimation):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        Minor style adjustments.
        Use more references everywhere.

        (WebKit::PageOverlay::setBackgroundColor):
        (WebKit::PageOverlay::setNeedsDisplay):
        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::backgroundColor):
        Keep track of our background color, and push it down to the page overlay controller if we have one.

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::updateOverlayGeometry):
        (WebKit::PageOverlayController::clearPageOverlay):
        Page overlays will always have the right size, and just use drawsContents to determine
        whether or not they should tile/have backing store/etc.

        (WebKit::PageOverlayController::installPageOverlay):
        (WebKit::PageOverlayController::didChangeOverlayBackgroundColor):
        Set the background color of the layer.

        * WebProcess/WebPage/PageOverlayController.h:

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

2014-04-13  Andy Estes  <aestes@apple.com>

        [QuickLook] Move file system-related code into WebKit
        https://bugs.webkit.org/show_bug.cgi?id=131597

        Reviewed by Dan Bernstein.

        * WebProcess/Network/WebResourceLoader.h: Made m_quickLookHandle a unique_ptr.
        * WebProcess/ios/WebResourceLoaderIOS.mm:
        (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded):

2014-04-13  Andy Estes  <aestes@apple.com>

        REGRESSION (r167164): -[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:] _block_invoke can access a deallocated completionHandler
        https://bugs.webkit.org/show_bug.cgi?id=131595

        Reviewed by Dan Bernstein.

        Make a copy of completionHandler and release it after we're done with it.

        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2014-04-13  Pratik Solanki  <psolanki@apple.com>

        Don't use ImportanceAssertion on iOS
        https://bugs.webkit.org/show_bug.cgi?id=131481
        <rdar://problem/16575830>

        Reviewed by Darin Adler.

        We have other API to mark processes as being in use on iOS. No need to use ImportanceAssertion.

        * Platform/IPC/MessageDecoder.cpp:
        * Platform/IPC/MessageDecoder.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::receiveSourceEventHandler):
        * Platform/IPC/mac/ImportanceAssertion.h:

2014-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r167168 and r167194.
        https://bugs.webkit.org/show_bug.cgi?id=131589

        Caused massive ASSERTION failures on the GTK Debug bot
        (Requested by philn on #webkit).

        Reverted changesets:

        "[GTK] Add HighDPI support for non-accelerated compositing
        contents"
        https://bugs.webkit.org/show_bug.cgi?id=131562
        http://trac.webkit.org/changeset/167168

        "Unreviewed. Fix GTK+ build with recent cairo and GTK+ after
        r167168."
        http://trac.webkit.org/changeset/167194

2014-04-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build with recent cairo and GTK+ after r167168.

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

2014-04-12  Andy Estes  <aestes@apple.com>

        [iOS] Move QuickLookHandle from ResourceLoader to WebResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=131580

        Reviewed by Darin Adler.

        There's no need to bloat WebKit1's ResourceLoader with a pointer that
        only WebKit2's WebResourceLoader cares about.

        * WebProcess/Network/WebResourceLoader.cpp:
        (WebKit::WebResourceLoader::didReceiveResponseWithCertificateInfo):
        (WebKit::WebResourceLoader::didReceiveData):
        (WebKit::WebResourceLoader::didFinishResourceLoad):
        (WebKit::WebResourceLoader::didFailResourceLoad):
        * WebProcess/Network/WebResourceLoader.h:
        * WebProcess/ios/WebResourceLoaderIOS.mm:
        (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded):

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

        [Mac] Crashes when copying or pasting huge images
        https://bugs.webkit.org/show_bug.cgi?id=131576
        <rdar://problem/12131833>
        <rdar://problem/14427398>

        Reviewed by Darin Adler.

        Added a few null checks for SharedMemory::create() return value in pasteboard code.
        Error handling feels a bit sketchy, but
        - I'm not sure what it should look like ideally;
        - it matches the kind of error handling we already have in these functions;
        - it appears to work reasonably well in practice. We get empty content, which
        is not nice, but not particularly problematic either. When copying an animated GIF,
        we also get the GIF in RTFD flavor, so even pasting into NSTextViews works!

        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::createFromVMBuffer):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::getPasteboardBufferForType):
        (WebKit::WebContext::readBufferFromPasteboard):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::setBufferForType):

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: (WebKit::WebDragClient::declareAndWriteDragImage):
        Also renamed some variables to prevent name collisions with with nested scope.

2014-04-11  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on the EFL port after r167152

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

2014-04-11  Hyowon Kim  <hw1008.kim@samsung.com>

        [WK2] WebProcess crashes, when closing window after opening page by means of context menu
        https://bugs.webkit.org/show_bug.cgi?id=131439

        Reviewed by Tim Horton.

        CoordinatedGraphicsLayer calls notifyFlushRequired() through its client when destroyed.
        When PageOverlayController::notifyFlushRequired() is called, the DrawingArea could be null
        because it's destoryed in WebPage::close().

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::notifyFlushRequired): Add null check of m_webPage->drawingArea().

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

        Lots of compositing test failures after r167152
        https://bugs.webkit.org/show_bug.cgi?id=131574

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/PageOverlayController.h:
        Skip page overlay layers in layer tree dumps, for consistency between platforms.

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

        Need WK2 API to disable rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=131567

        Reviewed by Simon Fraser.

        New API allows the client to enable/disable horizontal or vertical rubber-banding. 
        By default, rubber-banding is enabled.
        * UIProcess/API/C/WKPage.cpp:
        (WKPageVerticalRubberBandingIsEnabled):
        (WKPageSetEnableVerticalRubberBanding):
        (WKPageHorizontalRubberBandingIsEnabled):
        (WKPageSetEnableHorizontalRubberBanding):
        * UIProcess/API/C/WKPage.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setEnableVerticalRubberBanding):
        (WebKit::WebPageProxy::verticalRubberBandingIsEnabled):
        (WebKit::WebPageProxy::setEnableHorizontalRubberBanding):
        (WebKit::WebPageProxy::horizontalRubberBandingIsEnabled):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setEnableVerticalRubberBanding):
        (WebKit::WebPage::setEnableHorizontalRubberBanding):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

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

        Fix the Mac build.

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

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

        [iOS WebKit2] Find-in-page indicator
        https://bugs.webkit.org/show_bug.cgi?id=131510
        <rdar://problem/16547777>

        Reviewed by Simon Fraser and Enrica Casucci.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        WebKit2 will clear the selection if we reveal it while not enabling selection painting.
        So, avoid revealing it.

        (WebKit::FindController::findString):
        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        #if out the cross-platform find indicator code on iOS; it will be replaced
        by the code in FindControllerIOS.

        * WebProcess/WebPage/FindController.h:

        * WebProcess/WebPage/ios/FindControllerIOS.mm: Added.
        (highlightColor):
        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
        Paint the selection (with black text forced on), and the yellow rounded rect
        into the indicator page overlay.

        (WebKit::FindController::updateFindIndicator):
        Create or update a small document-relative page overlay in the selection rect.

        (WebKit::FindController::hideFindIndicator):
        (WebKit::FindController::willFindString):
        (WebKit::FindController::didFailToFindString):
        (WebKit::FindController::didHideFindIndicator):
        Add willFindString, didFailToFindString, and didHideFindIndicator functions.
        They do nothing, except on iOS where they are used to prevent selection change
        messages from being dispatched while using find-in-page, and to force
        WebCore to compute a selection rect (via updateAppearance) despite the selection not being painted.

        * WebProcess/WebPage/ios/FindIndicatorOverlayClientIOS.h:
        (WebKit::FindIndicatorOverlayClientIOS::setFrame):

2014-04-11  Owen Taylor  <otaylor@redhat.com>

        [GTK] Add HighDPI support for non-accelerated compositing contents
        https://bugs.webkit.org/show_bug.cgi?id=131562

        Reviewed by Martin Robinson.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (scaleFactorChanged): Added this callback to pass scale changes to the page proxy.
        (webkitWebViewBaseCreateWebPage): Attach the callback to the notify signal.
        * UIProcess/cairo/BackingStoreCairo.cpp:
        (WebKit::createBackingStoreForGTK): Pass the scale factor to the WebCore backing store.
        (WebKit::BackingStore::incorporateUpdate): Ditto.

2014-04-10  Jer Noble  <jer.noble@apple.com>

        [WK2] Dispatch to main thread's run loop to handle cookie requests.
        https://bugs.webkit.org/show_bug.cgi?id=131524

        Reviewed by Brady Eidson.

        When using synchronous network APIs from the main thread (e.g., -[NSImage
        initWithContentsOfURL:]) our cookie shim would attempt to dispath_async
        to the main thread to handle the cookie request, and block against the original
        request. CFNetwork is still servicing the run loop however, so rather than
        dispatch_async to the main queue, use the RunLoop to dispatch to the main thread.

        * Shared/mac/CookieStorageShim.mm:
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

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

        Make the stylebot happier with r167154.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/PageClientImplIOS.h:

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

        [iOS WebKit2] Expose a simplified zoom-to-rect to the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=131563

        Reviewed by Simon Fraser.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::zoomToRect):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::zoomToRect):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::zoomToRect):
        Add a simple message that calls WKContentView's zoom-to-rect code given just a rect and min/max scale.
        We will use the center of the rect as the zoom origin, and will try to show the whole rect.

2014-04-10  Jer Noble  <jer.noble@apple.com>

        [iOS][WK2] Videos should animate into and out of fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=131497

        Reviewed by Simon Fraser.

        Pass a starting rect for the enterFullscreen animation and an ending rect
        for the exitFullscreen animation.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreenWithID): Pass initialFrame.
        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::screenRectOfContents): Casts node -> element and returns its screenRect().
        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode): Pass initialFrame.
        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode): Pass finalFrame.

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

        Support document-relative and custom-frame page overlays
        https://bugs.webkit.org/show_bug.cgi?id=131560
        <rdar://problem/16595556>

        Reviewed by Simon Fraser.

        Add "document-relative" overlays, which attach to (and scroll with) the document,
        and can be given a frame rect within the document to avoid overallocation of backing store.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrame):
        (WebKit::WebPage::mainFrameView):
        (WebKit::WebPage::didChangeScrollOffsetForFrame):
        * WebProcess/WebPage/WebPage.h:
        Let the PageOverlayController know *which* frame scrolled, instead of "any frame".

        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        Factor out shared code.

        (WebKit::FindController::willMoveToWebPage):
        (WebKit::FindController::drawRect):
        We can use clearRect() instead of a transparency layer and fillRect().
        I've looked through all the other overlay clients I know of and none of them
        depend on having a transparency layer at the overlay level.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::create):
        (WebKit::PageOverlay::PageOverlay):
        (WebKit::PageOverlay::bounds):
        (WebKit::PageOverlay::frame):
        (WebKit::PageOverlay::setFrame):
        (WebKit::PageOverlay::drawRect):
        Add OverlayType, which allows creation of Document or View relative overlays.
        All overlays up to this point are View relative, so we default to that.
        Document-relative overlays scroll with the page instead of repainting as
        the page scrolls. They can also be given an explicit frame, allowing them
        to be smaller than the entire document.

        * WebProcess/WebPage/PageOverlay.h:
        (WebKit::PageOverlay::overlayType):
        (WebKit::PageOverlay::webPage):
        (WebKit::PageOverlay::client): Deleted.
        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::initialize):
        (WebKit::PageOverlayController::installPageOverlay):
        (WebKit::PageOverlayController::uninstallPageOverlay):
        (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates):
        (WebKit::updateOverlayGeometry):
        (WebKit::PageOverlayController::setPageOverlayNeedsDisplay):
        (WebKit::PageOverlayController::didChangeViewSize):
        (WebKit::PageOverlayController::didChangeDocumentSize):
        (WebKit::PageOverlayController::didChangeDeviceScaleFactor):
        (WebKit::PageOverlayController::didScrollFrame):
        (WebKit::PageOverlayController::flushPageOverlayLayers):
        (WebKit::PageOverlayController::didChangeOverlayFrame):
        Keep two overlay root layers - one for view-relative
        and one for document-relative overlays.
        Don't force synchronous scrolling if we only have document-relative overlays.
        Update the overlay's position as well as its size whenever necessary.
        Update document-relative overlay geometry when the document size changes.
        Only explicitly flush view-relative overlays; document-relative ones
        are plugged into the WebCore layer tree and flushed along with the page.

        * WebProcess/WebPage/PageOverlayController.h:
        (WebKit::PageOverlayController::documentOverlayRootLayer):
        (WebKit::PageOverlayController::viewOverlayRootLayer):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
        (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
        Let the PageOverlay controller know when the document size changes.
        When we set up compositing, push the document overlay root layer
        down into WebCore.

2014-04-11  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2]: Share NSURLCache directory for webkit processes
        https://bugs.webkit.org/show_bug.cgi?id=131513
        <rdar://problem/16420859>

        Reviewed by Alexey Proskuryakov.

        Use iOS specific NSURLCache API to share the cache directory used by the networking process,
        web process and Safari.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

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

        [Mac] Add IconServices to WebProcess sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=131558
        <rdar://problem/16552397>

        Reviewed by Brady Eidson.

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

2014-04-11  Antti Koivisto  <antti@apple.com>

        Pipe initial scale factor to TileController
        https://bugs.webkit.org/show_bug.cgi?id=131521

        Reviewed by Tim Horton.

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

2014-04-10  Chris Fleizach  <cfleizach@apple.com>

        AX: WebProcess at com.apple.WebCore: WebCore::AXObjectCache::rootObject + 18
        https://bugs.webkit.org/show_bug.cgi?id=131522

        Reviewed by Anders Carlsson.

        Protect against documents that have had their render tree destroyed, and no longer return a valid cache.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm:

2014-04-11  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Prevent crash when exiting fullscreen mode
        https://bugs.webkit.org/show_bug.cgi?id=131528

        Reviewed by Jer Noble.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        Clean up the _scaleAnimation controller, not just the _fadeAnimation controller.
        (-[WKFullScreenWindowController close]): If we are doing an immediate
        close of the view, we need to stop animations so we avoid any
        final timer events from interacting with invalid window handles.

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

        wk2-gtk does not display anything
        https://bugs.webkit.org/show_bug.cgi?id=125558

        Reviewed by Martin Robinson.

        Remove fcntl call to set access mode flags on the duplicated files
        descriptor. Those flags are ignored in Linux and make fcntl to
        fail in FreeBSD. We should handle the case where the passed
        protection is ReadOnly.
        Thanks to Raphael Kubo da Costa who proposed the solution.

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::createHandle):
        (WebKit::accessModeFile): Deleted.

2014-04-11  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Move Vector objects into WebEditorClient::executePendingEditorCommands() invocations
        https://bugs.webkit.org/show_bug.cgi?id=131454

        Reviewed by Carlos Garcia Campos.

        * WebProcess/WebCoreSupport/WebEditorClient.h:
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:
        (WebKit::WebEditorClient::executePendingEditorCommands): Take a const reference of the Vector
        object to avoid unnecessary copies. Also deploy two range-based for loops and efficiently move
        the Editor::Command objects into the other Vector.

2014-04-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16582465> [Cocoa] Avoid casts from CF types to unrelated Objective-C types
        https://bugs.webkit.org/show_bug.cgi?id=131529

        Reviewed by Mark Rowe.

        * Shared/API/c/cf/WKStringCF.mm:
        (WKStringCreateWithCFString): Cast the CFStringRef into its toll-free-bridged counterpart,
        NSString, then cast the NSString into a WKNSString.
        * Shared/API/c/cf/WKURLCF.mm:
        (WKURLCreateWithCFURL): Cast the CFURLRef into its toll-free-bridged counterpart, NSURL,
        then cast the NSURL into a WKNSURL.

2014-04-10  Dan Bernstein  <mitz@apple.com>

        BundlePageDiagnosticLoggingClient leaks every string passing through it.
        https://bugs.webkit.org/show_bug.cgi?id=130140

        Reviewed by Brent Fulgham.

        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage): Don’t copy the
        strings passed into the bundle client.

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

        Try to fix the debug bots after r167102

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-04-10  Gavin Barraclough  <barraclough@apple.com>

        Add user default for FTL JIT
        https://bugs.webkit.org/show_bug.cgi?id=131520

        Reviewed by Benjamin Poulain.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::decode):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):
            - D'oh, whitespace.

2014-04-10  Gavin Barraclough  <barraclough@apple.com>

        Add user default for FTL JIT
        https://bugs.webkit.org/show_bug.cgi?id=131520

        Reviewed by Benjamin Poulain.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
            - pass setting to WebContent process.
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):
            - read user default.
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):
            - set JSC::Option.

2014-04-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Notify the form delegate when the custom button in the form accessory view is tapped
        https://bugs.webkit.org/show_bug.cgi?id=131518

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/_WKFormDelegate.h: Declared new delegate method.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryAutoFill]): Call the new delegate method.

2014-04-10  Commit Queue  <commit-queue@webkit.org>

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

        there was already a mechanism for this, and this was
        incomplete anyway (Requested by thorton on #webkit).

        Reverted changeset:

        "[iOS WebKit2] Disable the find overlay for now"
        https://bugs.webkit.org/show_bug.cgi?id=131509
        http://trac.webkit.org/changeset/167097

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

        [iOS WebKit2] Disable the find overlay for now
        https://bugs.webkit.org/show_bug.cgi?id=131509

        Reviewed by Adele Peterson.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::FindController):
        (WebKit::FindController::hideFindOverlay):
        (WebKit::FindController::hideFindUI):
        (WebKit::FindController::setShouldShowOverlay):
        * WebProcess/WebPage/FindController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Add a setting allowing us to turn off the find-in-page overlay on iOS.

2014-04-10  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed GTK build fix after r167074.

        This involves replacing resetDragSession() by
        resetCurrentDragInformation() and dragSession().operation by
        currentDragOperation().

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDataReceived):
        (webkitWebViewBaseDragMotion):
        (dragExitedCallback):

2014-04-10  Owen Taylor  <otaylor@redhat.com>

        [Cairo] Implement ShareableBitmap::paint() with scale factor
        https://bugs.webkit.org/show_bug.cgi?id=64665

        Reviewed by Martin Robinson.

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

2014-04-10  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Support phraseboundary gesture recognizer for CJK.
        https://bugs.webkit.org/show_bug.cgi?id=131493
        <rdar://problem/16319583>

        Reviewed by Benjamin Poulain.

        On iOS it is possible with a gesture to change the selection
        within the marked text.
        Changing the selection triggers also the update of the inline candidates
        over the keyboard area.
        The patch adds the logic to decide whether the gesture can begin
        as well as the code for the movement of
        the selection within the marked range.
        The gesture is allowed to start within a given radius from the marked
        area.

        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h:
        (WebKit::InteractionInformationAtPosition::InteractionInformationAtPosition):
        * Shared/ios/GestureTypes.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::editorStateChanged):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView pointIsNearMarkedText:]):
        (toGestureType):
        (toUIWKGestureType):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::selectWithGesture):
        (WebKit::WebPage::getPositionInformation):

2014-04-10  Enrica Casucci  <enrica@apple.com>

        Unreviewed iOS build fix after http://trac.webkit.org/changeset/167074

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

2014-04-10  Alexey Proskuryakov  <ap@apple.com>

        Gtk build fix.

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

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Eliminate DragSession structure
        https://bugs.webkit.org/show_bug.cgi?id=131465

        Reviewed by Benjamin Poulain.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<DragSession>::encode): Deleted.
        (IPC::ArgumentCoder<DragSession>::decode): Deleted.
        * Shared/WebCoreArgumentCoders.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingUpdated:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::didPerformDragControllerAction):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::currentDragOperation):
        (WebKit::WebPageProxy::currentDragIsOverFileInput):
        (WebKit::WebPageProxy::currentDragNumberOfFilesToBeAccepted):
        (WebKit::WebPageProxy::resetCurrentDragInformation):
        (WebKit::WebPageProxy::dragSession): Deleted.
        (WebKit::WebPageProxy::resetDragSession): Deleted.
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2014-04-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] LayerTreeHostGtk is creating a software scene graph
        https://bugs.webkit.org/show_bug.cgi?id=131471

        Reviewed by Sergio Villar Senin.

        At some point, a regression was introduced that sent the GTK+ WebKit2 scenegraph down the
        software route. The rest of the file depends on the fact that the TextureMapper is the OpenGL
        variety, so we should force that explicitly. This is causing crashes locally and soon we
        should be able to test this directly.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::initialize): Force the use of the OpenGL scenegraph.

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Fix build failure when #if USE(XPC_SERVICES) is false.
        https://bugs.webkit.org/show_bug.cgi?id=131474

        Reviewed by Dan Bernstein.

        Fix build. 

        * UIProcess/ios/WebProcessProxyIOS.mm:
        Add #if around BackgroundTabFlags ForegroundTabFlags to prevent unused variable error.

2014-04-09  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add API to set preferred languages
        https://bugs.webkit.org/show_bug.cgi?id=131435

        Reviewed by Gyuyoung Kim.

        Add ewk_context_preferred_languages_set to change the list of "Accept-Language".
        This list is used to receive alternative version of contents, which is related
        to specified languages from the contents provider.

        * UIProcess/API/efl/ewk_context.cpp:
        (ewk_context_preferred_languages_set):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (serverCallback):
        (TEST_F): Added test case for ewk_context_preferred_languages_set

2014-04-09  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add the initial WebProcess handling of animated resize for rotation
        https://bugs.webkit.org/show_bug.cgi?id=131469

        Reviewed by Tim Horton.

        Add the basic handling of dynamic resize from the WebProcess.

        On animated resize, the UIProcess decides new target rects and scale. The information
        is then passed to the WebProcess to update the content.

        For various reason, the target rects and scale computed by the UIProcess can be incorrect
        (for example, if viewport constraints limit the scale).

        In those cases, the WebProcess has all the information to compute a better target. This patch
        adds such a basic update mechanism.

        Once the new values are computed, they are sent back to the UIProcess. If the rotation animation
        is still ongoing, we do not want mess with it. What we do is set a temporary transform on the subviews
        and restore the real value after the animation. The key is to have the two matrix multiplying to the end
        value so that there is no visual difference.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _dynamicViewportUpdateChangedTargetToScale:position:]):
        (setViewportConfigurationMinimumLayoutSize):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _setMinimumLayoutSizeOverride:]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]):
        (-[WKWebView _endAnimatedResize]):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _frameOrBoundsChanged]):
        (-[WKView setMinimumLayoutSizeOverride:]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::dynamicViewportUpdateChangedTarget):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView setMinimumLayoutSize:]): Deleted.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
        (WebKit::WebPageProxy::dynamicViewportUpdateChangedTarget):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::dynamicViewportSizeUpdate):

2014-04-09  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ build after resetDragOperation rename

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDataReceived): Rename resetDragOperation to resetDragSession.
        (dragExitedCallback): Ditto.

2014-04-09  Jeremy Jones  <jeremyj@apple.com>

        Enable fullscreen captions selection
        https://bugs.webkit.org/show_bug.cgi?id=131069

        Reviewed by Eric Carlson.

        Enable media selection in fullscreen.
        setLegibleMediaSelectionOptions/setAudioMediaSelectionOptions provide a list of options.
        selectAudioMediaOption/selectLegibleMediaOption change the selected option.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Add selectAudioMediaOption/selectLegibleMediaOption

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Add selectAudioMediaOption/selectLegibleMediaOption

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::selectAudioMediaOption):
        Add selectAudioMediaOption

        (WebKit::WebVideoFullscreenManagerProxy::selectLegibleMediaOption):
        Add selectLegibleMediaOption

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        Add setAudioMediaSelectionOptions/setLegibleMediaSelectionOptions

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setAudioMediaSelectionOptions):
        Add setAudioMediaSelectionOptions

        (WebKit::WebVideoFullscreenManager::setLegibleMediaSelectionOptions):
        Add setLegibleMediaSelectionOptions

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Rename some dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=131460

        Reviewed by Tim Horton.

        Renamed performDrag to performDragOperation.

        Also renamed resetDragOperation to resetDragSession, because it's m_dragSession
        that it resets.

        * Shared/DragControllerAction.h:
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDragDrop):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView draggingEntered:]):
        (-[WKView draggingExited:]):
        (-[WKView performDragOperation:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::performDragOperation):
        (WebKit::WebPageProxy::performDrag): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::resetDragSession):
        (WebKit::WebPageProxy::resetDragOperation): Deleted.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::performDragControllerAction):

2014-04-09  Gavin Barraclough  <baraclough@apple.com>

        Update SPI for managing tabs
        https://bugs.webkit.org/show_bug.cgi?id=131453

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebKit2.xcconfig:
            - added AssertionServices
        * UIProcess/WebProcessProxy.h:
            - added m_assertion, m_assertionState.
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState):
            - create BKSProcessAssertion to take an assertion.

2014-04-09  Enrica Casucci  <enrica@apple.com>

        WK2: Dictated words disappear after being inserted.
        https://bugs.webkit.org/show_bug.cgi?id=131458
        <rdar://problem/16395011>

        Reviewed by Benjamin Poulain.

        The dictation engine treats selected text as text to be
        removed. We need to ensure that the range selected to insert the
        new text isn't reflected in the UI process until we are done
        inserting the text.

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

2014-04-09  Brady Eidson  <beidson@apple.com>

        Don't offer "contact" actions in telephone number menus
        <rdar://problem/16556907> and https://bugs.webkit.org/show_bug.cgi?id=131451

        Reviewed by Tim Horton.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu): Skip actions that have to do with contacts,
          and skip separators too!

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r166975.

        Do not use WebPage removed API to fix the build. Page overlays are
        no broken, see https://bugs.webkit.org/show_bug.cgi?id=131433.

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

2014-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r166965.

        * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:
        (WebKit::WebDragClient::startDrag): Rename Clipboard to DataTransfer.

2014-04-08  Hyowon Kim  <hw1008.kim@samsung.com>

        Fix EFL Build errors since r166975.
        https://bugs.webkit.org/show_bug.cgi?id=131421

        Reviewed by Gyuyoung Kim.

        This patch is just for fixing EFL build errors.
        The page overlay functionality is not working yet.

        * CMakeLists.txt:
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:
        (WebKit::CoordinatedDrawingArea::display):
        * WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:
        (WebKit::CoordinatedLayerTreeHost::CoordinatedLayerTreeHost):
        (WebKit::CoordinatedLayerTreeHost::paintLayerContents):
        * WebProcess/WebPage/PageOverlayController.cpp:
        * WebProcess/WebPage/TapHighlightController.cpp:
        (WebKit::TapHighlightController::hideHighlight):

2014-04-08  Jon Lee  <jonlee@apple.com>

        Turn MSE on by default
        https://bugs.webkit.org/show_bug.cgi?id=131313
        <rdar://problem/16525223>

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:
        * Shared/WebPreferencesStore.h: Set default to true.
        * UIProcess/API/C/WKPreferencesRefPrivate.h:

2014-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Fix the typo in the previous commit.

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

2014-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r 166890): Crash inside WebKit::WebEditorClient::textFieldDidEndEditing
        https://bugs.webkit.org/show_bug.cgi?id=131409

        Reviewed by Anders Carlsson.

        Create an empty API::InjectedBundle::FormClient to avoid crashing inside
        m_mainFrame->coreFrame()->loader().detachFromParent().

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

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

        Unify and factor out page overlay implementations
        https://bugs.webkit.org/show_bug.cgi?id=131353

        Reviewed by Anders Carlsson.

        * WebProcess/WebPage/PageOverlayController.cpp:
        (WebKit::PageOverlayController::uninstallPageOverlay):
        Don't turn fast scrolling back off unless the last overlay is removed.

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

        Add a WKNavigationAction property indicating whether it resulted from processing a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=131405
        <rdar://problem/16535453>

        Reviewed by Tim Horton.

        * Shared/NavigationActionData.cpp:
        (WebKit::NavigationActionData::NavigationActionData):
        (WebKit::NavigationActionData::encode):
        (WebKit::NavigationActionData::decode):
        * Shared/NavigationActionData.h:
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/API/Cocoa/WKNavigationActionPrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):

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

        Unify and factor out page overlay implementations
        https://bugs.webkit.org/show_bug.cgi?id=131353

        Reviewed by Anders Carlsson.

        Bring all of the PageOverlay code together in a single cross-platform
        PageOverlayController, including hit-testing code from WebPage and painting
        and layer-tree manipulation code from the DrawingArea.

        This also makes all PageOverlays a single GraphicsLayer tree which can be
        flushed and plugged into any DrawingArea in a straightforward manner.
        We no longer have to watch for individual layers flipping into/out of tiling,
        because they're hidden underneath the root PageOverlay GraphicsLayer.
        Additionally, because GraphicsLayer is cross-platform, we can share
        all of the fairly trivial but oft-repeated overlay management code.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/PageOverlayController.cpp: Added.
        * WebProcess/WebPage/PageOverlayController.h: Added.
        (WebKit::PageOverlayController::rootLayer):
        Add PageOverlayController.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        Remove PageOverlay-related code from the DrawingAreas.

        * WebProcess/WebPage/PageOverlay.cpp:
        (WebKit::PageOverlay::setNeedsDisplay):
        (WebKit::PageOverlay::fadeAnimationTimerFired):
        (WebKit::PageOverlay::clear):
        * WebProcess/WebPage/PageOverlay.h:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        Use PageOverlayController instead of the DrawingArea/WebPage to manipulate page overlays.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::pageOverlayController):
        Remove PageOverlay-related code from WebPage.

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::outOfTreeLayerWasAdded): Deleted.
        (WebKit::RemoteLayerTreeContext::outOfTreeLayerWillBeRemoved): Deleted.
        (WebKit::RemoteLayerTreeContext::flushOutOfTreeLayers): Deleted.
        Remove the no-longer-necessary out-of-tree layer code.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageInstallPageOverlayWithAnimation):
        (WKBundlePageUninstallPageOverlayWithAnimation):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::highlight):
        (WebKit::WebInspectorClient::hideHighlight):
        * WebProcess/WebPage/FindController.cpp:
        (WebKit::FindController::updateFindUIAfterPageScroll):
        (WebKit::FindController::hideFindUI):
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded):
        (WebKit::TelephoneNumberOverlayController::destroyOverlay):
        Make use of the FadeMode enum.

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

        Change WebPageProxy::CreateNewPage to take a NavigationActionData object
        https://bugs.webkit.org/show_bug.cgi?id=131401

        Reviewed by Dan Bernstein.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (toWKNavigationType):
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::toWKNavigationType): Deleted.
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIClient::createNewPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):

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

        Fix build.

        * WebKit2Prefix.h:

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

        Use an explicit class when decoding individual bundle parameters
        https://bugs.webkit.org/show_bug.cgi?id=131392
        <rdar://problem/16213914>

        Reviewed by Dan Bernstein.

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

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

        Move a Mountain Lion declaration to the WebKit2 prefix header
        https://bugs.webkit.org/show_bug.cgi?id=131391

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/mac/WebContextMac.mm:
        * WebKit2Prefix.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:

2014-04-08  Antti Koivisto  <antti@apple.com>

        Remove exposedRect from TileController
        https://bugs.webkit.org/show_bug.cgi?id=131378

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::updateScrolledExposedRect):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updateScrolledExposedRect):
        
            Update the visible rect for pageOverlayLayers by calling flushCompositingState. This way
            tile controller visible rect updates always happens via compositing flush (we assert
            for this in TileController::setVisibleRect).

2014-04-08  Alexey Proskuryakov  <ap@apple.com>

        Rename Clipboard to DataTransfer
        https://bugs.webkit.org/show_bug.cgi?id=131371

        Reviewed by Anders Carlsson.

        * WebProcess/WebCoreSupport/WebDragClient.cpp:
        (WebKit::WebDragClient::willPerformDragSourceAction):
        (WebKit::WebDragClient::startDrag):
        * WebProcess/WebCoreSupport/WebDragClient.h:
        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::startDrag):

2014-04-08  Alexey Proskuryakov  <ap@apple.com>

        FlagsChanged events are not delivered to input methods when using async text input
        https://bugs.webkit.org/show_bug.cgi?id=131383

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm: (-[WKView _interpretKeyEvent:completionHandler:]):
        The early return is no longer needed.

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

        WebKit2 View Gestures (Swipe): Swipe-start hysteresis
        https://bugs.webkit.org/show_bug.cgi?id=127393
        <rdar://problem/15876822>

        Reviewed by Anders Carlsson.

        We shouldn't start a swipe immediately upon very small scrolls in the correct direction,
        because we don't want to get the user trapped in a swipe when they want to scroll.

        We'll accumulate the scroll deltas and wait until the user has scrolled at least 15px horizontally.
        In addition, we'll drop the swipe completely if any event has a vertical delta equal to half (or more)
        of the horizontal delta.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::ViewGestureController):
        (WebKit::ViewGestureController::deltaIsSufficientToBeginSwipe):
        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):

2014-04-07  Jer Noble  <jer.noble@apple.com>

        [Mac][WK2] Videos do not have access to session cookies
        https://bugs.webkit.org/show_bug.cgi?id=129687

        Reviewed by Eric Carlson.

        Update the CookieStorageShim to track changes in underlying networking stack.

        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2014-04-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a way to tell whether a WKWebProcessPlugInNodeHandle is a text-type HTML input element
        https://bugs.webkit.org/show_bug.cgi?id=131374

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        (-[WKWebProcessPlugInNodeHandle isTextField]): Added this getter. Calls
        InjectedBundleNodeHandle::isTextField.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::isTextField): Added. Uses
        WebCore::HTMLInputElement::isText, which is consistent with what
        WebChromeClient::focusedElementChanged uses to decide whether to call didFocusTextField.
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.h:

2014-04-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a _certificateChain property to WKWebProcessPlugInFrame
        https://bugs.webkit.org/show_bug.cgi?id=131370

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _certificateChain]): Added this getter, which uses the new
        WebFrame::certificateInfo.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::certificateInfo): Added this getter.
        * WebProcess/WebPage/WebFrame.h:

2014-04-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add a bundle form delegate method corresponding to textDidChangeInTextField
        https://bugs.webkit.org/show_bug.cgi?id=131369

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared
        new delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added an override
        of API::InjectedBundle::FormClient::textDidChangeInTextField which calls the new delegate
        method.

2014-04-08  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add WKFormDelegate
        https://bugs.webkit.org/show_bug.cgi?id=131343

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _formDelegate]): Added this accessor.
        (-[WKWebView _setFormDelegate:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h: Declared _formDelegate property.

        * UIProcess/API/Cocoa/_WKFormDelegate.h: Added.

        * UIProcess/API/Cocoa/_WKFormInputSession.h: Added.

        * UIProcess/ios/WKContentView.h: Moved _webView ivar into the @interface…
        * UIProcess/ios/WKContentView.mm: …from the @implementation.

        * UIProcess/ios/WKContentViewInteraction.h: Added _formInputSession ivar and
        formAccessoryView property.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKFormInputSession initWithContentView:userObject:]): Added.
        (-[WKFormInputSession dealloc]): Added.
        (-[WKFormInputSession userObject]): Added.
        (-[WKFormInputSession isValid]): Added.
        (-[WKFormInputSession accessoryViewCustomButtonTitle]): Added.
        (-[WKFormInputSession setAccessoryViewCustomButtonTitle:]): Added.
        (-[WKFormInputSession invalidate]): Added.
        (-[WKContentView cleanupInteraction]): Invalidate and release the input session.
        (-[WKContentView formAccessoryView]): Added this accessor.
        (-[WKContentView _startAssistingNode:userObject:]): Create an input session and message the
        form delegate.
        (-[WKContentView _stopAssistingNode]): Invalidate and release the input session.

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

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Added
        comment.

2014-04-08  Daniel Bates  <dabates@apple.com>

        Fallback to default storage session when there isn't a valid session ID
        https://bugs.webkit.org/show_bug.cgi?id=131326
        <rdar://problem/16231679>

        Reviewed by Alexey Proskuryakov.

        Fixes and issue where we may use the wrong storage session after disabling
        a private browsing session.

        Currently WebKit1 and WebKit2 without NetworkProcess assume that there
        is always a non-null private browsing storage session so long as the page
        has a non-default session ID. Instead we should only use the private browsing
        storage session when it's non-null and the page has a non-default session ID;
        otherwise, we should use the default storage session. This change will make
        the behavior in WebKit1 and WebKit2 without NetworkProcess consistent with
        the behavior in WebKit2 with NetworkProcess.

        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::storageSession):

2014-04-08  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        [SOUP] Control cookie management according ResourceRequest.allowCookies()
        https://bugs.webkit.org/show_bug.cgi?id=131026

        Reviewed by Sergio Villar Senin.

        Added setting of accept cookies policy for the current soup network session cookie jar and all tracked sessions.
        Moved the implementation of cookie policy setting from WebCookieManager to WebFrameNetworkingContext.

        * WebProcess/Cookies/soup/WebCookieManagerSoup.cpp:
        (WebKit::WebCookieManager::platformSetHTTPCookieAcceptPolicy): Moved implementation to WebCookieManager::platformSetHTTPCookieAcceptPolicy.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts): Moved implementation from WebCookieManager::platformSetHTTPCookieAcceptPolicy and set the cookie jar accept policy to the cookie jars of all sessions in addition to the default cookie jar.
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h: Added method prototype.

2014-04-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [WK2] Fix unused parameter compile warning
        https://bugs.webkit.org/show_bug.cgi?id=131260

        Reviewed by Darin Adler.

        Remove the arguments name without UNUSED_PARAM().

        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):
        * UIProcess/API/APIFindClient.h:
        (API::FindClient::didCountStringMatches):
        (API::FindClient::didFindString):
        * UIProcess/API/APIHistoryClient.h:
        (API::HistoryClient::didPerformClientRedirect):
        (API::HistoryClient::didPerformServerRedirect):
        (API::HistoryClient::didUpdateHistoryTitle):
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didStartProvisionalLoadForFrame):
        (API::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (API::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (API::LoaderClient::didCommitLoadForFrame):
        (API::LoaderClient::didFinishLoadForFrame):
        (API::LoaderClient::didFailLoadWithErrorForFrame):
        (API::LoaderClient::didChangeBackForwardList):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        (API::PolicyClient::unableToImplementPolicy):

2014-04-07  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow com.apple.ViewBridge preferences reading in plug-in sandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=131306
        <rdar://problem/16359865>

        Reviewed by Sam Weinig.

        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb: Do it.

2014-04-07  Stephanie Lewis  <slewis@apple.com>

        Crash in com.apple.WebKit.Plugin.Development at com.apple.WebKit2: WebKit::PluginControllerProxy::pluginInstanceID
        <rdar://problem/16479432>
        https://bugs.webkit.org/show_bug.cgi?id=131203

        Reviewed by Geoff Garen.

        pluginController was being removed before accessing the pluginInstanceID.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::removePluginControllerProxy):

2014-04-07  Dan Bernstein  <mitz@apple.com>

        More Mountain Lion build fix.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

2014-04-07  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Implement the update of content offset on animated resize
        https://bugs.webkit.org/show_bug.cgi?id=131329

        Reviewed by Tim Horton.

        Compute a reasonable target offset on rotation. This goes in 3 steps:
        1) Move the page so that the center does not move during scaling.
        2) Limit the range to keep the page in scrollview without rubberbanding.
        3) The horizontal content stays the same but the vertical area changes. When on the top or bottom
           edge, stick to the edge.

        The code is moved inside _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride: so that we can tell
        the WebProcess where the scroll position will be at the end of the animation.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _frameOrBoundsChangedFrom:]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]):

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Mountain Lion build fix.

        * UIProcess/ios/PageClientImplIOS.mm:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:

2014-04-07  Anders Carlsson  <andersca@apple.com>

        Handle decoding of nil invocation arguments
        https://bugs.webkit.org/show_bug.cgi?id=131335
        <rdar://problem/16528449>

        Reviewed by Tim Horton.

        * Shared/APIArray.h:
        Don't crash if the array element is null.

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Add bundle client function corresponding to startAssistingNode
        https://bugs.webkit.org/show_bug.cgi?id=131332

        Reviewed by Anders Carlsson.

        * UIProcess/PageClient.h: Added userData parameter to startAssistingNode.

        * UIProcess/WebPageProxy.h: Added message decoder parameter to startAssistingNode.
        * UIProcess/WebPageProxy.messages.in: Added message decoder parameter to StartAssistingNode.

        * UIProcess/ios/PageClientImplIOS.h: Updated startAssistingNode override.
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode): Decode the user data into an NSObject and pass
        it on to the content view.

        * UIProcess/ios/WKContentViewInteraction.h: Added userObject parameter to
        -_startAssitingNode:.
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _startAssistingNode:userObject:]): Added userObject parameter. We will pass
        it to a future delegate method.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode): Decode the user data and pass it to the client.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h: Declared new
        delegate method.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Added an implementation
        of API::InjectedBundle::FormClient::willBeginInputSession which calls the new delegate
        method, and encodes the user object into userData.

        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h:
        (API::InjectedBundle::FormClient::willBeginInputSession): Added willBeginInputSession.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::elementDidFocus): Call willBeginInputSession and send the user data along
        with the StartAssistingNode message to the UI process.

2014-04-07  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed. Fixing the EFL build.

        * WebProcess/WebPage/CoordinatedGraphics/WebPageCoordinatedGraphics.cpp: Include the Document header from WebCore
        to avoid operating on an incomplete type.

2014-04-07  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] WKPDFView fades in tiles, PDFs load very flashily
        https://bugs.webkit.org/show_bug.cgi?id=131325
        <rdar://problem/16382960>

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewDidScroll:]):
        Forward scroll events to the current custom content provider.

        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        Make content providers UIScrollViewDelegates (though we only forward didScroll for now).

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):
        (-[WKPDFView web_setMinimumSize:]):
        (-[WKPDFView web_setScrollView:]):
        (-[WKPDFView scrollViewDidScroll:]):
        (-[WKPDFView _revalidateViews]):
        (-[WKPDFView _computePageAndDocumentFrames]):
        (-[WKPDFView layoutViews]): Deleted.
        Keep track of each UIPDFPage, UIPDFPageView, and its frame (in unscaled/document coordinates).
        Compute all the rects up front (and re-compute upon rotation, loading, etc.).
        When scrolling, find all the pages that intersect the view (inflated by 1.5x in each
        vertical direction), and ensure that pages that are inside that rect have
        UIPDFPageViews installed, and ones that are outside that rect do not.
        Use setUseBackingLayer to ensure that we have a low-resolution layer behind the
        tiled layer to avoid flashiness.

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Add API::InjectedBundle::FormClient
        https://bugs.webkit.org/show_bug.cgi?id=131317

        Reviewed by Anders Carlsson.

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

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetFormClient):
        * WebProcess/InjectedBundle/API/c/WKBundlePageFormClient.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _setFormDelegate:]): Changed to define and
        create a FormClient (which derives from API::InjectedBundle::FormClient and messages a
        delegate), and set it as the form client.
        (didFocusTextField): Deleted.
        (willSubmitForm): Deleted.
        (setUpFormClient): Deleted.

        * WebProcess/InjectedBundle/APIInjectedBundleFormClient.h: Added.
        (API::InjectedBundle::FormClient::~FormClient):
        (API::InjectedBundle::FormClient::didFocusTextField):
        (API::InjectedBundle::FormClient::textFieldDidBeginEditing):
        (API::InjectedBundle::FormClient::textFieldDidEndEditing):
        (API::InjectedBundle::FormClient::textDidChangeInTextField):
        (API::InjectedBundle::FormClient::textDidChangeInTextArea):
        (API::InjectedBundle::FormClient::shouldPerformActionInTextField):
        (API::InjectedBundle::FormClient::willSubmitForm):
        (API::InjectedBundle::FormClient::willSendSubmitEvent):
        (API::InjectedBundle::FormClient::didAssociateFormControls):
        (API::InjectedBundle::FormClient::shouldNotifyOnFormChanges):

        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:
        (WebKit::InjectedBundlePageFormClient::InjectedBundlePageFormClient): Added a constructor
        from WKBundlePageFormClientBase.
        (WebKit::toWKInputFieldActionType): Added helper to convert from internal enum to C SPI
        enum.
        (WebKit::InjectedBundlePageFormClient::shouldPerformActionInTextField): Use helper.
        * WebProcess/InjectedBundle/InjectedBundlePageFormClient.h: Added inheritance from
        API::InjectedBundle::FormClient, marked overrides as such.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Removed unused forward
        declarations.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::toInputFieldAction): Added helper to convert from C SPI enum to internal enum.
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent): Use helper.
        (WebKit::WebEditorClient::textWillBeDeletedInTextField): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialize m_formClient member.
        (WebKit::WebPage::setInjectedBundleFormClient): Added. Updates m_formClient. 
        (WebKit::WebPage::close): Updated code to clear m_formClient.
        (WebKit::WebPage::initializeInjectedBundleFormClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleFormClient): Updated return type.

2014-04-07  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for opengl, texmap, transforms and efl in WebCore/platform/graphics.
        https://bugs.webkit.org/show_bug.cgi?id=131276

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for TextureMapper in LayerTreeHostGtk with std::unique_ptr.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.h:

2014-04-07  Joseph Pecoraro  <pecoraro@apple.com>

        Make Mac only parts of TelephoneNumberOverlayController PLATFORM(MAC).

        Unreviewed build fix for r166881.

        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu): Deleted.
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::drawRect):
        (WebKit::TelephoneNumberOverlayController::mouseEvent):
        * WebProcess/WebPage/TelephoneNumberOverlayController.h:
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:

2014-04-07  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Fixing the GTK build.

        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Include the Document header from WebCore
        to avoid operating on an incomplete type.
        * WebProcess/WebPage/TapHighlightController.cpp: Include the RenderElement instead of RenderObject
        to make the RenderObject::style() inline accessible.
        * WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp: Include the Document header from WebCore

2014-04-07  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Make back-buffers purgeable when possible
        https://bugs.webkit.org/show_bug.cgi?id=131213
        <rdar://problem/15373906>

        Reviewed by Simon Fraser.

        We should make back-buffers volatile when their owning
        layer falls out of use (either stops being repainted or
        is unparented), as they are inherently recreatable.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::volatility):
        (WebKit::RemoteLayerBackingStore::lastDisplayTime):
        Add storage and a getter for the backing store's last paint time.
        Add setter/getter for volatility of backing store.
        Add RemoteLayerTreeContext param to constructor.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::~RemoteLayerBackingStore):
        Inform the RemoteLayerTreeContext when backing store
        is created and destroyed. Since we only have a Context in
        the Web process, this will only happen there.

        (WebKit::RemoteLayerBackingStore::encode):
        (WebKit::RemoteLayerBackingStore::decode):
        Move some assertions out of #else blocks which are preceded by returns.

        (WebKit::RemoteLayerBackingStore::display):
        Update the last display time.
        If the backing store was volatile, make it non-volatile.

        (WebKit::RemoteLayerBackingStore::setVolatility):
        Mark the relevant surfaces as volatile or not.
        setVolatility:
            - fails and returns false if any surfaces weren't marked
              volatile because they were in use
            - marks the whole backing store for repaint if the front
              surface was purged

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        Make it possible to remove the RemoteLayerBackingStore on layers
        that went from drawing contents to not drawing contents.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Adopt the new names from WebCore.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        Clear the backing store if the layer doesn't want to draw contents anymore.

        (WebKit::PlatformCALayerRemote::ensureBackingStore):

        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        (WebKit::RemoteLayerTreeContext::backingStoreCollection):
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::RemoteLayerTreeContext):
        (WebKit::RemoteLayerTreeContext::backingStoreWasCreated):
        (WebKit::RemoteLayerTreeContext::backingStoreWillBeDestroyed):
        Keep a RemoteLayerBackingStoreCollection, which just keeps track
        of all backing store (even unparented) created for layers in a
        particular context. Forward backing store creation/deletion to it.
        Remove a unused m_rootLayer member.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        If any layers had backing store changes, start the timer
        on the RemoteLayerBackingStoreCollection that will mark them
        purgeable once they are no longer needed.

        * Shared/mac/RemoteLayerBackingStoreCollection.mm:
        * Shared/mac/RemoteLayerBackingStoreCollection.h:
        Keep track of all backing store for our context.
        When the timer fires, run through the backing store, finding
        backing store that was last painted more than 1 second ago,
        and mark them purgeable. If there was more recently-painted
        backing store, let the timer fire again in another second;
        otherwise, stop it.

2014-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix after r166879.

        * WebProcess/WebPage/mac/WebPageMac.mm:

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Mac build.

        * WebProcess/Plugins/PDF/PDFPlugin.mm:

2014-04-07  Brady Eidson  <beidson@apple.com>

        Handle clicks on DataDetectors UI for scanned phone numbers
        <rdar://problem/16379588> and https://bugs.webkit.org/show_bug.cgi?id=131309

        Reviewed by Tim Horton.

        WebContextMenuItemDatas never need to know about a ContextMenu, so remove that concept.
        Also add the concept of a selection handler for UIProcess-native menu items.
        * Shared/WebContextMenuItemData.cpp:
        (WebKit::WebContextMenuItemData::WebContextMenuItemData): 
        (WebKit::WebContextMenuItemData::encode):
        (WebKit::kitItems):
        (WebKit::WebContextMenuItemData::decode):
        * Shared/WebContextMenuItemData.h:
        (WebKit::WebContextMenuItemData::selectionHandler):

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu): Make the decoder argument optional. Make consulting the client optional.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::showTelephoneNumberMenu):

        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSelectionHandlerWrapper initWithSelectionHandler:std::]):
        (-[WKSelectionHandlerWrapper executeSelectionHandler]):
        (-[WKMenuTarget forwardContextMenuAction:]):
        (WebKit::nsMenuItemVector):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected): If the represented object is a WKSelectionHandlerWrapper,
          execute the selection handler. Do nothing else.

        Instead of getting rects from ranges, creating highlights, and storing those highlights,
        work in terms of a TelephoneNumberData object that wraps both a range and a highlight.
        This makes it easier to track where the mouse is down and to know what phone number we should act on when clicked.
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp:
        (WebKit::TelephoneNumberOverlayController::rectsForDrawing): Deleted.
        * WebProcess/WebPage/TelephoneNumberOverlayController.h:
        (WebKit::TelephoneNumberData::create):
        (WebKit::TelephoneNumberData::range):
        (WebKit::TelephoneNumberData::highlight):
        (WebKit::TelephoneNumberData::TelephoneNumberData):
        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm:
        (WebKit::TelephoneNumberOverlayController::drawRect):
        (WebKit::TelephoneNumberOverlayController::handleTelephoneClick): Pass the phone number text and the point to WebPage.
        (WebKit::TelephoneNumberOverlayController::mouseEvent):
        (WebKit::TelephoneNumberOverlayController::clearMouseDownInformation):
        (WebKit::TelephoneNumberOverlayController::clearHighlights):

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

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::handleTelephoneNumberClick): Message the phone number and coordinate to the UIProcess.

2014-04-07  Dan Bernstein  <mitz@apple.com>

        Introduce API::InjectedBundle::PageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=131310

        Reviewed by Anders Carlsson.

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

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp: Added #include that
        became necessary.

        * WebProcess/InjectedBundle/API/APIInjectedBundlePageUIClient.h: Added.
        (API::InjectedBundle::PageUIClient::~PageUIClient):
        (API::InjectedBundle::PageUIClient::willAddMessageToConsole):
        (API::InjectedBundle::PageUIClient::willSetStatusbarText):
        (API::InjectedBundle::PageUIClient::willRunJavaScriptAlert):
        (API::InjectedBundle::PageUIClient::willRunJavaScriptConfirm):
        (API::InjectedBundle::PageUIClient::willRunJavaScriptPrompt):
        (API::InjectedBundle::PageUIClient::mouseDidMoveOverElement):
        (API::InjectedBundle::PageUIClient::pageDidScroll):
        (API::InjectedBundle::PageUIClient::shouldGenerateFileForUpload):
        (API::InjectedBundle::PageUIClient::generateFileForUpload):
        (API::InjectedBundle::PageUIClient::statusBarIsVisible):
        (API::InjectedBundle::PageUIClient::menuBarIsVisible):
        (API::InjectedBundle::PageUIClient::toolbarsAreVisible):
        (API::InjectedBundle::PageUIClient::didReachApplicationCacheOriginQuota):
        (API::InjectedBundle::PageUIClient::didExceedDatabaseQuota):
        (API::InjectedBundle::PageUIClient::plugInStartLabelTitle):
        (API::InjectedBundle::PageUIClient::plugInStartLabelSubtitle):
        (API::InjectedBundle::PageUIClient::plugInExtraStyleSheet):
        (API::InjectedBundle::PageUIClient::plugInExtraScript):

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKBundlePageSetUIClient): Changed to create an InjectedBundlePageUIClient and set it on
        the WebPage.

        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp:
        (WebKit::InjectedBundlePageUIClient::InjectedBundlePageUIClient): Added constructor from
        WKBundlePageUIClient.
        (WebKit::toUIElementVisibility): Added helper to convert from C SPI enum to internal enum.
        (WebKit::InjectedBundlePageUIClient::statusBarIsVisible): Changed to use the above.
        (WebKit::InjectedBundlePageUIClient::menuBarIsVisible): Ditto.
        (WebKit::InjectedBundlePageUIClient::toolbarsAreVisible): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageUIClient.h: Added inheritance from
        API::InjectedBundle::PageUIClient, marked overrides as such.

        * WebProcess/Storage/StorageAreaMap.cpp: Added #include that became necessary.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::toolbarsVisible): Updated to use new internal enum.
        (WebKit::WebChromeClient::statusbarVisible): Ditto.
        (WebKit::WebChromeClient::menubarVisible): Ditto.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage): Initialized m_uiClient member.
        (WebKit::WebPage::setInjectedBundleUIClient): Added. Updates m_uiClient.
        (WebKit::WebPage::close): Updated for change in m_uiClient.
        (WebKit::WebPage::pageDidScroll): Ditto.
        (WebKit::WebPage::initializeInjectedBundleUIClient): Deleted.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::injectedBundleUIClient): Updated return type.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: Added #include that became
        necessary.

2014-04-06  Dan Bernstein  <mitz@apple.com>

        Clean up WKGestureTypes.h
        https://bugs.webkit.org/show_bug.cgi?id=131286

        Reviewed by Sam Weinig.

        Renamed WKGestureTypes.h to GestureTypes.h, dropped the useless “WK” prefixes and changed
        into scoped enums, with the exception of SelectionFlags.

        * Shared/ios/GestureTypes.h: Copied from Source/WebKit2/Shared/ios/WKGestureTypes.h.
        * Shared/ios/WKGestureTypes.h: Removed.
        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (copyElement):
        (saveImage):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didUpdateBlockSelectionWithTouch):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _performAction:]):
        (toGestureType):
        (toUIWKGestureType):
        (toSelectionTouch):
        (toUIWKSelectionTouch):
        (toGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toSelectionHandlePosition):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView _didUpdateBlockSelectionWithTouch:withFlags:growThreshold:shrinkThreshold:]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::distanceBetweenRectsForPosition):
        (WebKit::computeEdgeCenter):
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle):
        (WebKit::shouldExpand):
        (WebKit::WebPage::changeBlockSelection):
        (WebKit::WebPage::updateBlockSelectionWithTouch):
        (WebKit::WebPage::updateSelectionWithTouches):
        (WebKit::WebPage::performActionOnElement):

2014-04-06  Sam Weinig  <sam@webkit.org>

        Document user content related APIs..

        Reviewed by Anders Carlsson.

        - Also demote WKScriptWorld to SPI.

        * UIProcess/API/Cocoa/WKScriptMessage.h:
        * UIProcess/API/Cocoa/WKScriptMessage.mm:
        (-[WKScriptMessage _scriptWorld]):
        (-[WKScriptMessage scriptWorld]): Deleted.
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h:
        * UIProcess/API/Cocoa/WKScriptMessagePrivate.h: Added.
        * UIProcess/API/Cocoa/WKScriptWorld.h: Removed.
        * UIProcess/API/Cocoa/WKScriptWorld.mm: Removed.
        * UIProcess/API/Cocoa/WKUserContentController.h:
        * UIProcess/API/Cocoa/WKUserContentController.mm:
        (-[WKUserContentController addScriptMessageHandler:name:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:]):
        (-[WKUserContentController _addScriptMessageHandler:name:world:]):
        (-[WKUserContentController _removeScriptMessageHandlerForName:world:]):
        (-[WKUserContentController addScriptMessageHandler:name:world:]): Deleted.
        (-[WKUserContentController removeScriptMessageHandlerForName:world:]): Deleted.
        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h: Added.
        * UIProcess/API/Cocoa/_WKScriptWorld.h: Copied from WebKit2/UIProcess/API/Cocoa/WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Copied from WebKit2/UIProcess/API/Cocoa/WKScriptWorld.mm.
        (+[_WKScriptWorld defaultWorld]):
        (+[WKScriptWorld defaultWorld]): Deleted.
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-04  Brian J. Burg  <burg@cs.washington.edu>

        Enable WEB_REPLAY for PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=130700

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:

2014-04-05  Miyoung Shin  <myid.m.shin@gmail.com>

        [WK2] Fix unused parameter compile warning.
        https://bugs.webkit.org/show_bug.cgi?id=131260

        Reviewed by Gyuyoung Kim.

        fix unused parameter warning in the WebKit2 build.

        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):

2014-04-05  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (NetworkProcess): Subresources fail to load from AppCache
        https://bugs.webkit.org/show_bug.cgi?id=131262
        <rdar://problem/15370653>

        Reviewed by Sam Weinig.

        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad): Check application cache,
        as done in ResourceLoader::start() for in-process loads.

2014-04-05  Alexey Proskuryakov  <ap@apple.com>

        Frequent PluginProcess crashes at libsqlite3.dylib: openDatabase
        https://bugs.webkit.org/show_bug.cgi?id=131264
        <rdar://problem/14165329>

        Reviewed by Sam Weinig.

        Don't create NSURLCache until after having called setenv.

        * PluginProcess/PluginProcess.h: Added m_nsurlCacheDirectory.

        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializePluginProcess): Compute NSURL cache path
        on our own. This does not match CFNetwork's result in most cases, but should work
        equally well.
        (WebKit::PluginProcess::initializeSandbox): Create a cache with our path and best
        guess for capacity.

2014-04-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed. iOS Build fix after r166818.

        These member variables / declarations are accessed by iOS
        in shared code in TelephoneNumberOverlayControllerMac.

        * WebProcess/WebPage/TelephoneNumberOverlayController.h:

2014-04-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed. Rollout r166812, breaks 32-bit Mavericks build.

        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        (-[WKNSURLSessionLocal _copyCookiesForRequestUsingAllAppropriateStorageSemantics:]):

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

        Show DataDetector UI on scanned phone numbers.
        <rdar://problem/16379588> and https://bugs.webkit.org/show_bug.cgi?id=131247

        Reviewed by Tim Horton.

        Add a new PageOverlay for telephone number UI, handle drawing the UI, and
        handle mouse clicks on the button in that UI.

        Even though clicks are detected, they aren’t acted upon yet.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::selectedTelephoneNumberRangesChanged): Pass ranges to
          the TelephoneNumberController.
        * WebProcess/WebCoreSupport/WebEditorClient.h:

        This controller handles installing/removing the PageOverlay, drawing the UI elements,
        and handling mouse events while any of the UI elements are shown.
        There’s also a clumsy attempt to keep platform-specific parts separated out.
        * WebProcess/WebPage/TelephoneNumberOverlayController.cpp: Added.
        (WebKit::TelephoneNumberOverlayController::TelephoneNumberOverlayController):
        (WebKit::TelephoneNumberOverlayController::createOverlayIfNeeded):
        (WebKit::TelephoneNumberOverlayController::destroyOverlay):
        (WebKit::TelephoneNumberOverlayController::pageOverlayDestroyed):
        (WebKit::TelephoneNumberOverlayController::willMoveToWebPage):
        (WebKit::TelephoneNumberOverlayController::didMoveToWebPage):
        (WebKit::TelephoneNumberOverlayController::rectsForDrawing):
        (WebKit::TelephoneNumberOverlayController::selectedTelephoneNumberRangesChanged):

        * WebProcess/WebPage/TelephoneNumberOverlayController.h: Added.
        (WebKit::TelephoneNumberOverlayController::create):

        * WebProcess/WebPage/mac/TelephoneNumberOverlayControllerMac.mm: Added.
        (WebKit::TelephoneNumberOverlayController::drawRect):
        (WebKit::TelephoneNumberOverlayController::handleTelephoneClick):
        (WebKit::TelephoneNumberOverlayController::mouseEvent):
        (WebKit::TelephoneNumberOverlayController::clearMouseDownInformation):
        (WebKit::TelephoneNumberOverlayController::clearHighlights):

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

        * WebKit2.xcodeproj/project.pbxproj:

2014-04-04  Martin Hock  <mhock@apple.com>

        Include Session ID in WebPageCreationParameters.
        https://bugs.webkit.org/show_bug.cgi?id=131239

        <rdar://problem/16175483>

        Reviewed by Sam Weinig.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::creationParameters):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

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

        [Mac][WK2] Videos do not have access to session cookies
        https://bugs.webkit.org/show_bug.cgi?id=129687

        Reviewed by Eric Carlson.

        Update the CookieStorageShim to track changes in underlying networking stack.

        * Shared/mac/CookieStorageShim.mm:
        (WebKit::CookieStorageShim::initialize):
        (-[WKNSURLSessionLocal _getCookieHeadersForTask:completionHandler:]):

2014-04-04  Alexey Proskuryakov  <ap@apple.com>

        Improve error checking in WebPageProxy::didReceiveEvent
        https://bugs.webkit.org/show_bug.cgi?id=131243
        <rdar://problem/16529207>

        Reviewed by Anders Carlsson.

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

2014-04-04  Anders Carlsson  <andersca@apple.com>

        More documentation
        https://bugs.webkit.org/show_bug.cgi?id=131238

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

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

        [GTK][CMake] Use a stricter check for the HAVE_GTK_UNIX_PRINTING define
        https://bugs.webkit.org/show_bug.cgi?id=131226

        Reviewed by Carlos Garcia Campos.

        #cmakedefine01 will define HAVE_GTK_UNIX_PRINTING to 0 instead of #undef'ining it. This
        means that simple checks like #ifdef HAVE_GTK_UNIX_PRINTING will always be true -- we
        actually need to check if the value is set to 1, which is precisely what the HAVE() macro
        does, so start using it.

        * UIProcess/API/gtk/WebKitPrintOperation.cpp:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::print):
        * WebProcess/WebPage/gtk/PrinterListGtk.cpp:
        * WebProcess/WebPage/gtk/PrinterListGtk.h:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::create):

2014-04-03  Chris Fleizach  <cfleizach@apple.com>

        AX: iOS does not need to spin the run loop on synchronous message calls
        https://bugs.webkit.org/show_bug.cgi?id=131195

        Reviewed by Dan Bernstein.

        On the Mac platform, we need to spin the run loop while making synchronous calls to avoid VoiceOver hanging.
        On iOS, this not needed due to architectural differences.

        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::synchronousMessagesShouldSpinRunLoop):
        * WebProcess/WebPage/WebPage.h:

2014-04-03 Andy Estes <aestes@apple.com>

        [Cocoa] Add additional WKWebView SPI for clients that interact with PDFs
        https://bugs.webkit.org/show_bug.cgi?id=131206

        Reviewed by Dan Bernstein.

        Add _dataForDisplayedPDF and _suggestedFilenameForDisplayedPDF to
        support clients that wish to save a copy of the currently displayed PDF
        to disk. Ultimately we should support this use case by exposing something
        like WKWebViewContentProvider, but for now let's do something simple.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:data:]):
        (-[WKWebView _dataForDisplayedPDF]):
        (-[WKWebView _suggestedFilenameForDisplayedPDF]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/WKWebViewContentProvider.h:
        * UIProcess/ios/WKPDFView.h:
        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView documentData]):
        (-[WKPDFView suggestedFilename]):
        (-[WKPDFView web_setContentProviderData:suggestedFilename:]):

2014-04-03  Eunmi Lee  <eunmi15.lee@samsung.com>

        [EFL][WK2] Add API to get contents size of current web page.
        https://bugs.webkit.org/show_bug.cgi?id=131148

        Reviewed by Gyuyoung Kim.

        Application can want to get contents size of current web page without
        monitoring "contents,size,changed" signal, so I add API to get contents
        size directly.

        * UIProcess/API/C/CoordinatedGraphics/WKView.cpp:
        (WKViewGetContentsSize): WK API to get contents size from WebView.
        * UIProcess/API/C/CoordinatedGraphics/WKView.h:
        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_contents_size_get): new API to get contents size.
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2014-04-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2][EFL] Use template method in creating NativeWebMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=131152

        Reviewed by Anders Carlsson.

        There are three EFL mouse events, such as Evas_Event_Mouse_Down, Evas_Event_Mouse_Up,
        and Evas_Event_Mouse_Move. They can be defined as a template method.

        * PlatformEfl.cmake: Remove NativeWebMouseEventEfl.cpp
        * Shared/NativeWebMouseEvent.h:
        (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): Add a template method.
        * Shared/efl/NativeWebMouseEventEfl.cpp: Removed.

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

        Add WKWebView documentation
        https://bugs.webkit.org/show_bug.cgi?id=131190

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKWebView.h:

2014-04-03  Michael Saboff  <msaboff@apple.com>

        REGRESSION: PCE.js is 20x slower in WebKit2 because timers are throttled
        https://bugs.webkit.org/show_bug.cgi?id=131189

        Reviewed by Geoffrey Garen.

        Elevate the priority of all WebKit2 service processes on iOS, not just the network process.

        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):

2014-04-03  Simon Fraser  <simon.fraser@apple.com>

        ASSERT(m_children.isEmpty()) in PlatformCALayerRemote::removeAllSublayers() on time.com
        https://bugs.webkit.org/show_bug.cgi?id=131187

        Reviewed by Maciej Stachowiak.
        
        After a call to PlatformCALayerRemote::adoptSublayers() when a layer
        toggles between tiled and non-tiled, we'd assert in PlatformCALayerRemote::removeAllSublayers()
        that not all sublayers had been removed (there was one with a null superlayer).
        
        Fix by ensuring that we don't copy over custom subviews when adoptSublayers()
        is called; they'll get added as we update children anyway.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::adoptSublayers):

2014-04-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add SPI to handle animated resize
        https://bugs.webkit.org/show_bug.cgi?id=131141

        Reviewed by Simon Fraser.

        Set up a basic API to handle animated resize. The code does not do much at the moment,
        it is mostly to have an interface we can implement later.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView setFrame:]):
        (-[WKWebView setBounds:]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _frameOrBoundsChangedFrom:]):
        (-[WKWebView _beginAnimatedResizeToSize:obscuredInsets:minimumLayoutSizeOverride:]):
        (-[WKWebView _endAnimatedResize]):
        (-[WKWebView _frameOrBoundsChanged]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-04-03  Simon Fraser  <simon.fraser@apple.com>

        Pixelated WebView when display is changed from hiDPI to regularDPI
        https://bugs.webkit.org/show_bug.cgi?id=131185
        <rdar://problem/16512184&16503714>

        Reviewed by Tim Horton.
        
        TileController function was renamed.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::setContentsScale):

2014-04-03  Sam Weinig  <sam@webkit.org>

        [WebKit2] Promote user script SPI to API
        https://bugs.webkit.org/show_bug.cgi?id=131181

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKScriptMessage.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptMessage.h.
        * UIProcess/API/Cocoa/WKScriptMessage.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptMessage.mm.
        (-[WKScriptMessage scriptWorld]):
        (-[_WKScriptMessage scriptWorld]): Deleted.
        * UIProcess/API/Cocoa/WKScriptMessageHandler.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptMessageHandler.h.
        * UIProcess/API/Cocoa/WKScriptWorld.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/WKScriptWorld.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.mm.
        (+[WKScriptWorld defaultWorld]):
        (+[_WKScriptWorld defaultWorld]): Deleted.
        * UIProcess/API/Cocoa/WKUserContentController.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentController.h.
        * UIProcess/API/Cocoa/WKUserContentController.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentController.mm.
        (-[WKUserContentController addScriptMessageHandler:name:world:]):
        (-[WKUserContentController removeScriptMessageHandlerForName:world:]):
        (-[_WKUserContentController addScriptMessageHandler:name:world:]): Deleted.
        (-[_WKUserContentController removeScriptMessageHandlerForName:world:]): Deleted.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration userContentController]):
        (-[WKWebViewConfiguration setUserContentController:]):
        (-[WKWebViewConfiguration _userContentController]): Deleted.
        (-[WKWebViewConfiguration _setUserContentController:]): Deleted.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKScriptMessage.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptMessage.mm: Removed.
        * UIProcess/API/Cocoa/_WKScriptMessageHandler.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptWorld.h: Removed.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Removed.
        * UIProcess/API/Cocoa/_WKUserContentController.h: Removed.
        * UIProcess/API/Cocoa/_WKUserContentController.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

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

        Make download policy decisions SPI for now
        https://bugs.webkit.org/show_bug.cgi?id=131179

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
        (NS_ENUM):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-04-02  Simon Fraser  <simon.fraser@apple.com>

        Harden FilterOperation type casting
        https://bugs.webkit.org/show_bug.cgi?id=131142

        Reviewed by Sam Weinig.

        DefaultFilterOperation had an error-prone behavior where it set the base class
        OperationType to the type of some other filter class, but overrode isDefault(). 
        This made it very easy to write incorrect code that casted incorrectly based on type().
        
        Fix by making adding a DEFAULT filter operation type, and storing the represented
        type on DefaultFilterOperation().
        
        Also remove the OperationType argument for constructors of FilterOperations that
        can only be of one type, to avoid possible mistakes.
        
        Make the type cast macros a bit more normal, and use them in a few places.
        
        Fixed PlatformCAFiltersMac to handle the default filter case more cleanly.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeFilterOperation):
        (IPC::decodeFilterOperation):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):

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

        REGRESSION (Async text input): Controls become unresponsive to mouse events
        https://bugs.webkit.org/show_bug.cgi?id=131176
        <rdar://problem/16507932>

        Reviewed by Tim Horton.

        * UIProcess/API/mac/WKView.mm: (NATIVE_MOUSE_EVENT_HANDLER):
        Don't confuse event handling machinery by sending events to WebProcess twice.

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

        WKWebView should always have a UIDelegate, even when closed
        https://bugs.webkit.org/show_bug.cgi?id=131174
        <rdar://problem/16389248>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView UIDelegate]):
        (-[WKWebView setUIDelegate:]):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIDelegate::UIDelegate):
        (WebKit::UIDelegate::~UIDelegate):
        (WebKit::UIDelegate::createUIClient):
        (WebKit::UIDelegate::delegate):
        (WebKit::UIDelegate::setDelegate):
        (WebKit::UIDelegate::UIClient::UIClient):
        (WebKit::UIDelegate::UIClient::~UIClient):
        (WebKit::UIDelegate::UIClient::createNewPage):
        (WebKit::UIDelegate::UIClient::runJavaScriptAlert):
        (WebKit::UIDelegate::UIClient::runJavaScriptConfirm):
        (WebKit::UIDelegate::UIClient::runJavaScriptPrompt):
        (WebKit::UIDelegate::UIClient::actionsForElement):
        (WebKit::UIClient::UIClient): Deleted.
        (WebKit::UIClient::~UIClient): Deleted.
        (WebKit::UIClient::delegate): Deleted.
        (WebKit::UIClient::setDelegate): Deleted.
        (WebKit::UIClient::createNewPage): Deleted.
        (WebKit::UIClient::runJavaScriptAlert): Deleted.
        (WebKit::UIClient::runJavaScriptConfirm): Deleted.
        (WebKit::UIClient::runJavaScriptPrompt): Deleted.
        (WebKit::UIClient::actionsForElement): Deleted.
        * UIProcess/ios/WKActionSheetAssistant.mm:

2014-04-02  Anders Carlsson  <andersca@apple.com>

        Document WKNavigationAction and WKNavigationResponse
        https://bugs.webkit.org/show_bug.cgi?id=131138

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKFrameInfo.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h:

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

        Make actionsForElement a proper API::UIClient member function
        https://bugs.webkit.org/show_bug.cgi?id=131171

        Reviewed by Sam Weinig.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::actionsForElement):
        * UIProcess/Cocoa/UIDelegate.h:
        * UIProcess/Cocoa/UIDelegate.mm:
        (WebKit::UIClient::actionsForElement):
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):

2014-04-03  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        [WK2] Fix !ENABLE(BLOB) build
        https://bugs.webkit.org/show_bug.cgi?id=131164

        Reviewed by Alexey Proskuryakov.

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

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

        Fix iOS build.

        * UIProcess/ios/WKActionSheetAssistant.mm:

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

        Rename UIClient.{h, mm} to UIDelegate.{h, mm}.

        Rubber-stamped by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/Cocoa/UIDelegate.h: Renamed from Source/WebKit2/UIProcess/Cocoa/UIClient.h.
        * UIProcess/Cocoa/UIDelegate.mm: Renamed from Source/WebKit2/UIProcess/Cocoa/UIClient.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-03  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL][WK2] Replacing zoom functionality of MiniBrowser from scale_set to page_zoom_set.
        https://bugs.webkit.org/show_bug.cgi?id=130391

        Reviewed by Gyuyoung Kim.

        Change the implementation of the zoom functionality from ewk_view_scale_set
        to ewk_view_page_zoom_set. Adding to the API functions: ewk_view_page_zoom_set and
        ewk_view_page_zoom_get to call appropriate WK functions.

        * UIProcess/API/efl/ewk_view.cpp:
        (ewk_view_page_zoom_set):
        (ewk_view_page_zoom_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp:
        (TEST_F):

2014-04-02  Alexey Proskuryakov  <ap@apple.com>

        Sandbox violation in NetworkProcess when uploading a bundle
        https://bugs.webkit.org/show_bug.cgi?id=131133

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::cleanup):
        (WebKit::NetworkResourceLoader::didReceiveResponseAsync):
        Don't delete the files. It can't work.

2014-04-02  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2][EFL] Remove unnecessary reinterpret_cast<> in unit testcase
        https://bugs.webkit.org/show_bug.cgi?id=131143

        Reviewed by Gyuyoung Kim.

        Ecore_Timer callback requires *Eina_Bool* return type instead of *bool*.
        Also, WebKit/EFL port coding style recommends to use *Eina_Bool* in the
        callback function for EFL event handler. Additionally, replaced 0 to nullptr.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::CallbackDataTimer::CallbackDataTimer):
        (EWK2UnitTest::CallbackDataTimer::setDone):
        (EWK2UnitTest::CallbackDataTimer::timeOutCallback):
        (EWK2UnitTest::CallbackDataTimer::setTimedOut):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::timerCallback):
        (TEST_F):

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Remove a FIXME that happened.

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

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Fix the !USE(IOSURFACE) build... again.

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

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

        <https://webkit.org/b/131135> Introduce LockHistory and LockBackForwardList enums to use in place of bools.

        These arguments are often passed using literals at the call site, where the use of bools severely hinders
        the readability of the code.

        Reviewed by Andreas Kling.

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

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        Pool IOSurfaces to help with allocation cost
        https://bugs.webkit.org/show_bug.cgi?id=131096
        <rdar://problem/15373942>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::~RemoteLayerBackingStore):
        (WebKit::RemoteLayerBackingStore::clearBackingStore):
        (WebKit::RemoteLayerBackingStore::display):
        When RemoteLayerBackingStore discards a layer, throw it into the pool.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        Disable the pool in the UI process.

2014-04-02  Alice Barraclough  <alice.barraclough@apple.com>

        Fix a typo causing TestWebKitAPI to timeout when testing Find.

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient): Test for !functionPointer like
        all the other implementations do.

2014-04-02  Dean Jackson  <dino@apple.com>

        [iOS] Expose geolocation provider on the process pool
        https://bugs.webkit.org/show_bug.cgi?id=131125

        Reviewed by Dan Bernstein.

        Followup comments from Dan Bernstein. Use a class
        extension rather than a new category.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _geolocationProvider]):
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h:

2014-04-02  Tim Horton  <timothy_horton@apple.com>

        RemoteLayerBackingStore doesn't need to clear opaque layers
        https://bugs.webkit.org/show_bug.cgi?id=131134

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        We don't need to clear opaque layers, because we'll paint
        over the whole area. In addition, we should fill opaque layers
        with a bright color in debug builds to make it very clear
        that we've made a mistake (similar to what FrameView does).

2014-04-02  Anders Carlsson  <andersca@apple.com>

        Document WKBackForwardList, WKBackForwardListItem and WKWebViewConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=131131

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:

2014-04-02  Anders Carlsson  <andersca@apple.com>

        Document WKUIDelegate and WKWindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=131124

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.h:

2014-04-02  Dean Jackson  <dino@apple.com>

        [iOS] Expose geolocation provider on the process pool
        https://bugs.webkit.org/show_bug.cgi?id=131125

        Patch by Sam Weinig.
        Reviewed by Dean Jackson.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _geolocationProvider]): Create and initialize WKGeolocationProviderIOS if necessary.
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h: Expose _geolocationProvider.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]): Call into WKProcessPool.

2014-04-02  Martin Hock  <mhock@apple.com>

        Unify private browsing with sessions.
        https://bugs.webkit.org/show_bug.cgi?id=130099

        Reviewed by Alexey Proskuryakov.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: Change WebPage::isUsingEphemeralSession() to WebPage::usesEphemeralSession().
        (WKBundlePageIsUsingEphemeralSession):
        * WebProcess/InjectedBundle/InjectedBundle.cpp: Change Settings::setPrivateBrowsingEnabled() to Page::enableLegacyPrivateBrowsing().
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Plugins/PluginView.cpp: Change Settings::privateBrowsingEnabled() to Page::usesEphemeralSession().
        (WebKit::PluginView::isPrivateBrowsingEnabled):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp: Ditto.
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::usesEphemeralSession): Renamed from isUsingEphemeralSession.
        (WebKit::WebPage::setSessionID): Ensure session before setting.
        (WebKit::WebPage::updatePreferences): Set session to legacy private session if needed.
        (WebKit::WebPage::sessionID): Moved to header.
        (WebKit::WebPage::isUsingEphemeralSession): Renamed to usesEphemeralSession.
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::sessionID): Just call down to m_page.

2014-04-02  Alice Barraclough  <alice.liu@apple.com>

        Adding Objective-C SPI for Find in Page.
        https://bugs.webkit.org/show_bug.cgi?id=131000 Need an Objective-C API or SPI for Find in Page

        Reviewed by Dan Bernstein.

        Find-on-page SPI added to WKWebView, which funnels the messages through the WebPageProxy.
        Returning messages are designated by _WKFindDelegate protocol.
        Also provide FindDelegate access on WKWebView.
        WebPageProxy gets a new-style API::FindClient.
        Also had to replicate WKFindOptions as _WKFindOptions in Cocoa SPI. This is unfortunate, but it 
        does follow the pattern of other options & enums related to classes that are SPI-for-now.
        
        PageClientImplIOS handles setFindIndicator function by forwarding to its WKContentView, 
        but WKContentView _setFindIndicator remains unimplemented for now.
        
        * UIProcess/API/APIFindClient.h: Added.
        (API::FindClient::~FindClient):
        (API::FindClient::didCountStringMatches):
        (API::FindClient::didFindString):
        (API::FindClient::didFailToFindString):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageFindClient):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView _findDelegate]):
        (-[WKWebView _setFindDelegate:]):
        (toFindOptions):
        (-[WKWebView _countStringMatches:options:maxCount:]):
        (-[WKWebView _findString:options:maxCount:]):
        (-[WKWebView _hideFindUI]):
        (-[WKWebView _hostForFindUI]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_OPTIONS):
        * UIProcess/API/Cocoa/_WKFindDelegate.h: Added.
        * UIProcess/Cocoa/FindClient.h: Added.
        * UIProcess/Cocoa/FindClient.mm: Added.
        (WebKit::FindClient::FindClient):
        (WebKit::FindClient::delegate):
        (WebKit::FindClient::setDelegate):
        (WebKit::FindClient::didCountStringMatches):
        (WebKit::FindClient::didFindString):
        (WebKit::FindClient::didFailToFindString):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setFindClient):
        (WebKit::WebPageProxy::close):
        (WebKit::WebPageProxy::didCountStringMatches):
        (WebKit::WebPageProxy::didFindString):
        (WebKit::WebPageProxy::didFailToFindString):
        (WebKit::WebPageProxy::initializeFindClient): Deleted.
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::findClient):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setFindIndicator):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setFindIndicator:WebKit::fadeOut:animate:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-02  Anders Carlsson  <andersca@apple.com>

        Rename -[WKBackForwardListItem originalURL] to -[WKBackForwardListItem initialURL]
        https://bugs.webkit.org/show_bug.cgi?id=131116

        Reviewed by Antti Koivisto.

        * UIProcess/API/Cocoa/WKBackForwardListItem.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
        (-[WKBackForwardListItem initialURL]):
        (-[WKBackForwardListItem originalURL]): Deleted.

2014-04-02  Antti Koivisto  <antti@apple.com>

        Split tile grid out from TileController
        https://bugs.webkit.org/show_bug.cgi?id=131102

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        (WebKit::PlatformCALayerRemoteTiledBacking::PlatformCALayerRemoteTiledBacking):
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-04-02  Anders Carlsson  <andersca@apple.com>

        Try a workaround for a crash
        https://bugs.webkit.org/show_bug.cgi?id=131112

        Reviewed by Sam Weinig.

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

2014-04-02  Martin Robinson  <mrobinson@igalia.com>

        REGRESSION(r165704): [GTK] Inspector resources not correctly generated
        https://bugs.webkit.org/show_bug.cgi?id=130343

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Pass all appropriate directories to the
        GResources XML generation script.

2014-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move NEWS file to a new location
        https://bugs.webkit.org/show_bug.cgi?id=130901

        Reviewed by Brent Fulgham.

        * gtk/NEWS: Renamed from Source/WebKit/gtk/NEWS.

2014-04-01  Benjamin Poulain  <bpoulain@apple.com>

        <rdar://problem/16294704> Remove _pageExtendedBackgroundColor entirely
        https://bugs.webkit.org/show_bug.cgi?id=131075

        Reviewed by Beth Dakin.

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

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Stub out more WKNavigation properties
        https://bugs.webkit.org/show_bug.cgi?id=131080

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigation.mm:
        (-[WKNavigation initialRequest]):
        (-[WKNavigation response]):
        (-[WKNavigation error]):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Rename -[WKWebView activeURL] to -[WKWebView URL]
        https://bugs.webkit.org/show_bug.cgi?id=131077

        Reviewed by Tim Horton.

        Keep -[WKWebView activeURL] as SPI until no clients depend on it.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView URL]):
        (-[WKWebView activeURL]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::willChangeActiveURL):
        (WebKit::NavigationState::didChangeActiveURL):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Move -[WKWebView stopLoading:] back to WKIBActions
        https://bugs.webkit.org/show_bug.cgi?id=131072

        Reviewed by Tim Horton.

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

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Migrate more headers
        https://bugs.webkit.org/show_bug.cgi?id=131068

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        Remove a newline.

        * WebKit2.xcodeproj/project.pbxproj:
        Move files from the "Deprecated" group.

2014-04-01  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Grid Layout] Enable runtime feature if feature flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=130013

        Reviewed by Simon Fraser.

        Enable CSS Grid Layout runtime feature when ENABLE_CSS_GRID_LAYOUT flag is true.

        * Shared/WebPreferencesStore.h:

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Demote WKBackForwardListDidChangeNotification to SPI
        https://bugs.webkit.org/show_bug.cgi?id=131059

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        * UIProcess/API/Cocoa/WKBackForwardListInternal.h:
        * UIProcess/API/Cocoa/WKBackForwardListPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardListInternal.h.
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::LoaderClient::didChangeBackForwardList):
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-01  Andy Estes  <aestes@apple.com>

        [Cocoa] Add SPI to determine if a WKWebView is displaying a PDF
        https://bugs.webkit.org/show_bug.cgi?id=131063

        Reviewed by Tim Horton.

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

2014-04-01  Simon Fraser  <simon.fraser@apple.com>

        Remove some explicit template instantiations from logging code
        https://bugs.webkit.org/show_bug.cgi?id=131065

        Reviewed by Tim Horton.
        
        No need to explicitly state template types.

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

2014-04-01  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Partial repaint is broken
        https://bugs.webkit.org/show_bug.cgi?id=131056

        Reviewed by Dean Jackson.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (WebKit::RemoteLayerBackingStore::display):
        We need to check if the repaint rects themselves cover the whole
        layer's surface, not just their bounds. Otherwise, we'll optimize
        out the back->front copy and end up not painting the whole layer.

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Pass a WKNavigationAction to the create UIDelegate method
        https://bugs.webkit.org/show_bug.cgi?id=131053

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/Cocoa/UIClient.h:
        * UIProcess/Cocoa/UIClient.mm:
        (WebKit::UIClient::setDelegate):
        (WebKit::UIClient::createNewPage):

2014-04-01  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Remove the two finger pan gesture recognizer until it is actually implemented
        https://bugs.webkit.org/show_bug.cgi?id=131009

        Reviewed by Sam Weinig.

        The two finger pan should not block the pinch gesture recognizer.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _twoFingerPanRecognized:]): Deleted.

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Remove limits from WKBackForwardList getters
        https://bugs.webkit.org/show_bug.cgi?id=131052

        Reviewed by Beth Dakin.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardList.mm:
        (-[WKBackForwardList backList]):
        (-[WKBackForwardList forwardList]):
        (-[WKBackForwardList backListCount]): Deleted.
        (-[WKBackForwardList forwardListCount]): Deleted.
        (-[WKBackForwardList backListWithLimit:]): Deleted.
        (-[WKBackForwardList forwardListWithLimit:]): Deleted.
        * UIProcess/WebBackForwardList.cpp:
        (WebKit::WebBackForwardList::backList):
        (WebKit::WebBackForwardList::forwardList):
        * UIProcess/WebBackForwardList.h:

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Stub out the web process -> UI process message SPI
        https://bugs.webkit.org/show_bug.cgi?id=131048

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _userContentController]):
        (-[WKWebViewConfiguration _setUserContentController:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKScriptMessage.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKScriptMessage.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        (-[_WKScriptMessage body]):
        (-[_WKScriptMessage originatingWebView]):
        * UIProcess/API/Cocoa/_WKScriptMessageHandler.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKScriptWorld.h:
        * UIProcess/API/Cocoa/_WKUserContentController.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/_WKScriptWorld.h.
        * UIProcess/API/Cocoa/_WKUserContentController.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h.
        (-[_WKUserContentController addScriptMessageHandler:name:world:]):
        (-[_WKUserContentController removeScriptMessageHandler:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-04-01  Andreas Kling  <akling@apple.com>

        Invalidate CFNetwork connection cache on memory pressure.
        <https://webkit.org/b/131038>

        Stop holding on to cached HTTP connections if we come under memory pressure.

        Reviewed by Geoff Malloc-Garen.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Tweak WKPreferences API
        https://bugs.webkit.org/show_bug.cgi?id=131047

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        (-[WKPreferences initWithUserDefaultsKeyPrefix:]):
        (-[WKPreferences userDefaultsKeyPrefix]):
        (-[WKPreferences initWithUserDefaultsPrefixKey:]): Deleted.
        (-[WKPreferences userDefaultsPrefixKey]): Deleted.

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        Enable WEB_TIMING on Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=128064

        Reviewed by Sam Weinig, Brent Fulgham.
        
        Enable WEB_TIMING.

        * Configurations/FeatureDefines.xcconfig:

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Fix animations, and add logging
        https://bugs.webkit.org/show_bug.cgi?id=131011

        Reviewed by Tim Horton.
        
        UI-side animations were broken because GraphicsLayerCARemote::addAnimation()
        never called the superclass, so fix.
        
        Add logging for animations to the layer tree commit output.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::dumpProperty):
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::addAnimation):

2014-04-01  Zalan Bujtas  <zalan@apple.com>

        Build fix after r166582.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):

2014-04-01  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
        https://bugs.webkit.org/show_bug.cgi?id=130643

        Reviewed by Simon Fraser.

        This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
        subpixel sizing on hidpi resolutions, both generated and hidpi images can.
        This patch does not change Image behavior in general as both position and size are still snapped to integral values.  

        No change in behavior.

        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::encodeImage):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::updateCursor):

2014-04-01  Joonghun Park  <jh718.park@samsung.com>

        [EFL][WK2] Fix and update the existing test case for ewk_database_manager_origins_async_get API
        https://bugs.webkit.org/show_bug.cgi?id=131017

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        Fix memory leaks and errors caused by duplication of Ecore_Timer deletion
        as well as update a naming style of local variable.
        (EWK2DatabaseManagerTest::databaseOriginsCallback):
        (TEST_F):

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        Don't copy the children map in webkitWebViewBaseContainerForall
        https://bugs.webkit.org/show_bug.cgi?id=131016

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseContainerForall): Avoid copying the GtkWidget-to-IntRect HashMap object
        by transforming the iteration to a range-based for-loop over that HashMap's keys.

2014-04-01  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Don't copy the ResourceResponse object in webkitWebViewDecidePolicy
        https://bugs.webkit.org/show_bug.cgi?id=131015

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkitWebViewDecidePolicy): Avoid copying the ResourceResponce object returned by webkitURIResponseGetResourceResponse.
        That function already returns a reference, so the return value should be stored accordingly.

2014-04-01  Eunmi Lee  <eunmi15.lee@samsung.com>

        [CoordinatedGraphics] Content scale factor should not be applied to draw contents when fixed layout is not used.
        https://bugs.webkit.org/show_bug.cgi?id=130962

        Reviewed by Gyuyoung Kim.

        Delegating scaling is turned off when fixed layout is not used in the
        coordinated graphics, so page scale factor is applied to the contents
        directly.
        In that case, we should not apply page scale factor to coordinated
        graphics to draw contents and calculate visible content rect.

        Currently, page scale factor is applied twice to the coordinated
        graphics and contents, so result of scaling is abnormal.

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::transformToScene):
        (WebKit::WebView::visibleContentsSize):

2014-04-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Rename ewk_application_cache_manager_delete{_all}
        https://bugs.webkit.org/show_bug.cgi?id=131012

        Reviewed by Gyuyoung Kim.

        While discussing Bug 130577, we resulted that _clear and _xxx_del is better name for the EFL.
        This patch will rename similar API in ewk_application_cache_manager.

        In addition, fixed some typos in doxygen.

        * UIProcess/API/efl/ewk_application_cache_manager.cpp:
        (ewk_application_cache_manager_clear): Renamed from ewk_application_cache_manager_delete_all
        (ewk_application_cache_manager_entries_for_origin_del): Renamed from ewk_application_cache_manager_delete
        (ewk_application_cache_manager_delete_all): Deleted.
        (ewk_application_cache_manager_delete): Deleted.
        * UIProcess/API/efl/ewk_application_cache_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (TEST_F):

2014-03-31  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r166553.

        * UIProcess/API/gtk/WebKitSettings.cpp:
        (_WebKitSettingsPrivate::_WebKitSettingsPrivate): Pass 'WebKit2.' as the second argument to WebPreferences::create().

2014-03-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Extract the control of page background out of color_set
        https://bugs.webkit.org/show_bug.cgi?id=127539

        Reviewed by Gyuyoung Kim.

        EFL have a way to change the color using evas_object_color_set and we used it to change background.
        But, We should not use it because the alpha value of color_set is used
        for the transparancy of object itself including background and contents.

        This patch added ewk_view_bg_color_{get|set} to change the background color.

        * UIProcess/API/C/efl/WKViewEfl.cpp:
        Extracted controls of page background out of color_set.
        color_set will be only used for the opacity of whole contents.
        (WKViewSetBackgroundColor): Added to share page background color.
        (WKViewGetBackgroundColor):
        * UIProcess/API/C/efl/WKViewEfl.h:
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::handleEvasObjectColorSet):
        * UIProcess/API/efl/ewk_view.cpp:
        Removed ewk_view_draws_page_background_set which just control whether to draw background.
        ewk_view_bg_color_set will conver it.
        (ewk_view_bg_color_set):
        (ewk_view_bg_color_get):
        * UIProcess/API/efl/ewk_view.h:
        * UIProcess/API/efl/tests/test_ewk2_view.cpp: Added simple test case.
        * UIProcess/efl/WebViewEfl.cpp:
        (WebKit::WebViewEfl::setViewBackgroundColor):
        (WebKit::WebViewEfl::viewBackgroundColor):
        * UIProcess/efl/WebViewEfl.h:

2014-03-31  Joonghun Park  <jh718.park@samsung.com>

        [EFL][WK2]Implement ewk APIs of web local storage which have deletion functions of the local storage entries
        https://bugs.webkit.org/show_bug.cgi?id=130577

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (ewk_storage_manager_entries_clear):
        (ewk_storage_manager_entries_for_origin_del):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/ewk_storage_manager_private.h:
        (EwkStorageManager::wkStorageManager):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        adding and updating API unittest and fixing memory leak of the existing test case
        (EWK2StorageManagerTest::getStorageOriginsCallback):
        (EWK2StorageManagerTest::checkOrigin):
        (EWK2StorageManagerTest::getOrigin):
        (TEST_F):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Rename policy enums to match the delegate methods
        https://bugs.webkit.org/show_bug.cgi?id=131002

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):
        (WebKit::NavigationState::PolicyClient::decidePolicyForResponse):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Add more preferences
        https://bugs.webkit.org/show_bug.cgi?id=131001

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences isJavaScriptEnabled]):
        (-[WKPreferences setJavaScriptEnabled:]):
        (-[WKPreferences javaScriptCanOpenWindowsAutomatically]):
        (-[WKPreferences setJavaScriptCanOpenWindowsAutomatically:]):
        (-[WKPreferences suppressesIncrementalRendering]):
        (-[WKPreferences setSuppressesIncrementalRendering:]):
        (-[WKPreferences isJavaEnabled]):
        (-[WKPreferences setJavaEnabled:]):
        (-[WKPreferences arePlugInsEnabled]):
        (-[WKPreferences setPlugInsEnabled:]):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

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

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::setLayerID):
        (WebKit::RemoteLayerTreeHost::layerID):
        (WebKit::RemoteLayerTreeHost::createLayer):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Add a couple of iOS specific preferences
        https://bugs.webkit.org/show_bug.cgi?id=130999

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesStore.h:
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences allowsInlineMediaPlayback]):
        (-[WKPreferences setAllowsInlineMediaPlayback:]):
        (-[WKPreferences mediaPlaybackRequiresUserAction]):
        (-[WKPreferences setMediaPlaybackRequiresUserAction:]):
        (-[WKPreferences mediaPlaybackAllowsAirPlay]):
        (-[WKPreferences setMediaPlaybackAllowsAirPlay:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Add a new -[WKPreferences initWithUserDefaultsPrefixKey:] initializer
        https://bugs.webkit.org/show_bug.cgi?id=130996

        Reviewed by Simon Fraser.

        Add a "key prefix" to the WebKit::WebPreferences create function, so we can use a different
        key prefix ("WebKit") for the modern API and not pollute the user defaults namespace with
        the old key prefix ("WebKit2.").
        
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesCreate):
        (WKPreferencesCreateWithIdentifier):
        * UIProcess/API/Cocoa/WKPreferences.h:
        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences init]):
        (-[WKPreferences initWithUserDefaultsPrefixKey:]):
        (-[WKPreferences userDefaultsPrefixKey]):
        * UIProcess/WebPageGroup.cpp:
        (WebKit::WebPageGroup::WebPageGroup):
        * UIProcess/WebPreferences.cpp:
        (WebKit::WebPreferences::WebPreferences):
        * UIProcess/WebPreferences.h:
        (WebKit::WebPreferences::create):
        * UIProcess/mac/WebPreferencesMac.mm:
        (WebKit::makeKey):
        (WebKit::setStringValueIfInUserDefaults):
        (WebKit::setBoolValueIfInUserDefaults):
        (WebKit::setUInt32ValueIfInUserDefaults):
        (WebKit::setDoubleValueIfInUserDefaults):
        (WebKit::WebPreferences::platformInitializeStore):
        (WebKit::WebPreferences::platformUpdateStringValueForKey):
        (WebKit::WebPreferences::platformUpdateBoolValueForKey):
        (WebKit::WebPreferences::platformUpdateUInt32ValueForKey):
        (WebKit::WebPreferences::platformUpdateDoubleValueForKey):
        (WebKit::WebPreferences::platformUpdateFloatValueForKey):

2014-03-31  Pratik Solanki  <psolanki@apple.com>

        Remove duplicate entries in Derived Sources.

        Rubber-stamped by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj:

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Fix the build.

        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):

2014-03-31  Anders Carlsson  <andersca@apple.com>

        Rename -[WKNavigationAction destinationFrame] to -[WKNavigationAction targetFrame]
        https://bugs.webkit.org/show_bug.cgi?id=130994

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKNavigationAction.h:
        * UIProcess/API/Cocoa/WKNavigationAction.mm:
        (-[WKNavigationAction description]):
        (-[WKNavigationAction targetFrame]):
        (-[WKNavigationAction setTargetFrame:]):
        (-[WKNavigationAction destinationFrame]): Deleted.
        (-[WKNavigationAction setDestinationFrame:]): Deleted.
        * UIProcess/API/Cocoa/WKNavigationActionInternal.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::PolicyClient::decidePolicyForNavigationAction):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush all surfaces after painting into all of them, instead of after painting into each one
        https://bugs.webkit.org/show_bug.cgi?id=130768
        <rdar://problem/16421471>

        Reviewed by Benjamin Poulain.

        * Shared/mac/RemoteLayerBackingStore.h:
        Make RemoteLayerBackingStore noncopyable.
        Add flush(), which synchronously flushes painting operations on the underlying backing store.
        Add storage for the CGContext that needs to be flushed, and ensure that it is flushed before we paint again.

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

        (RemoteLayerBackingStore::drawInContext):
        Don't flush the context immediately after painting.

        (RemoteLayerBackingStore::flush):
        Flush the current front surface/buffer's context.
        Clear the new pending-flush members.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::flushBackingStoreChangesInTransaction):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Crawl through all of the valid changed backing stores in the transaction and flush them.
        Reset changed properties after encoding the commit.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::resetChangedProperties):
        (WebKit::RemoteLayerTreeTransaction::changedLayers):
        (WebKit::RemoteLayerTreeTransaction::changedLayerProperties):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
        (WebKit::dumpChangedLayers):
        Instead of storing a copy of the LayerProperties struct for each changed layer
        while building the transaction in the Web process, store a list of changed layers,
        and directly encode the commit from those layers' LayerProperties. This provides a few benefits:
                - We avoid copying LayerProperties for every changed layer, every commit
                - We can make RemoteLayerBackingStore noncopyable
                - We can walk the changed layers after building the transaction
                in order to flush backing store, and actually affect the layers'
                own RemoteLayerBackingStore instead of a copy.
        The UI process will still generate a LayerPropertiesMap at decode time.
        
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        Don't copy the LayerProperties struct for the debug overlay. Instead,
        adjust the properties which the debug overlay whacks directly on the layer,
        after applying the normal LayerProperties.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::recursiveBuildTransaction):
        Don't reset changed layer properties in the middle of building a transaction. Instead,
        RemoteLayerTreeDrawingArea::flushLayers() will reset all the flags on all changed layers
        after the commit is encoded.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        (WebKit::PlatformCALayerRemote::properties):

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [UI-side compositing] Proxy animations to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=130946

        Reviewed by Tim Horton.
        
        Add encoding/decoding of TimingFunctions. Add encoding support
        for HashSet.
        
        Add PlatformCAAnimationRemote and have PlatformCALayerRemote allow
        animations now. PlatformCALayerRemote's properties are defined in the class,
        as is the encoding/decoding (much cleaner than having them in the transaction
        class I think).
        
        Add support for the "animationDidStart" callback and sending this back to the
        web process. This involves a HashMap of layerID->WKAnimationDelegate stored
        on the RemoteLayerTreeHost, and a message send via the DrawingArea. On the
        other side, RemoteLayerTreeContext stores a HashMap of layerID->PlatformCALayerRemote*
        for layers which have just started animations, which is used to get the
        PlatformCALayer* to call animationDidStart() on.
        
        This requires that the RemoteLayerTreeHost* be passed down into property application,
        and that the RemoteLayerTreeHost have a reference to the drawing area.
        
        To every CALayer in the UI process we -setValue:forKey: to track the PlatformLayerID,
        so we can get back to it in order to dispatch "animationDidStart".
        
        Replace some "using namespace WebKit" with "namespace WebKit { }".

        * Platform/IPC/ArgumentCoders.h:
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<LinearTimingFunction>::encode):
        (IPC::ArgumentCoder<LinearTimingFunction>::decode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::encode):
        (IPC::ArgumentCoder<CubicBezierTimingFunction>::decode):
        (IPC::ArgumentCoder<StepsTimingFunction>::encode):
        (IPC::ArgumentCoder<StepsTimingFunction>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        * Shared/mac/RemoteLayerTreePropertyApplier.h:
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::layerID):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (WebKit::RemoteLayerTreeHost::animationDelegates):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::RemoteLayerTreeHost):
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::layerWillBeRemoved):
        (WebKit::RemoteLayerTreeHost::animationDidStart):
        (WebKit::RemoteLayerTreeHost::layerID):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/DrawingArea.h:
        (WebKit::DrawingArea::acceleratedAnimationDidStart):
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        (WebKit::GraphicsLayerCARemote::createPlatformCAAnimation):
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h: Added.
        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm: Added.
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
        (WebKit::PlatformCALayerRemote::animationStarted):
        (WebKit::PlatformCALayerRemote::addAnimationForKey):
        (WebKit::PlatformCALayerRemote::removeAnimationForKey):
        (WebKit::PlatformCALayerRemote::animationForKey):
        (PlatformCALayerRemote::recursiveBuildTransaction): Deleted.
        (PlatformCALayerRemote::addAnimationForKey): Deleted.
        (PlatformCALayerRemote::removeAnimationForKey): Deleted.
        (PlatformCALayerRemote::animationForKey): Deleted.
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed):
        (WebKit::RemoteLayerTreeContext::willStartAnimationOnLayer):
        (WebKit::RemoteLayerTreeContext::animationDidStart):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::acceleratedAnimationDidStart):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Double-buffer RemoteLayerBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=130990

        Reviewed by Simon Fraser.

        We'll keep a front and back buffer for each surface; the front is generally currently
        being displayed in the UI process, and the back is the one we'll paint into.

        Swap the two surfaces each time we paint; since we synchronize with the UI process,
        the old front surface will generally be out-of-use by the render server by the time
        we paint again. However, since render server commits are asynchronous and we have 
        no way to syncronize with them yet, we have to check if the (swapped to front) back buffer is in use,
        and create a new front buffer if it is.

        Triple-buffering would solve this problem, as would synchronization with the render server,
        as would a pool of surfaces - we will revisit these solutions in future patches.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::ensureBackingStore):
        (RemoteLayerBackingStore::clearBackingStore):
        Factor clearBackingStore() out of ensureBackingStore() and display().

        (RemoteLayerBackingStore::display):
        Swap buffers. Since m_backSurface will hold on to the back surface's CGContext,
        we don't need to worry about tearing down the image first anymore.
        Don't worry about creating a back image (nor copying it into the front image)
        if we're going to paint the whole layer.

        (RemoteLayerBackingStore::drawInContext):
        Fix some names.

        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        Reduce duplication.

        (RemoteLayerBackingStore::createImageForFrontBuffer): Deleted.

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        Synchronize Web process remote layer tree commits with CoreAnimation commits in the UI process
        https://bugs.webkit.org/show_bug.cgi?id=130984

        Reviewed by Simon Fraser.

        There's no reason for the Web process to paint faster than the UI process
        can apply to and commit the CoreAnimation layer tree.

        Also, once we get proper double-buffering and purgeable back buffers, we
        will need the ability to make some assumptions about in-use surfaces.

        Unfortunately, we can't actually tell when the render server commits, 
        as this is an asynchronous operation in a process we don't control, so
        for now, this is only an approximation.

        This also means that the assumptions we would like to make won't be
        strong guarantees yet.

        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        When we commit, install a run loop observer to fire immediately after CoreAnimation commits.

        (WebKit::RemoteLayerTreeDrawingAreaProxy::showDebugIndicator):
        Fix a typo ('cmponents').

        (WebKit::coreAnimationDidCommitLayersCallback):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::scheduleCoreAnimationLayerCommitObserver):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::coreAnimationDidCommitLayers):
        When CA commits, send a message to the Web process letting it know that we
        swapped to the new backing store.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        (WebKit::RemoteLayerTreeDrawingArea::didUpdate):
        Defer remote layer tree commits until we get didUpdate() from the UI process.

2014-03-31  Dean Jackson  <dino@apple.com>

        Remove WEB_ANIMATIONS
        https://bugs.webkit.org/show_bug.cgi?id=130989

        Reviewed by Simon Fraser.

        Remove this feature flag until we plan to implement.

        * Configurations/FeatureDefines.xcconfig:

2014-03-31  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Hook up scroll events for accelerated overflow:scroll
        https://bugs.webkit.org/show_bug.cgi?id=130976

        Reviewed by Tim Horton.
        
        When an accelerated overflow:scroll is scrolled in the UI process,
        tell the WebProcess that the scroll happened to update RenderLayer
        state and fire events.
        
        Add a WKOverflowScrollViewDelegate which is set as the delegate of
        UIScrollViews, owned by ScrollingTreeOverflowScrollingNodeIOS, and propagates
        -scrollViewDidScroll: messages to ScrollingTree::scrollPositionChangedViaDelegatedScrolling(),
        which updates child layers and then, via RemoteScrollingTree::scrollingTreeNodeDidScroll,
        tells the RemoteScrollingCoordinator which sends a message to the WebProcess.
        
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollingTreeNodeDidScroll): Name change
        to try to reduce confusion.
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChanged): Deleted.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::scrollingTreeNodeDidScroll):
        * UIProcess/Scrolling/RemoteScrollingTree.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (-[WKOverflowScrollViewDelegate initWithScrollingTreeNode:WebKit::]):
        (-[WKOverflowScrollViewDelegate scrollViewDidScroll:]):
        (-[WKOverflowScrollViewDelegate scrollViewWillBeginDragging:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndDragging:willDecelerate:]):
        (-[WKOverflowScrollViewDelegate scrollViewDidEndScrollingAnimation:]):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::~ScrollingTreeOverflowScrollingNodeIOS):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateBeforeChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::scrollViewDidScroll):
        * WebProcess/Scrolling/RemoteScrollingCoordinator.mm:
        (WebKit::RemoteScrollingCoordinator::scrollPositionChangedForNode): No need for
        rounding.

2014-03-29  Simon Fraser  <simon.fraser@apple.com>

        Fix scrolling on OS X with UI-side compositing
        https://bugs.webkit.org/show_bug.cgi?id=130930

        Reviewed by Tim Horton.
        
        On iOS, we rely on visible rect updates to propagate scroll offset
        changes to the WebProcess. RemoteScrollingCoordinatorProxy was thus hardcoded
        to bail from scrollPositionChanged() when the scrolled node was the root node,
        but this broke OS X. Fix by adding a behavior flag to RemoteScrollingCoordinatorProxy.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::RemoteScrollingCoordinatorProxy):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChanged):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        (WebKit::RemoteScrollingCoordinatorProxy::setPropagatesMainFrameScrolls):
        (WebKit::RemoteScrollingCoordinatorProxy::propagatesMainFrameScrolls):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::initializeWebPage):

2014-03-31  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Disable tile cohort retention for now
        https://bugs.webkit.org/show_bug.cgi?id=130926
        <rdar://problem/16465413>

        Reviewed by Simon Fraser.

        * Shared/WebPreferencesStore.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
        Add a preference for temporary tile cohort retention (essentially, provide a setting
        that means that we will never retain tiles at all once they leave the tile coverage rect).
        Defaults to true to maintain existing behavior, except for iOS WebKit2, where
        it defaults to false because we don't have the requisite support for purgeable tiles yet.

        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::updatePreferences):
        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):

2014-03-31  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Buildfix after r166497.

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/ewk_context.h: Missing EAPI added.

2014-03-31  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Use PROJECT_VERSION_* instead of WEBKIT_*_VERSION
        https://bugs.webkit.org/show_bug.cgi?id=130936

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitVersion.h.in: Use PROJECT_VERSION_* macros instead of the Autotools ones.

2014-03-31  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        [EFL][WK2] Add ewk APIs to control TLS error policy on WebContext.
        https://bugs.webkit.org/show_bug.cgi?id=129740

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake:
        Added the new SSL test.

        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::ignoreTLSErrors):
        (EwkContext::setIgnoreTLSErrors):
        (ewk_context_ignore_tls_errors_get):
        (ewk_context_ignore_tls_errors_set):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        Added the API functions.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::EWK2UnitTestServer):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:
        Extended the unit test server to handle TLS.

        * UIProcess/API/efl/tests/test_ewk2_ssl.cpp:
        Added tests to check the TLS policy API.

2014-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK2 plugin process binary name after r166492.

        * PlatformGTK.cmake: Fix typo.

2014-03-31  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        Remove hostThisRegister() and hostThisValue()
        https://bugs.webkit.org/show_bug.cgi?id=130895

        Reviewed by Geoffrey Garen.

        Removed hostThisRegister() and hostThisValue() and instead use thisArgumentOffset() and thisValue() respectively.

        * WebProcess/Plugins/Netscape/JSNPMethod.cpp:
        (WebKit::callMethod):

2014-03-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add support for GTK3 plugins
        https://bugs.webkit.org/show_bug.cgi?id=130599

        Reviewed by Martin Robinson.

        We currently have a gtk2 based plugin process mainly for flash
        and a few other plugins that use GTK2, but many other plugins
        don't even use gtk at all. This patch builds a lighter plugin
        process based on GTK3, used by default for all the plugins expect
        the ones requiring GTK2. And of course the default plugin process
        supports GTK3 plugins.

        * CMakeLists.txt: Add common rules to build the default plugin process.
        * PlatformEfl.cmake: Remove common cmake code that is now in CMakeLists.txt.
        * PlatformGTK.cmake: Rename WebKitPluginProcess to
        WebKitPluginProcess2 and add the platform specific rules to build
        the default plugin process.
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::getPluginInfoForLoadedPlugin):
        Check if the loaded plugin module uses GTK2.
        (WebKit::NetscapePluginModule::getPluginInfo): Set requiresGtk2 accordingly.
        (WebKit::NetscapePluginModule::scanPlugin): Write "requires-gtk2"
        line to stdout if the plugin requires GTK2.
        * Shared/Plugins/PluginModuleInfo.h: Add requiresGtk2 boolean member.
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess): Use the
        WebKitPluginProcess2 executable when the plugin requires GTK2.
        * UIProcess/Plugins/PluginProcessProxy.h: Add requiresGtk2 boolean
        member to RawPluginMetaData struct.
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp: Bump the cache schema version.
        (WebKit::PluginInfoCache::getPluginInfo): Read also requires-gtk2
        key from the cache.
        (WebKit::PluginInfoCache::updatePluginInfo): Save also
        requires-gtk2 key in the cache.
        * UIProcess/Plugins/unix/PluginProcessProxyUnix.cpp:
        (WebKit::PluginProcessProxy::platformGetLaunchOptions): Add an
        extra initialization data parameter if the plugin requires GTK2.
        (WebKit::PluginProcessProxy::scanPlugin): Check if "requires-gtk2"
        was written to stdout.

2014-03-30  Andy Estes  <aestes@apple.com>

        [Cocoa] Add an originatingWebView property to _WKDownload
        https://bugs.webkit.org/show_bug.cgi?id=130945

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Passed self to WKView's initializer.
        * UIProcess/API/Cocoa/_WKDownload.h: Declared originatingWebView as a weak, readonly property.
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload originatingWebView]):
        (-[_WKDownload setOriginatingWebView:]):
        * UIProcess/API/Cocoa/_WKDownloadInternal.h: Re-declared originatingWebView as readwrite so that
        PageClientImpl can call setOriginatingWebView:. Removed some dead code.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView initWithFrame:context:configuration:webView:]): Updated to accept a webView parameter.
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): Passed nil for the webView parameter.
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::decideDestinationWithSuggestedFilename): Ensured allowOverwrite is initialized.
        * UIProcess/PageClient.h: Included handleDownloadRequest() on all platforms.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::receivedPolicyDecision): Ditto.
        (WebKit::WebPageProxy::handleDownloadRequest): Ditto.
        * UIProcess/WebPageProxy.h: Ditto.
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::handleDownloadRequest): Called -[_WKDownload setOriginatingWebView:].
        * UIProcess/mac/PageClientImpl.h: Added a m_webView member variable.
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::PageClientImpl): Asserted that m_webView is nil if WK API isn't enabled.
        (WebKit::PageClientImpl::handleDownloadRequest): Called -[_WKDownload setOriginatingWebView:].

2014-03-29  Commit Queue  <commit-queue@webkit.org>

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

        Caused crashes and other failures on cache tests (Requested by
        ap on #webkit).

        Reverted changeset:

        "Web Replay: add page-level setting to bypass the MemoryCache"
        https://bugs.webkit.org/show_bug.cgi?id=130728
        http://trac.webkit.org/changeset/166434

2014-03-28  Anders Carlsson  <andersca@apple.com>

        Uncaught NSExceptions should crash the web process
        https://bugs.webkit.org/show_bug.cgi?id=130923
        <rdar://problem/16463751>

        Reviewed by Dan Bernstein.

        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r166441 and r166443.

        Missing PLATFORM(COCOA) guards added.

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

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Don't prevent AppSleep from sync messages.
        https://bugs.webkit.org/show_bug.cgi?id=130747.

        Reviewed by Anders Carlsson.

        We think sync messages only need to happen full throttle when the plugin is visible,
        the user is interacting with the plugin, or audio is playing.  Since we already
        take assertions for all these cases the assertion in sync messages doesn’t provide
        any value.  Since it can keep the PluginProcess awake in other instances remove it.

        * PluginProcess/WebProcessConnection.cpp:
        (WebKit::WebProcessConnection::didReceiveSyncMessage):

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Stop waking up the web process in the background because of plugin activity.
        Part of <rdar://problem/16061257> PluginProcess should AppNap when no plugins on active tab.

        Reviewed by Anders Carlsson.

        Plugin activity in the background can constantly wake up web processes.  This is only
        necessary when audio is playing to support web apps like Pandora and youtube playing 
        in the background.  Use a new api in CoreAudio to see if there is audio playing in
        the PluginProcess.

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess): Add a AudioHardwareListener
        (WebKit::PluginProcess::createWebProcessConnection): tell web process current state
        (WebKit::PluginProcess::audioHardwareDidBecomeActive): respond to audio hardware notifications
        (WebKit::PluginProcess::audioHardwareDidBecomeInactive):
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp: tell WebProcess when audio state in PluginProcess
             changes.
        (WebKit::WebProcessConnection::audioHardwareDidBecomeActive):
        (WebKit::WebProcessConnection::audioHardwareDidBecomeInactive):
        * PluginProcess/WebProcessConnection.h:
        * WebProcess/Plugins/Netscape/NPRuntimeObjectMap.cpp:
             Only invoke pageThrottler activity when playing audio
        (WebKit::NPRuntimeObjectMap::evaluate):
        * WebProcess/Plugins/Plugin.h: add function to get audio state
        (WebKit::Plugin::audioIsPlayingInPluginProcess):
        * WebProcess/Plugins/PluginProcessConnection.cpp: store audio state
        (WebKit::PluginProcessConnection::PluginProcessConnection):
        (WebKit::PluginProcessConnection::didReceiveMessage):
        (WebKit::PluginProcessConnection::audioHardwareDidBecomeActive):
        (WebKit::PluginProcessConnection::audioHardwareDidBecomeInactive):
        * WebProcess/Plugins/PluginProcessConnection.h:
        (WebKit::PluginProcessConnection::audioIsPlaying):
        * WebProcess/Plugins/PluginProcessConnection.messages.in:
        * WebProcess/Plugins/PluginProxy.cpp:
        (WebKit::PluginProxy::audioIsPlayingInPluginProcess):
        * WebProcess/Plugins/PluginProxy.h:
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::audioIsPlayingInPluginProcess):
        * WebProcess/Plugins/PluginView.h:

2014-03-28  Stephanie Lewis  <slewis@apple.com>

        Have the plugin process track visibility of it’s plugin and sleep when none
        are visible.
        Part of <rdar://problem/16061257> PluginProcess should AppNap when no plugins on active tab.
        https://bugs.webkit.org/show_bug.cgi?id=130694

        Reviewed by Anders Carlsson.

        Currently AppSleep is enabled on the PluginProcess based on web page visibility.
        Add visibility tracking to plugins and move the decision to AppSleep into the the
        PluginProcess

        * PluginProcess/PluginProcess.cpp:
        (WebKit::PluginProcess::PluginProcess): Add a new activity for visible plugins
        (WebKit::PluginProcess::pluginsForWebProcessDidBecomeVisible): take an activity
             assertion if any web processes have a visible plugin.
        (WebKit::PluginProcess::pluginsForWebProcessDidBecomeHidden): 
        * PluginProcess/PluginProcess.h:
        * PluginProcess/WebProcessConnection.cpp: 
        (WebKit::WebProcessConnection::removePluginControllerProxy): remove plugin from 
            visible plugins when destroying it
        (WebKit::WebProcessConnection::pluginDidBecomeVisible):
        (WebKit::WebProcessConnection::pluginDidBecomeHidden): track which plugins are
            visible for each web process
        * PluginProcess/WebProcessConnection.h:
        * PluginProcess/mac/PluginControllerProxyMac.mm:
        (WebKit::PluginControllerProxy::windowVisibilityChanged): notify WebProcessConnection
            when visibility changed.
        * UIProcess/WebContext.h:
        * UIProcess/mac/WebContextMac.mm:  instead of tracking plugin app sleep state on the web pref.
            and visibility state, just use the web pref.
        (WebKit::WebContext::updateProcessSuppressionState):
        (WebKit::WebContext::processSuppressionPreferenceIsEnabledForAllContexts):

2014-03-28  Brian Burg  <bburg@apple.com>

        Web Replay: add page-level setting to bypass the MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=130728

        Reviewed by Timothy Hatcher.

        * UIProcess/APISession.cpp:
        (API::generateID): update the base ID for generating unique sessions.

2014-03-28  Cody Krieger  <cjk@apple.com>

        Add willSubmitForm callback support to WKWebProcessPlugInFormDelegatePrivate.

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

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFormDelegatePrivate.h:
        Add -_webProcessPlugInBrowserContextController:willSubmitForm:toFrame:fromFrame:withValues:
        to the WKWebProcessPlugInFormDelegatePrivate protocol.

        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        Wire up the willSubmitForm() callback to the new
        WKWebProcessPlugInFormDelegatePrivate method.

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Enable async text input implementation
        https://bugs.webkit.org/show_bug.cgi?id=130856

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm: (-[WKView _interpretKeyEvent:completionHandler:]):
        Temporarily work around <rdar://16393434>.

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        Move sync CancelComposition message under an ifdef
        https://bugs.webkit.org/show_bug.cgi?id=130908

        Reviewed by Enrica Casucci.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::cancelComposition): Deleted.
        * UIProcess/mac/WebPageProxyMac.mm:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Don't cancel composition on selection change
        https://bugs.webkit.org/show_bug.cgi?id=130909

        Reviewed by Enrica Casucci.

        Fixing a recent regression from bug 130727.

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

2014-03-28  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        [WK2] Removed unused method logChannelByName.
        https://bugs.webkit.org/show_bug.cgi?id=130897

        Reviewed by Anders Carlsson.

        * Platform/Logging.cpp:
        (WebKit::logChannelByName): Deleted.
        * Platform/Logging.h:

2014-03-28  Alexey Proskuryakov  <ap@apple.com>

        Eliminate a sync cancelComposition call in WebPageProxy::editorStateChanged
        https://bugs.webkit.org/show_bug.cgi?id=130727

        Reviewed by Enrica Casucci.

        Added a separate CompositionWasCanceled IPC call, with which WebProcess can tell
        UIProcess that it should notify an input method of canceled composition. There are
        a lot of incorrect edge cases where we don't call it correctly, but this was true
        in the old implementation too (for different edge cases).

        This change only affects iOS and async NSTextInputClient code path on Mac. I don't
        want to change sync NSTextInputClient code path unless absolutely necessary.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::editorStateChanged):
        (WebKit::WebPageProxy::compositionWasCanceled):
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::executeKeypressCommands):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):

2014-03-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Running minibrowser with url crashes in debug build
        https://bugs.webkit.org/show_bug.cgi?id=130492

        Reviewed by Martin Robinson.

        Use the ResourceRequest(const URL& url) constructor, instead of the
        one taking a String, to call WebPageProxy::loadRequest(), so we
        ensure that the passed URI is correctly constructed.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_load_uri): Create an URL out of a SoupURI and
        use that to create a ResourceRequest to pass to loadRequest().

2014-03-27  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2] Tweak cache sizes for iOS
        https://bugs.webkit.org/show_bug.cgi?id=130871

        Reviewed by Sam Weinig.

        Bring over the tweaks we had made to memory cache size for WebKit1 on iOS to WebKit2. These
        were made per findings in <rdar://8611638>.

        * Shared/CacheModel.cpp:
        (WebKit::calculateCacheSizes):

2014-03-27  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2][EFL] Fix wrong parameter name in ewk_view_user_agent_set()
        https://bugs.webkit.org/show_bug.cgi?id=130888

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/ewk_view.h:

2014-03-27  Alexey Proskuryakov  <ap@apple.com>

        Confirm composition in resignFirstResponder, don't cancel it
        https://bugs.webkit.org/show_bug.cgi?id=130852

        Reviewed by Darin Adler.

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

2014-03-27  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2] Don't pass disk cache directory path on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130862

        Reviewed by Sam Weinig.

        The diskPath passed to NSURLCache initializer is treated differently on Mac and iOS. Just
        pass nil for now until we sort out the API.

        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-03-27  Pratik Solanki  <psolanki@apple.com>

        [iOS WebKit2] Share network process code between iOS and Mac
        https://bugs.webkit.org/show_bug.cgi?id=130861

        Reviewed by Sam Weinig.

        Implement network process functions for iOS by moving common code from NetworkProcessMac.mm
        to a new shared file NetworkProcessCocoa.mm and sharing between iOS and Mac.

        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/cocoa/NetworkProcessCocoa.mm: Added.
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
        Common initialization code for iOS and Mac.
        (WebKit::memorySize):
        (WebKit::volumeFreeSize):
        (WebKit::NetworkProcess::platformSetCacheModel):
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::initializeProcess):
        Remove unnecessary #if PLATFORM(IOS).
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-27  Enrica Casucci  <enrica@apple.com>

        Add support for AirPlay picker in WK2 for iOS.
        https://bugs.webkit.org/show_bug.cgi?id=130855
        <rdar://problem/15349859>

        Reviewed by Joseph Pecoraro and Benjamin Poulain.

        Adds support to display the airplay picker for iPhone and iPad
        in WK2.
        The picker on iPad is displayed next to the airplay button.

        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showAirPlayRoutePicker):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _showAirPlayRoutePicker:fromRect:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showAirPlayRoutePicker):
        * UIProcess/ios/forms/WKAirPlayRoutePicker.h: Added.
        * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: Added.
        (-[WKAirPlayRoutePicker initWithView:]):
        (-[WKAirPlayRoutePicker dealloc]):
        (-[WKAirPlayRoutePicker popoverControllerDidDismissPopover:]):
        (-[WKAirPlayRoutePicker _presentAirPlayPopoverAnimated:fromRect:]):
        (-[WKAirPlayRoutePicker _windowWillRotate:]):
        (-[WKAirPlayRoutePicker _windowDidRotate:]):
        (-[WKAirPlayRoutePicker _dismissAirPlayRoutePickerIPad]):
        (-[WKAirPlayRoutePicker showAirPlayPickerIPad:fromRect:]):
        (-[WKAirPlayRoutePicker showAirPlayPickerIPhone:]):
        (-[WKAirPlayRoutePicker show:fromRect:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        (WebKit::WebChromeClient::showAirPlayRoutePicker):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::touchEvent):
        (WebKit::WebPage::touchEventSyncForTesting):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rectForElementAtInteractionLocation):
        (WebKit::WebPage::handleTap):

2014-03-27  Benjamin Poulain  <bpoulain@apple.com>

        [WK2][iOS] <rdar://problem/16414684> WKWebView should draw a white background before the page loads
        https://bugs.webkit.org/show_bug.cgi?id=130873

        Reviewed by Simon Fraser.

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

2014-03-27  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Compute a good exposed rect when scaling WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=130761

        Reviewed by Simon Fraser.

        Add a simple heuristic to improve tiling while zooming. In theory we could take the zoom
        center and scaleRate to split the speed between scrolling and pinching. In practice,
        zoom is transitory and is not as predictable as scrolling, so this patch just does a very
        simple heuristic:
        -When zooming in, do not expand coverage.
        -When zooming out, add half a tile size on every side.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::timestamp):
        (WebKit::VisibleContentRectUpdateInfo::horizontalVelocity):
        (WebKit::VisibleContentRectUpdateInfo::verticalVelocity):
        (WebKit::VisibleContentRectUpdateInfo::scaleChangeRate):
        * UIProcess/ios/WKContentView.mm:
        (WebKit::HistoricalVelocityData::VelocityData::VelocityData):
        (WebKit::HistoricalVelocityData::velocityForNewData):
        (WebKit::HistoricalVelocityData::append):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:

        (WebKit::adjustExposedRectForBoundedScale):
        When zooming past the maximum size, adjust the exposed rect to continue tiling the area
        at maximum size. Otherwise, we tile a tiny area, and have to retile larger when the animation
        pull back the view to maximum scale.

        (WebKit::adjustVelocityDataForBoundedScale):
        Since we do not split the velocity from scrolling from the scaling, just clear the velocity when zooming.
        Also clear the scaleChangeRate when the scale is out of bounds. There is no reason to add tiles for
        temporary state.

        (WebKit::WebPage::updateVisibleContentRects):

2014-03-27  Anders Carlsson  <andersca@apple.com>

        Add _ prefix to WKRemoteObjectRegistery and WKRemoteObjectInterface
        https://bugs.webkit.org/show_bug.cgi?id=130868

        Reviewed by Sam Weinig.

        * Shared/API/Cocoa/RemoteObjectRegistry.h:
        * Shared/API/Cocoa/RemoteObjectRegistry.mm:
        (WebKit::RemoteObjectRegistry::RemoteObjectRegistry):
        * Shared/API/Cocoa/WKRemoteObject.h:
        * Shared/API/Cocoa/WKRemoteObject.mm:
        (-[WKRemoteObject _initWithObjectRegistry:interface:]):
        * Shared/API/Cocoa/WKRemoteObjectCoder.h:
        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (-[WKRemoteObjectDecoder initWithInterface:rootObjectDictionary:WebKit::]):
        * Shared/API/Cocoa/WKRemoteObjectInterface.h:
        * Shared/API/Cocoa/WKRemoteObjectInterface.mm:
        (isContainerClass): Deleted.
        (propertyListClasses): Deleted.
        (allowedArgumentClassesForMethod): Deleted.
        (initializeAllowedArgumentClasses): Deleted.
        (-[WKRemoteObjectInterface initWithProtocol:identifier:]): Deleted.
        (+[WKRemoteObjectInterface remoteObjectInterfaceWithProtocol:]): Deleted.
        (-[WKRemoteObjectInterface description]): Deleted.
        (classesForSelectorArgument): Deleted.
        (-[WKRemoteObjectInterface classesForSelector:argumentIndex:]): Deleted.
        (-[WKRemoteObjectInterface setClasses:forSelector:argumentIndex:]): Deleted.
        (methodArgumentTypeEncodingForSelector): Deleted.
        (-[WKRemoteObjectInterface _methodSignatureForSelector:]): Deleted.
        (-[WKRemoteObjectInterface _allowedArgumentClassesForSelector:]): Deleted.
        * Shared/API/Cocoa/WKRemoteObjectRegistry.h:
        * Shared/API/Cocoa/WKRemoteObjectRegistry.mm:
        (-[WKRemoteObjectRegistry registerExportedObject:interface:]): Deleted.
        (-[WKRemoteObjectRegistry unregisterExportedObject:interface:]): Deleted.
        (-[WKRemoteObjectRegistry remoteObjectProxyWithInterface:]): Deleted.
        (-[WKRemoteObjectRegistry _initWithMessageSender:IPC::]): Deleted.
        (-[WKRemoteObjectRegistry _invalidate]): Deleted.
        (-[WKRemoteObjectRegistry _sendInvocation:interface:]): Deleted.
        (-[WKRemoteObjectRegistry WebKit::]): Deleted.
        (-[WKRemoteObjectRegistry _invokeMethod:]): Deleted.
        (-[WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]): Deleted.
        * Shared/API/Cocoa/_WKRemoteObjectInterface.h: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectInterface.h.
        * Shared/API/Cocoa/_WKRemoteObjectInterface.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectInterface.mm.
        (isContainerClass):
        (propertyListClasses):
        (allowedArgumentClassesForMethod):
        (initializeAllowedArgumentClasses):
        (-[_WKRemoteObjectInterface initWithProtocol:identifier:]):
        (+[_WKRemoteObjectInterface remoteObjectInterfaceWithProtocol:]):
        (-[_WKRemoteObjectInterface description]):
        (classesForSelectorArgument):
        (-[_WKRemoteObjectInterface classesForSelector:argumentIndex:]):
        (-[_WKRemoteObjectInterface setClasses:forSelector:argumentIndex:]):
        (methodArgumentTypeEncodingForSelector):
        (-[_WKRemoteObjectInterface _methodSignatureForSelector:]):
        (-[_WKRemoteObjectInterface _allowedArgumentClassesForSelector:]):
        * Shared/API/Cocoa/_WKRemoteObjectInterfaceInternal.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectInterfaceInternal.h.
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.h: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectRegistry.h.
        * Shared/API/Cocoa/_WKRemoteObjectRegistry.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectRegistry.mm.
        (-[_WKRemoteObjectRegistry registerExportedObject:interface:]):
        (-[_WKRemoteObjectRegistry unregisterExportedObject:interface:]):
        (-[_WKRemoteObjectRegistry remoteObjectProxyWithInterface:]):
        (-[_WKRemoteObjectRegistry _initWithMessageSender:IPC::]):
        (-[_WKRemoteObjectRegistry _invalidate]):
        (-[_WKRemoteObjectRegistry _sendInvocation:interface:]):
        (-[_WKRemoteObjectRegistry WebKit::]):
        (-[_WKRemoteObjectRegistry _invokeMethod:]):
        (-[_WKRemoteObjectRegistry _invokeMessageWithInterfaceIdentifier:encodedInvocation:]):
        * Shared/API/Cocoa/_WKRemoteObjectRegistryInternal.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectRegistryInternal.h.
        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
        (-[WKBrowsingContextController _remoteObjectRegistry]):
        (-[WKBrowsingContextController remoteObjectRegistry]): Deleted.
        * UIProcess/API/Cocoa/WKBrowsingContextControllerPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _remoteObjectRegistry]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInBrowserContextControllerToBeRemoved.mm: Copied from Source/WebKit2/Shared/API/Cocoa/WKRemoteObject.h.
        (-[WKWebProcessPlugInBrowserContextController remoteObjectRegistry]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (-[WKWebProcessPlugInBrowserContextController _remoteObjectRegistry]):
        (-[WKWebProcessPlugInBrowserContextController remoteObjectRegistry]): Deleted.
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextControllerPrivate.h:

2014-03-27  Commit Queue  <commit-queue@webkit.org>

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

        Seems to have broken PLT (Requested by ap on #webkit).

        Reverted changeset:

        "Connection::dispatchOneMessage() can be re-entered while
        handling Cmd-key menu"
        https://bugs.webkit.org/show_bug.cgi?id=130767
        http://trac.webkit.org/changeset/166360

2014-03-27  Sam Weinig  <sam@webkit.org>

        Support dynamic layer hosting context changes
        <rdar://problem/16278019>
        https://bugs.webkit.org/show_bug.cgi?id=130863

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView addWindowObserversForWindow:]):
        (-[WKView removeWindowObservers]):
        (-[WKView _windowDidChangeLayerHosting:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::layerHostingModeDidChange):
        * UIProcess/WebPageProxy.h:

2014-03-27  Simon Fraser  <simon.fraser@apple.com>

        Don't leak the WKBrowsingContextController
        https://bugs.webkit.org/show_bug.cgi?id=130815

        Reviewed by Tim Horton.
        
        Use adoptNS to avoid leaking the WKBrowsingContextController.

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

2014-03-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give WebProcess a proxy application entitlement
        https://bugs.webkit.org/show_bug.cgi?id=130806

        Reviewed by Timothy Hatcher.

        * Configurations/WebContent-iOS.entitlements:

2014-03-27  Anders Carlsson  <andersca@apple.com>

        Add reload and reloadFromOrigin as API
        https://bugs.webkit.org/show_bug.cgi?id=130858

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView reload]):
        (-[WKWebView reloadFromOrigin]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView reload:]):
        (-[WKWebView reloadFromOrigin:]):

2014-03-27  Anders Carlsson  <andersca@apple.com>

        Rename WKFrameHandle to _WKFrameHandle
        https://bugs.webkit.org/show_bug.cgi?id=130847

        Reviewed by Tim Horton.

        * Shared/API/Cocoa/_WKFrameHandle.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKFrameHandle.h.
        * Shared/API/Cocoa/_WKFrameHandle.mm: Renamed from Source/WebKit2/Shared/API/Cocoa/WKFrameHandle.mm.
        (-[_WKFrameHandle dealloc]):
        (-[_WKFrameHandle isEqual:]):
        (-[_WKFrameHandle hash]):
        (-[_WKFrameHandle _frameID]):
        (-[_WKFrameHandle copyWithZone:]):
        (+[_WKFrameHandle supportsSecureCoding]):
        (-[_WKFrameHandle initWithCoder:]):
        (-[_WKFrameHandle encodeWithCoder:]):
        (-[_WKFrameHandle API::]):
        * Shared/API/Cocoa/_WKFrameHandleInternal.h: Renamed from Source/WebKit2/Shared/API/Cocoa/WKFrameHandleInternal.h.
        (WebKit::wrapper):
        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (+[WKWebProcessPlugInFrame lookUpFrameFromHandle:]):
        (-[WKWebProcessPlugInFrame handle]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:

2014-03-27  Alexey Proskuryakov  <ap@apple.com>

        Connection::dispatchOneMessage() can be re-entered while handling Cmd-key menu
        equivalents, ASSERT(!_data->_keyDownEventBeingResent)
        https://bugs.webkit.org/show_bug.cgi?id=130767
        <rdar://problem/16307487>

        Reviewed by Darin Adler.

        * Shared/WebKit2Initialize.cpp: (WebKit::InitializeWebKit2): Added NSModalPanelRunLoopMode
        to RunLoop event source and timer modes.

2014-03-27  Jae Hyun Park  <jaepark@webkit.org>

        Remove LayerTreeContextCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=130807

        Reviewed by Martin Robinson.

        * Shared/cairo/LayerTreeContextCairo.cpp: Removed.

2014-03-27  Maciej Florek  <m.florek@samsung.com>

        [EFL][WK2] Add tests of the set process model API
        https://bugs.webkit.org/show_bug.cgi?id=130830

        Reviewed by Gyuyoung Kim.

        Implement unit tests to check, if process model API works
        properly. When process model is set to EWK_PROCESS_MODEL_SHARED_SECONDARY,
        there should be only one WebProcess. In case of EWK_PROCESS_MODEL_MULTIPLE_SECONDARY
        setting, each WebView should have own process, as well as the network process
        should exist.

        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp:
        (EWK2UnitTest::EWK2UnitTestBase::EWK2UnitTestBase):
        (EWK2UnitTest::EWK2UnitTestBase::SetUp):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (EWK2ContextTestMultipleProcesses::EWK2ContextTestMultipleProcesses):
        (TEST_F):

2014-03-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r166296 and r166331.
        https://bugs.webkit.org/show_bug.cgi?id=130822

        caused some crashes and frequent assertion failures, and the
        fix is going to take a little while (Requested by thorton on
        #webkit).

        Reverted changesets:

        "[iOS WebKit2] Flush all surfaces after painting into all of
        them, instead of after painting into each one"
        https://bugs.webkit.org/show_bug.cgi?id=130768
        http://trac.webkit.org/changeset/166296

        "Assertion failure in RemoteLayerBackingStore::flush"
        https://bugs.webkit.org/show_bug.cgi?id=130810
        http://trac.webkit.org/changeset/166331

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        Blind speculative iOS build fix.

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

2014-03-26  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] <rdar://problem/16265272> REGRESSION (WebKit2): Some pages appear blank until you scroll
        https://bugs.webkit.org/show_bug.cgi?id=130819

        Reviewed by Tim Horton.

        When loading a new page, we never define the unobscured rect and exposed rect on the new frame.
        As a result, there is nothing to render.

        It uses to work thanks to dumb luck and a bug in Safari updating the visibleContentRects from
        the UIProcess. Now that the bug is gone, "dumb luck" is not reliable enough to get the content rects :)

        What this patch does is save if we have ever received new rects from the UI. If we have not, create them
        based on the minimum layout size. This works because we know Safari shows the minimum layout size by default
        and will tell us if it changes the obscured rects.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::didCommitLoad):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportConfigurationChanged):
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Add a _WKScriptWorld class
        https://bugs.webkit.org/show_bug.cgi?id=130817

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKScriptWorld.h: Added.
        * UIProcess/API/Cocoa/_WKScriptWorld.mm: Added.
        (generateWorldID):
        (+[_WKScriptWorld defaultWorld]):
        (-[_WKScriptWorld init]):
        (-[_WKScriptWorld _initWithWorldID:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Rename a delegate method to -webView:didFinishNavigation:
        https://bugs.webkit.org/show_bug.cgi?id=130814

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/Cocoa/NavigationState.h:
        * UIProcess/Cocoa/NavigationState.mm:
        (WebKit::NavigationState::setNavigationDelegate):
        (WebKit::NavigationState::LoaderClient::didFinishLoadForFrame):

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Crashes on swipe
        <rdar://problem/16440867>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        Get the IOSurfaceRef from the WebCore::IOSurface.

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the build: include UIKit headers inside the iOS #ifdef.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Hook up -webkit-overflow-scrolling:touch for iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=130809

        Reviewed by Tim Horton.

        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h:
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm:
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateAfterChildren):
        Set the content size of the UIScrollVIew based on the geometry.
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm:
        (WebKit::RemoteLayerTreeHost::createLayer): Make a UIScrollView if the
        layer properties tell us that we have the scrolling behavior.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        We need to allow user interaction in the _rootContentView so that events get to
        nested UIScrollViews (this could be optimized in future).
        * UIProcess/mac/RemoteLayerTreeHost.h:
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::createLayer): Need to pass RemoteLayerTreeTransaction::LayerProperties
        in so we can get at the custom behavior.

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Add -[WKWebView stopLoading]
        https://bugs.webkit.org/show_bug.cgi?id=130812

        Reviewed by Tim Horton.

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

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        Assertion failure in RemoteLayerBackingStore::flush
        https://bugs.webkit.org/show_bug.cgi?id=130810
        <rdar://problem/16439276>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::flush):
        We don't always have backing store to flush, if platformCALayerDrawsContent() is false.
        We also can't assert that we have a back surface, because the very first paint will not.

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadClient::didFail() and DownloadClient::didCancel()
        https://bugs.webkit.org/show_bug.cgi?id=130805

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKDownloadDelegate.h:
        * UIProcess/Cocoa/DownloadClient.h:
        * UIProcess/Cocoa/DownloadClient.mm:
        (WebKit::DownloadClient::DownloadClient):
        (WebKit::DownloadClient::didFail):
        (WebKit::DownloadClient::didCancel):

2014-03-26  Cody Krieger  <cjk@apple.com>

        -[WKWebProcessPlugInNodeHandle HTMLInputElementIsUserEdited] and -HTMLTextAreaElementIsUserEdited do not return the correct values.

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

        Reviewed by Dan Bernstein.

        The existing implementations of these methods are mis-cased
        ("HTMLInputELementIsUserEdited" and "HTMLTextAreaELementIsUserEdited" —
        note the "EL" in both cases). This results in us getting
        auto-synthesized getters for the HTMLInputElementIsUserEdited and
        HTMLTextAreaElementIsUserEdited properties, which will return NO
        unconditionally.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
        Fix the capitalization of -HTMLInputElementIsUserEdited and
        -HTMLTextAreaElementIsUserEdited.

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadProxy::cancel()
        https://bugs.webkit.org/show_bug.cgi?id=130799

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload cancel]):

2014-03-26  Timothy Hatcher  <timothy@apple.com>

        Propagate the hiddenFromInspector flag on ResourceRequest in
        places when a new request a made or passed between processes.

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

        Reviewed by Joseph Pecoraro.

        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest): Use updateFromDelegatePreservingOldProperties.
        * Shared/WebCoreArgumentCoders.cpp:
        (IPC::ArgumentCoder<ResourceRequest>::encode): Added hiddenFromInspector support.
        (IPC::ArgumentCoder<ResourceRequest>::decode): Ditto.
        * WebProcess/InjectedBundle/InjectedBundlePageResourceLoadClient.cpp:
        (WebKit::InjectedBundlePageResourceLoadClient::willSendRequestForFrame): Ditto.

2014-03-26  Andy Estes  <aestes@apple.com>

        [Cocoa] Expose DownloadProxy::request()
        https://bugs.webkit.org/show_bug.cgi?id=130796

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKDownload.h:
        * UIProcess/API/Cocoa/_WKDownload.mm:
        (-[_WKDownload request]):

2014-03-26  Anders Carlsson  <andersca@apple.com>

        Pass a real FrameLoadRequest to Chrome::createWindow
        https://bugs.webkit.org/show_bug.cgi?id=130795

        Reviewed by Dan Bernstein.

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

2014-03-26  Jeremy Jones  <jeremyj@apple.com>

        Implement hasLiveStreamingContent property in WebAVPlayerController
        https://bugs.webkit.org/show_bug.cgi?id=128684

        Reviewed by Simon Fraser.

        Plumb through the seekable ranges to the fullscreen interface.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Add declaration for setSeekableRangesVector()

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Add interface SetSeekableRangesVector()

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setSeekableRangesVector):
        Add setSeekableRangesVector that translates the vector into a TimeRanges and calls setSeekableRanges()

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Add setSeekableRanges()

        * WebProcess/ios/WebVideoFullscreenManager.mm:
        (WebKit::WebVideoFullscreenManager::setSeekableRanges):
        setSeekableRanges() converts TimeRanges to Vector and calls SetSeekableRangesVector()

2014-03-26  Simon Fraser  <simon.fraser@apple.com>

        Add a custom behavior flag to GraphicsLayer, piped down to PlatformCALayer, for scrolling layers
        https://bugs.webkit.org/show_bug.cgi?id=130778

        Reviewed by Tim Horton.

        Make it possible to put a "custom behavior" flag on a layer so that,
        with UI-side compositing, we know to create a specific type of
        layer or view for that GraphicsLayer.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
        (WebKit::dumpChangedLayers):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::customBehavior):
        (PlatformCALayerRemote::updateCustomBehavior):
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:

2014-03-26  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove shape-inside support
        https://bugs.webkit.org/show_bug.cgi?id=130698

        Reviewed by David Hyatt.

        * Configurations/FeatureDefines.xcconfig:

2014-03-26  Tim Horton  <timothy_horton@apple.com>

        [iOS WebKit2] Flush all surfaces after painting into all of them, instead of after painting into each one
        https://bugs.webkit.org/show_bug.cgi?id=130768
        <rdar://problem/16421471>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        Add flush(), which synchronously flushes painting operations on the underlying backing store.
        Factor clearBackingStore() out of ensureBackingStore/display, which releases our reference to underlying backing store.
        Add two members for storing the back surface and front buffer context until flush() is called.
                - We need to keep the back surface alive because the CGImageRef created from it is referenced by
                the front surface's drawing queue, and won't be freed until said queue is flushed. If we release
                the back surface (and its associated CGContextRef) *before* the CGImageRef is freed, we will
                do an expensive readback of the surface.
                - When not using accelerated drawing, we need to keep the front buffer's CGContextRef around
                until the flush occurs so that we can avoid re-creating it in order to perform the flush. This
                happens automatically in the accelerated drawing case via WebCore::IOSurface.

        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::ensureBackingStore):
        (RemoteLayerBackingStore::clearBackingStore):
        (RemoteLayerBackingStore::display):
        Factor clearBackingStore() out of ensureBackingStore() and display().
        Update a comment about the above performance gotcha.
        Store the current back surface/front buffer context.

        (RemoteLayerBackingStore::drawInContext):
        Don't flush the context immediately after painting.

        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        Move things around to reduce duplicated code.

        (RemoteLayerBackingStore::flush):
        Flush the current front surface/buffer's context.
        Clear the new pending-flush members.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::flushBackingStoreChangesInTransaction):
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Crawl through all of the valid changed backing stores in the transaction and flush them.
        Remove a completely useless assertion.

2014-03-25  Simon Fraser  <simon.fraser@apple.com>

        Add a new type of scrolling tree node for overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=130763

        Reviewed by Tim Horton.

        Prepare for overflow scrolling via the scrolling tree by adding
        a new scrolling node type for overflow:scroll nodes. Mostly
        this is a new ScrollingNodeType that gets mapped to the same
        scrolling state nodes and scrolling nodes, but iOS creates
        state and scrolling nodes specific to overflow:scroll.
        
        Change the type checking on nodes to use virtual functions instead
        of just checking the node type, to allow the macros to work with
        the new scrolling node type.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (WebKit::encodeNodeAndDescendants):
        (WebKit::RemoteScrollingCoordinatorTransaction::decode):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/Scrolling/RemoteScrollingTree.cpp:
        (WebKit::RemoteScrollingTree::createNode):
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h.
        * UIProcess/Scrolling/ios/ScrollingTreeOverflowScrollingNodeIOS.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingTreeFixedNode.h.
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::create):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::ScrollingTreeOverflowScrollingNodeIOS):
        (WebKit::ScrollingTreeOverflowScrollingNodeIOS::~ScrollingTreeOverflowScrollingNodeIOS):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm:
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-26  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Removing the remaining Automake cruft.

        * GNUmakefile.list.am: Removed.

2014-03-25  Pratik Solanki  <psolanki@apple.com>

        Remove PLATFORM(IOS) from NetworkProcessMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=130751

        Reviewed by Alexey Proskuryakov.

        Code in NetworkProcessMac.mm is guarded by PLATFORM(MAC) and so is not compiled on iOS.
        Having PLATFORM(IOS) code in this file is unnecessary and confusing.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::initializeProcessName):
        (WebKit::overrideSystemProxies):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add a UI delegate callback for handling window.open
        https://bugs.webkit.org/show_bug.cgi?id=130757

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKUIDelegate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/Cocoa/UIClient.h:
        * UIProcess/Cocoa/UIClient.mm:
        (WebKit::UIClient::setDelegate):
        (WebKit::UIClient::createNewPage):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Move stopLoading: back for now.

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

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Change toolbarVisibility back to toolbarsVisibility
        https://bugs.webkit.org/show_bug.cgi?id=130749

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures _initWithWindowFeatures:WebCore::]):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Pass the source frame to the CreateNewPage message
        https://bugs.webkit.org/show_bug.cgi?id=130752

        Reviewed by Tim Horton.

        * UIProcess/API/APIUIClient.h:
        (API::UIClient::createNewPage):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::createNewPage):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::createWindow):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add a WebFrame::fromCoreFrame static member function and use it where possible
        https://bugs.webkit.org/show_bug.cgi?id=130744

        Reviewed by Tim Horton.

        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
        * WebProcess/InjectedBundle/DOM/InjectedBundleNodeHandle.cpp:
        (WebKit::InjectedBundleNodeHandle::documentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlFrameElementContentFrame):
        (WebKit::InjectedBundleNodeHandle::htmlIFrameElementContentFrame):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
        * WebProcess/InjectedBundle/InjectedBundleDOMWindowExtension.cpp:
        (WebKit::InjectedBundleDOMWindowExtension::frame):
        * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp:
        (WebKit::InjectedBundleHitTestResult::frame):
        (WebKit::InjectedBundleHitTestResult::targetFrame):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::webPage):
        (WebKit::PluginView::performFrameLoadURLRequest):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::focusedElementChanged):
        (WebKit::WebChromeClient::focusedFrameChanged):
        (WebKit::WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::WebChromeClient::runJavaScriptAlert):
        (WebKit::WebChromeClient::runJavaScriptConfirm):
        (WebKit::WebChromeClient::runJavaScriptPrompt):
        (WebKit::WebChromeClient::print):
        (WebKit::WebChromeClient::exceededDatabaseQuota):
        (WebKit::WebChromeClient::runOpenPanel):
        * WebProcess/WebCoreSupport/WebEditorClient.cpp:
        (WebKit::WebEditorClient::textFieldDidBeginEditing):
        (WebKit::WebEditorClient::textFieldDidEndEditing):
        (WebKit::WebEditorClient::textDidChangeInTextField):
        (WebKit::WebEditorClient::textDidChangeInTextArea):
        (WebKit::WebEditorClient::doTextFieldCommandFromEvent):
        (WebKit::WebEditorClient::textWillBeDeletedInTextField):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::WebFrameLoaderClient::dispatchWillSendSubmitEvent):
        (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebProcess/WebPage/WebFrame.cpp:
        (WebKit::WebFrame::fromCoreFrame):
        (WebKit::WebFrame::contentsAsString):
        (WebKit::WebFrame::parentFrame):
        (WebKit::WebFrame::childFrames):
        (WebKit::WebFrame::frameForContext):
        (WebKit::WebFrame::webArchiveData):
        * WebProcess/WebPage/WebFrame.h:

2014-03-25  Jeffrey Pfau  <jpfau@apple.com>

        [WK2] Schemes registered as cache partitioned are not properly registered in new web processes
        https://bugs.webkit.org/show_bug.cgi?id=130739

        Reviewed by Anders Carlsson.

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

2014-03-25  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Inspector View Indication Support
        https://bugs.webkit.org/show_bug.cgi?id=130709

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKInspectorIndicationView initWithFrame:]):
        (-[WKContentView isShowingInspectorIndication]):
        (-[WKContentView setShowingInspectorIndication:]):
        (-[WKContentView _didCommitLayerTree:WebKit::]):
        When indicating include a simple tinted UIView over the content.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _showInspectorIndication]):
        (-[WKWebView _hideInspectorIndication]):
        Have the content view show or hide an indication.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::showInspectorIndication):
        (WebKit::PageClientImpl::hideInspectorIndication):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::showInspectorIndication):
        (WebKit::WebPageProxy::hideInspectorIndication):
        Pass WebProcess indication message up to the WKWebView.

        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::indicate):
        (WebKit::WebInspectorClient::hideIndication):
        * WebProcess/WebCoreSupport/WebInspectorClient.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::indicate):
        (WebKit::WebPage::hideIndication):
        Pass WebCore / remote inspector indication message up to UIProcess.

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add more properties to WKWindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=130738

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWindowFeatures.h:
        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
        (-[WKWindowFeatures _initWithWindowFeatures:WebCore::]):
        (-[WKWindowFeatures menuBarVisibility]):
        (-[WKWindowFeatures statusBarVisibility]):
        (-[WKWindowFeatures toolbarsVisibility]):
        (-[WKWindowFeatures allowsResizing]):

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Fix iOS build.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        Make WKIBActions OS X only for now.

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a WKWindowFeatures class
        https://bugs.webkit.org/show_bug.cgi?id=130733

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWindowFeatures.h: Added.
        * UIProcess/API/Cocoa/WKWindowFeatures.mm: Added.
        (-[WKWindowFeatures _initWithWindowFeatures:WebCore::]):
        (-[WKWindowFeatures x]):
        (-[WKWindowFeatures y]):
        (-[WKWindowFeatures width]):
        (-[WKWindowFeatures height]):
        * UIProcess/API/Cocoa/WKWindowFeaturesInternal.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-25  Anders Carlsson  <andersca@apple.com>

        Add goBack: and goForward: IBActions and move stopLoading: to a new WKIBActions category on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130732

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView goBack]):
        (-[WKWebView goForward]):
        (-[WKWebView validateUserInterfaceItem:]):
        (-[WKWebView goBack:]):
        (-[WKWebView goForward:]):
        (-[WKWebView stopLoading:]):

2014-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * GNUmakefile.am: Removed.
        * WebKit2Prefix.h: Removed references to the autotools configure file.
        * config.h: Ditto.

2014-03-25  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Add NETWORK_PROCESS build option
        https://bugs.webkit.org/show_bug.cgi?id=130131

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Add file needed to build with NETWORK_PROCESS enabled.

2014-03-24 Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL][WK2] Add an API to set process model
        https://bugs.webkit.org/show_bug.cgi?id=130133

        Reviewed by Gyuyoung Kim.

        Implement an API to set and get process model in ewk_context.
        By default process model enum value is set to EWK_PROCESS_MODEL_SHARED_SECONDARY
        which keeps current behaviour. Setting EWK_PROCESS_MODEL_MULTIPLE_SECONDARY
        will make each web view use separate web process, also enables network process.

        * UIProcess/API/efl/ewk_context.cpp:
        (toWKProcessModel):
        (EwkContext::setProcessModel):
        (toEwkProcessModel):
        (EwkContext::processModel):
        (ewk_context_process_model_set):
        (ewk_context_process_model_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        (TEST_F):

2014-03-24  Chris Fleizach  <cfleizach@apple.com>

        AX: hit-testing doesn't always work correctly with WK2
        https://bugs.webkit.org/show_bug.cgi?id=130706

        Reviewed by Simon Fraser.

        Accessibility code was trying to do screenToRootView itself, and in 
        some cases with embedded WK2 views that did not work.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2014-03-24  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] SpinLock are not initialized by default, ViewUpdateDispatcher is missing an initializer
        https://bugs.webkit.org/show_bug.cgi?id=130705

        Reviewed by Simon Fraser.

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

2014-03-24  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Dictation support.
        https://bugs.webkit.org/show_bug.cgi?id=130622
        <rdar://problem/15337316>

        Reviewed by Benjamin Poulain.

        Adding support for dictation on iOS. There are two main types of interactions
        with the dictation system:
        - initial request for context, which consists in retrieving the selected text
        and 5 words before the selection and 5 words after, if available.
        - insertion of recognized chunks of text, providing the text
        to replace.
    
        * UIProcess/AutoCorrectionCallback.h:
        (WebKit::DictationContextCallback::create):
        (WebKit::DictationContextCallback::~DictationContextCallback):
        (WebKit::DictationContextCallback::performCallbackWithReturnValue):
        (WebKit::DictationContextCallback::invalidate):
        (WebKit::DictationContextCallback::DictationContextCallback):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView replaceDictatedText:withText:]):
        (-[WKContentView requestDictationContext:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::dictationContextCallback):
        (WebKit::WebPageProxy::replaceDictatedText):
        (WebKit::WebPageProxy::requestDictationContext):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::requestDictationContext):
        (WebKit::WebPage::replaceDictatedText):

2014-03-24  Andy Estes  <aestes@apple.com>

        Yet another iOS build fix, for the 32-bit build this time.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::setUpDownloadClient):

2014-03-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r165872): Double-applying device scale to snapshots
        https://bugs.webkit.org/show_bug.cgi?id=130697
        <rdar://problem/16396629>

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::scaledSnapshotWithOptions):
        Drive-by, make scaledSnapshotWithOptions respect SnapshotOptionsExcludeDeviceScaleFactor.

        (WebKit::WebPage::snapshotAtSize):
        Divide the device scale out of the scale factor

        * WebProcess/WebPage/WebPage.h:
        Rename the scale argument to scaledSnapshotWithOptions to clarify
        that it is an additional scale on top of the device scale.

2014-03-24  Brent Fulgham  <bfulgham@apple.com>

        Activate WebVTT Tests Once Merging is Complete
        https://bugs.webkit.org/show_bug.cgi?id=130420

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Turn on ENABLE(WEBVTT_REGIONS)

2014-03-24  Andy Estes  <aestes@apple.com>

        Fix the iOS build.

        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::setUpDownloadClient):
        * UIProcess/Cocoa/DownloadClient.mm:

2014-03-24  Mark Rowe  <mrowe@apple.com>

        Build fix after r166186.

        * UIProcess/Cocoa/DownloadClient.mm:

2014-03-24  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Make updates on ViewUpdateDispatcher less heavy
        https://bugs.webkit.org/show_bug.cgi?id=130626

        Reviewed by Darin Adler.

        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h:

2014-03-24  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Micro-optimize view state updates on the UIProcess side
        https://bugs.webkit.org/show_bug.cgi?id=130631

        Reviewed by Darin Adler.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (contentZoomScale):
        [UIScrollView zoomScale] is not fast enough for -[WKWebView _updateVisibleContentRects]. Since we know what the zoom view is,
        make a fast version hardcoding that.

        (-[WKWebView _updateScrollViewBackground]):
        (-[WKWebView _zoomToPoint:WebCore::atScale:]):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _zoomToRect:WebCore::withOrigin:WebCore::fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKWebView _updateVisibleContentRects]):
        * UIProcess/ios/WKContentView.mm:
        (fixedPositionRectFromExposedRect):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):

2014-03-24  Dean Jackson  <dino@apple.com>

        Remove WebGL asset entitlement
        https://bugs.webkit.org/show_bug.cgi?id=130685

        Reviewed by Simon Fraser.

        No longer necessary on iOS.

        * Configurations/WebContent-iOS.entitlements:

2014-03-24  Andy Estes  <aestes@apple.com>

        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=129322

        Reviewed by Anders Carlsson.

        Based on an original patch by Yongjun Zhang  <yongjun_zhang@apple.com>.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * Shared/Downloads/ios/DownloadIOS.mm:
        (WebKit::dispatchOnMainThread):
        (WebKit::toDownload):
        (WebKit::setUpDownloadClient):
        (WebKit::Download::startWithHandle):
        * UIProcess/API/APIDownloadClient.h:
        (API::DownloadClient::~DownloadClient):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient):
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _downloadDelegate]):
        (-[WKProcessPool _setDownloadDelegate:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/_WKDownload.h: Added.
        * UIProcess/API/Cocoa/_WKDownload.mm: Added.
        (WebKit::wrapper):
        (WebKit::createAPIDownloadClient):
        (-[_WKDownload dealloc]):
        (-[_WKDownload API::]):
        * UIProcess/API/Cocoa/_WKDownloadDelegate.h: Added.
        * UIProcess/API/Cocoa/_WKDownloadInternal.h: Added.
        * UIProcess/Cocoa/DownloadClient.h: Added.
        * UIProcess/Cocoa/DownloadClient.mm: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-24  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [EFL][WK2] Buildfix after r166159.

        Reviewed by Csaba Osztrogonác.

        * UIProcess/API/efl/ewk_settings.cpp:
        (ewk_settings_file_access_from_file_urls_allowed_set):
        (ewk_settings_file_access_from_file_urls_allowed_get):

2014-03-24  Jinwoo Song  <jinwoo7.song@samsung.com>

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

        Reviewed by Gyuyoung Kim.

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

        Original-author: Christophe Dumez <ch.dumez@sisa.samsung.com>

        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/ewk_settings.cpp:
        (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):
        (ewk_settings_encoding_detector_enabled_set):
        (ewk_settings_encoding_detector_enabled_get):
        (ewk_settings_preferred_minimum_contents_width_set):
        (ewk_settings_preferred_minimum_contents_width_get):
        (ewk_settings_offline_web_application_cache_enabled_set):
        (ewk_settings_offline_web_application_cache_enabled_get):
        (ewk_settings_scripts_can_open_windows_set):
        (ewk_settings_scripts_can_open_windows_get):
        (ewk_settings_local_storage_enabled_set):
        (ewk_settings_local_storage_enabled_get):
        (ewk_settings_plugins_enabled_set):
        (ewk_settings_plugins_enabled_get):
        (ewk_settings_default_font_size_set):
        (ewk_settings_default_font_size_get):
        (ewk_settings_private_browsing_enabled_set):
        (ewk_settings_private_browsing_enabled_get):
        (ewk_settings_text_autosizing_enabled_set):
        (ewk_settings_text_autosizing_enabled_get):
        (ewk_settings_spatial_navigation_enabled_set):
        (ewk_settings_spatial_navigation_enabled_get):
        (EwkSettings::setDefaultTextEncodingName):
        * UIProcess/API/efl/ewk_settings_private.h:
        (EwkSettings::EwkSettings):
        (EwkSettings::preferences):

2014-03-24  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WK2] Guard NetscapePluginModule methods used in PluginInfoCache that are specific to X11 architecture
        https://bugs.webkit.org/show_bug.cgi?id=130663

        Reviewed by Carlos Garcia Campos.

        The two used methods are specific to the X11 plugin architecture and are not declared when building for a
        Wayland-only configuration. Guarding them prevents build failures, but does not ensure proper functionality
        which isn't a problem anyway since there's no support yet for Netscape plugins on Wayland.

        * UIProcess/Plugins/gtk/PluginInfoCache.cpp:
        (WebKit::PluginInfoCache::getPluginInfo): Guard NetscapePluginModule::parseMIMEDescription with PLUGIN_ARCHITECTURE(X11).
        (WebKit::PluginInfoCache::updatePluginInfo): Ditto for NetscapePluginModule::buildMIMEDescription.

2014-03-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Convert some more OwnPtr/PassOwnPtr to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=130662

        Reviewed by Gyuyoung Kim.

        Replace uses of PassOwnPtr/OwnPtr with std::unique_ptr in remained WebKit2/Efl specific code.

        * UIProcess/API/efl/EwkView.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (getDatabaseOriginsCallback):
        * UIProcess/API/efl/ewk_error_private.h:
        * UIProcess/efl/DownloadManagerEfl.cpp:
        (WebKit::DownloadManagerEfl::didFail):
        * UIProcess/efl/InputMethodContextEfl.h:
        (WebKit::InputMethodContextEfl::create):
        * UIProcess/efl/PageLoadClientEfl.cpp:
        (WebKit::PageLoadClientEfl::didFailLoadWithErrorForFrame):
        (WebKit::PageLoadClientEfl::didFailProvisionalLoadWithErrorForFrame):

2014-03-23  Hyowon Kim  <hw1008.kim@samsung.com>

        Move all EFL typedefs into EflTypedefs.h.
        https://bugs.webkit.org/show_bug.cgi?id=130511

        Reviewed by Gyuyoung Kim.

        * Shared/API/c/efl/WKArrayEfl.h: Remove EFL typedefs.
        * UIProcess/API/efl/EwkView.h: Ditto.

2014-03-23  Jinwoo Song  <jinwoo7.song@samsung.com>

        [WK2] Refine WebKit2 BatteryStatus code
        https://bugs.webkit.org/show_bug.cgi?id=130573

        Reviewed by Anders Carlsson.

        Refinements
         - Return PassRef instead of PassRefPtr in create methods
         - Use auto instead of iterator

        * UIProcess/WebBatteryManagerProxy.cpp:
        (WebKit::WebBatteryManagerProxy::create):
        * UIProcess/WebBatteryManagerProxy.h:
        * UIProcess/efl/BatteryProvider.cpp:
        (BatteryProvider::create):
        * UIProcess/efl/BatteryProvider.h:
        * WebProcess/Battery/WebBatteryManager.cpp:
        (WebKit::WebBatteryManager::didChangeBatteryStatus):
        (WebKit::WebBatteryManager::updateBatteryStatus):

2014-03-23  Sam Weinig  <sam@webkit.org>

        Simplify the HTMLConverter interface (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=130654

        Reviewed by Darin Adler.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::performDictionaryLookupForRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPage::performDictionaryLookupAtLocation):
        (WebKit::WebPage::performDictionaryLookupForSelection):
        (WebKit::WebPage::performDictionaryLookupForRange):

2014-03-23  David Kilzer  <ddkilzer@apple.com>

        WebKit::resistanceForDelta() truncates 'scaleDistance' to integer value using abs()
        <http://webkit.org/b/130651>

        Reviewed by Darin Adler.

        Fixes the following build failure with trunk clang:

            WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:112:28: error: using integer absolute value function 'abs' when argument is of floating point type [-Werror,-Wabsolute-value]
                double scaleDistance = abs(limit - currentScale);
                                       ^
            WebKit2/UIProcess/mac/ViewGestureControllerMac.mm:112:28: note: use function 'fabs' instead
                double scaleDistance = abs(limit - currentScale);
                                       ^~~
                                       fabs

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::resistanceForDelta): Use fabs() instead of abs().

2014-03-23  Simon Fraser  <simon.fraser@apple.com>

        Clean up #includes by geometry classes
        https://bugs.webkit.org/show_bug.cgi?id=130645

        Reviewed by Andreas Kling.

        Pulling in <wtf/Vector.h> and <wtf/PrintStream.h> in the simple geometry
        classes brings in a lot of additional headers. Fix by adding a new
        GeometryUtilities file so that the basic files don't need Vector,
        and including GeometryUtilities.h where necessary.
        
        Also forward declare PrintStream.h and only bring in the header
        in implementation files.

        * Shared/UpdateInfo.h:
        * UIProcess/BackingStore.h:
        * UIProcess/CoordinatedGraphics/PageViewportController.h:
        * UIProcess/FindIndicator.cpp:
        * UIProcess/mac/WKPrintingView.h:

2014-03-23  Simon Fraser  <simon.fraser@apple.com>

        Clean up #includes by geometry classes
        https://bugs.webkit.org/show_bug.cgi?id=130645

        Reviewed by Andreas Kling.

        Pulling in <wtf/Vector.h> and <wtf/PrintStream.h> in the simple geometry
        classes brings in a lot of additional headers. Fix by adding a new
        GeometryUtilities file so that the basic files don't need Vector,
        and including GeometryUtilities.h where necessary.
        
        Also forward declare PrintStream.h and only bring in the header
        in implementation files.

        * UIProcess/BackingStore.h:
        * UIProcess/FindIndicator.cpp:
        * UIProcess/mac/WKPrintingView.h:

2014-03-22  Alexey Proskuryakov  <ap@apple.com>

        Assertions in WebPage::rangeFromEditingRange when requested range location is NSNotFound
        https://bugs.webkit.org/show_bug.cgi?id=130633
        <rdar://problem/16397583>

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView firstRectForCharacterRange:completionHandler:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        Return NSZeroRect, like NSTextView does for any locations that are out of bounds.
        There is no need for a round trip to WebProcess in this case.

2014-03-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Reduce the tiling coverage to the current rect and 1 tile size ahead
        https://bugs.webkit.org/show_bug.cgi?id=130555

        Reviewed by Simon Fraser.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::operator==):
        * UIProcess/ios/WKContentView.mm:
        (WebKit::HistoricalKinematicData::HistoricalKinematicData):
        (WebKit::HistoricalKinematicData::velocityForNewData):
        (WebKit::HistoricalKinematicData::clear):
        (WebKit::HistoricalKinematicData::append):
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r165356): Predictive Chinese input is broken
        https://bugs.webkit.org/show_bug.cgi?id=130619

        Reviewed by Enrica Casucci.

        * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::executeKeypressCommands):
        Like after insertText, we are no longer in an intermediate state after executeKeypressCommands.
        Make sure that we don't call -discardMarkedText the next time we get a non-intermediate
        state with closed composition.

2014-03-21  Sam Weinig  <sam@webkit.org>

        [WebKit2] Implement NetworkingContext::sourceApplicationAuditData() for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130528

        Reviewed by Tim Horton.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::getAuditToken):
        Expose the audit data if available. 

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        Pass the audit data corresponding to the UIProcess.

        * Configurations/Network-iOS.entitlements: Copied from Configurations/WebContent-iOS.entitlements.
        * Configurations/NetworkProcess.xcconfig:
        * Configurations/NetworkService.Development.xcconfig:
        * Configurations/NetworkService.xcconfig:
        * Configurations/WebContent-iOS.entitlements:
        Add entitlement allowing the audit data to be used.

2014-03-21  Tim Horton  <timothy_horton@apple.com>

        Always retrieve the screen scale factor from WKSI
        <rdar://problem/16329679>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        (-[WKContentView _updateForScreen:]):
        Use WKGetScreenScaleFactor/WKGetScaleFactorForScreen.

2014-03-21  Yongjun Zhang  <yongjun_zhang@apple.com>

        [Webkit2] Add APIDownloadClient for download support.
        https://bugs.webkit.org/show_bug.cgi?id=130484

        Add API::DownloadClient to WebContext and get rid of WebDownloadClient.

        Reviewed by Anders Carlsson.

        * UIProcess/API/APIDownloadClient.h: Added.
        (API::DownloadClient::~DownloadClient):
        (API::DownloadClient::didStart):
        (API::DownloadClient::didReceiveAuthenticationChallenge):
        (API::DownloadClient::didReceiveResponse):
        (API::DownloadClient::didReceiveData):
        (API::DownloadClient::shouldDecodeSourceDataOfMIMEType):
        (API::DownloadClient::decideDestinationWithSuggestedFilename):
        (API::DownloadClient::didCreateDestination):
        (API::DownloadClient::didFinish):
        (API::DownloadClient::didFail):
        (API::DownloadClient::didCancel):
        (API::DownloadClient::processDidCrash):
        * UIProcess/API/C/WKContext.cpp:
        (WKContextSetDownloadClient): Move the original WebDownloadClient methods to a local class
            DownloadClient and set up the downloadClient for WebContext.
        * UIProcess/Downloads/DownloadProxy.cpp:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setDownloadClient):
        * UIProcess/WebContext.h:
        (WebKit::WebContext::downloadClient):
        * UIProcess/WebDownloadClient.cpp: Removed.
        * UIProcess/WebDownloadClient.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-21  Alexey Proskuryakov  <ap@apple.com>

        ASSERTION FAILED: event == [NSApp currentEvent] hitting Command-+
        https://bugs.webkit.org/show_bug.cgi?id=130526
        <rdar://problem/16371612> 

        This was fixed yesterday for sync code path, landing the same this for async one.

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

2014-03-21  Pratik Solanki  <psolanki@apple.com>

        Add callbacks in WebKit2 Cocoa API for page load testing
        https://bugs.webkit.org/show_bug.cgi?id=130569

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
        (didFirstVisuallyNonEmptyLayoutForFrame):
        (didHandleOnloadEventsForFrame):
        (setUpPageLoaderClient):
        (willSendRequestForFrame):
        (didInitiateLoadForResource):
        (didFinishLoadForResource):
        (didFailLoadForResource):
        (setUpResourceLoadClient):

2014-03-21  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Remove Ewk_Error parameter from some async callbacks
        https://bugs.webkit.org/show_bug.cgi?id=130567

        Reviewed by Gyuyoung Kim.

        WebKit2 internally uses GenericCallbacks for several APIs such as WKKeyValueStorageManagerGetKeyValueStorageOrigins.
        But only few callbacks really return errors.

        This patch removes Ewk_Error parameters from these callbacks not to make
        the confusion for application developers.

        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (getAcceptPolicyCallback):
        (getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (getDatabaseOriginsCallback):
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (getStorageOriginsCallback):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (EWK2CookieManagerTest::getAcceptPolicyCallback):
        (EWK2CookieManagerTest::getHostnamesWithCookiesCallback):
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        (EWK2DatabaseManagerTest::databaseOriginsCallback):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::getStorageOriginsCallback):

2014-03-21  Darin Adler  <darin@apple.com>

        Improve idiom used for string building in a few places
        https://bugs.webkit.org/show_bug.cgi?id=130561

        Reviewed by Andreas Kling.

        * Shared/mac/ChildProcessMac.mm:
        (WebKit::ChildProcess::initializeSandbox): Use a more efficient idiom for string
        concatenation.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::WebInspectorProxy::createInspectorPage): Use a StringBuilder.

2014-03-20  Hyowon Kim  <hw1008.kim@samsung.com>

        Move to using std::unique_ptr for EFL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129853

        Reviewed by Gyuyoung Kim.

        EflUniquePtr is a template alias of std::unique_ptr
        with a custom deleter for each Efl Objects, which is motivated by GUniquePtr.
        This patch replaces uses of OwnPtr and PassOwnPtr for Efl objects with EflUniquePtr.

        * Platform/Module.h:
        * Platform/efl/ModuleEfl.cpp:
        (WebKit::Module::load):
        * UIProcess/API/efl/EwkView.cpp:
        (EwkView::EwkView):
        * UIProcess/API/efl/EwkView.h:
        * UIProcess/efl/InputMethodContextEfl.cpp:
        (WebKit::InputMethodContextEfl::InputMethodContextEfl):
        (WebKit::InputMethodContextEfl::createIMFContext):
        * UIProcess/efl/InputMethodContextEfl.h:
        (WebKit::InputMethodContextEfl::create):

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get CMake to find Freetype2 properly
        https://bugs.webkit.org/show_bug.cgi?id=130150

        Reviewed by Martin Robinson.

        Newer versions of CMake are not able to find Freetype2 correctly.
        FindFreetype2.cmake checks for the version number in freetype.h header, since it seems that bug exists in
        freetype2 repo, because a completely different version number is found in freetype2.pc.

        * PlatformEfl.cmake:

2014-03-20  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Suppress errors about using gdk_threads_enter gdk_threads_leave
        https://bugs.webkit.org/show_bug.cgi?id=130517

        Reviewed by Sergio Villar Senin.

        * UIProcess/API/gtk/WebKitWebView.cpp: Use GCC suppression to suppress errors about deprecations.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: Ditto.

2014-03-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] tests of test_ewk2_cookie_manager are flaky
        https://bugs.webkit.org/show_bug.cgi?id=130498

        Reviewed by Gyuyoung Kim.

        Loaded web page before calling getAcceptPolicy() to guarantee that webprocess
        or networkprocess was launched and registered WebCookieManager.

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

2014-03-20  Commit Queue  <commit-queue@webkit.org>

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

        broke page loading on all cocoa platforms (Requested by
        thorton on #webkit).

        Reverted changeset:

        "[WebKit2] Implement
        NetworkingContext::sourceApplicationAuditData() for WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=130528
        http://trac.webkit.org/changeset/165985

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        Fix a long-standing typo that's now breaking USE(ASYNC_NSTEXTINPUTCLIENT) build.

        Rubber-stamped by Tim Horton.

        * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::cancelComposition):
        Use a correct type for reply (it's really the same type, but ConfirmComposition
        is behind an ifdef, and not available).

2014-03-20  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] typing and deleting text lags behind the caret movement on google.com.
        https://bugs.webkit.org/show_bug.cgi?id=130544
        <rdar://problem/16380296>

        Reviewed by Tim Horton.

        On iOS the selection is drawn in the UIProcess. If the WebProcess is
        processing multiple requests within the same runloop, the caret could be
        updated in the UIProcess before the WebProcess has had a chance to paint.
        This change synchronizes the selection drawing with the tile update.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _didCommitLayerTree:WebKit::]):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _selectionChanged]):
        (-[WKContentView _updateChangedSelection]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::didChangeSelection):

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        Generalize WebInspector check in maybeInitializeSandboxExtensionHandle().
        https://bugs.webkit.org/show_bug.cgi?id=130079
        <rdar://problem/16286683>

        Reviewed by Anders Carlsson.

        * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
        Perform an early return for all paths that don't need a sandbox extension due to
        access being assumed, not only for WebInspector pages.

        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::hasAssumedReadAccessToURL):
        (WebKit::WebProcessProxy::checkURLReceivedFromWebProcess):
        * UIProcess/WebProcessProxy.h:
        Factored out m_localPathsWithAssumedReadAccess iteration to a public function.

2014-03-20  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r165983 for non Cocoa platforms.

        * UIProcess/API/C/WKAPICast.h:
        * UIProcess/API/C/WKPreferences.cpp:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:

2014-03-20  Beth Dakin  <bdakin@apple.com>

        Implement contentInset for Mac WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130273

        Reviewed by Simon Fraser.

        This patch adds WKView API for setting a topContentInset(). All of this work gets 
        that number plumbed down to WebCore.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _setTopContentInset:]):
        (-[WKWebView _topContentInset]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setTopContentInset:]):
        (-[WKView _topContentInset]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setTopContentInset):
        (WebKit::WebPageProxy::creationParameters):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::topContentInset):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::setTopContentInset):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm:

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Make WKProcessPoolConfiguration SPI
        https://bugs.webkit.org/show_bug.cgi?id=130537

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKProcessPool.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool init]):
        (-[WKProcessPool dealloc]):
        (-[WKProcessPool description]):
        (-[WKProcessPool _configuration]):
        (-[WKProcessPool API::]):
        (-[WKProcessPool _initWithConfiguration:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.h:
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm:
        (-[WKProcessPoolConfiguration _injectedBundleURL]):
        (-[WKProcessPoolConfiguration _setInjectedBundleURL:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h:
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPoolToBeRemoved.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h.
        (-[WKProcessPool initWithConfiguration:]):
        (-[WKProcessPool configuration]):
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h.
        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm.
        (-[_WKProcessPoolConfiguration injectedBundleURL]):
        (-[_WKProcessPoolConfiguration setInjectedBundleURL:]):
        (-[_WKProcessPoolConfiguration description]):
        (-[_WKProcessPoolConfiguration copyWithZone:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-20  Tim Horton  <timothy_horton@apple.com>

        Add WebCore::IOSurface wrapper
        https://bugs.webkit.org/show_bug.cgi?id=130529

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::encode):
        (RemoteLayerBackingStore::decode):
        (RemoteLayerBackingStore::display):
        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        (WebKit::ViewGestureController::removeSwipeSnapshot):
        * UIProcess/mac/ViewSnapshotStore.h:
        * UIProcess/mac/ViewSnapshotStore.mm:
        (WebKit::createIOSurfaceFromImage):
        (WebKit::ViewSnapshotStore::recordSnapshot):
        Adopt WebCore::IOSurface.

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        Update iOS input method code to use new cross-platform async functions
        https://bugs.webkit.org/show_bug.cgi?id=130530

        Reviewed by Enrica Casucci.

        Merge identical iOS and cross-platform functions.

        Also tightened up ifdefs, and removed stub iOS implementations of sync methods,
        which hopefully won't be ever needed. The only tricky case is sync cancelComposition,
        will I'll investigate separately.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setMarkedText:selectedRange:]):
        (-[WKContentView unmarkText]):
        (-[WKContentView insertText:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::cancelComposition):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::cancelComposition):
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::attributedStringForCharacterRangeCallback):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::cancelComposition):
        (WebKit::WebPage::insertDictatedTextAsync):
        (WebKit::WebPage::attributedSubstringForCharacterRangeAsync):

2014-03-20  Alexey Proskuryakov  <ap@apple.com>

        ASSERTION FAILED: event == [NSApp currentEvent] hitting Command-+
        https://bugs.webkit.org/show_bug.cgi?id=130526
        <rdar://problem/16371612>

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm: (-[WKView performKeyEquivalent:]): Cut custom
        processing short whenever we are redispatching an event, not just when the event
        we are handling is the one being redispatched. There shouldn't be any other unrelated
        events here, just the one being redispatched and synthetic ones generated from it by AppKit.

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

        Rename WKPreferencesPrivate.h to WKPreferencesRefPrivate.h.

        * UIProcess/API/C/WKPreferencesRefPrivate.h: Renamed from Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h.
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-20  Gavin Barraclough  <barraclough@apple.com>

        Merge AtomicString, Identifier
        https://bugs.webkit.org/show_bug.cgi?id=128624

        Unreviewed build fix following r165982.

        * WebProcess/Plugins/Netscape/NPJSObject.cpp:
            - update includes.

2014-03-20  Sam Weinig  <sam@webkit.org>

        [WebKit2] Implement NetworkingContext::sourceApplicationAuditData() for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130528

        Reviewed by Anders Carlsson.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::getAuditToken):
        Expose the audit data if available. 

        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::sourceApplicationAuditData):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::sourceApplicationAuditData):
        Pass the audit data corresponding to the UIProcess.

2014-03-20  Sam Weinig  <sam@webkit.org>

        [Cocoa] Expose preference to enable telephone number detection
        https://bugs.webkit.org/show_bug.cgi?id=130524

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKPreferences.mm:
        (-[WKPreferences _telephoneNumberDetectionIsEnabled]):
        (-[WKPreferences _setTelephoneNumberDetectionIsEnabled:]):
        * UIProcess/API/Cocoa/WKPreferencesInternal.h:
        * UIProcess/API/Cocoa/WKPreferencesPrivate.h: Added.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-19  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Support asynchronous NSTextInputClient
        https://bugs.webkit.org/show_bug.cgi?id=130479

        Reviewed by Anders Carlsson.

        The implementation is currently disabled, pending lower level support.
        Most of the code is not under compile time guard however, to facilitate cross-platform
        reuse, or at least under a PLATFORM(COCOA) guard to share the code with iOS.

        * UIProcess/API/mac/WKView.mm: Added a compile time branch for USE(ASYNC_NSTEXTINPUTCLIENT).
        We still implement sync NSTextInputClient here, in order to get assertions when
        its methods are unexpectedly called.
        The new code first sends an event to input method asynchronously, handling any callbacks
        that may arrive. During this time, we no longer care about WKViewInterpretKeyEventsParameters
        at all. Once done, we interpret key bindings synchronously, collecting them into
        a vector.

        * UIProcess/API/mac/WKViewInternal.h: We no longer expose _interpretKeyEvent outside
        WKView.

        * UIProcess/WebPageProxy.cpp:
        * UIProcess/WebPageProxy.h:
        Added async calls and callbacks. Removed unnecessary and slightly harmful .get() when moving
        a callback pointer into map. Moved insertDictatedText() and getAttributedSubstringFromRange()
        from PLATFORM(COCOA) to PLATFORM(MAC), because they are unused and unimplemented on
        iOS, and unlikely to be needed any time soon. Changed USE(APPKIT) to PLATFORM(MAC),
        because that's more accurate in this case (nothing depends on AppKit, it's just code
        that we only need on Mac).

        * UIProcess/WebPageProxy.messages.in: Added messages for new async IM responses.

        * UIProcess/ios/WebPageProxyIOS.mm: Removed insertDictatedText() and getAttributedSubstringFromRange().

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::insertDictatedTextAsync):
        (WebKit::WebPageProxy::attributedSubstringForCharacterRangeAsync):
        (WebKit::WebPageProxy::attributedStringForCharacterRangeCallback):
        Added async calls and callbacks that are Mac only.

        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        Added async implementations (which are essentially the same as sync ones, sadly).

        * WebProcess/WebPage/WebPage.messages.in: Added async messages, moved some messages
        under PLATFORM(MAC).

        * WebProcess/WebPage/ios/WebPageIOS.mm: More of deleting functions that are Mac only,
        and cannot be easily implemented in WebPage.cpp with shared code.

2014-03-20  Martin Robinson  <mrobinson@igalia.com>

        Remove remaining GTK+ unused parameter warnings from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130518

        Reviewed by Sergio Villar Senin.

        Fix almost all unused parameter warnings in the WebKit2GTK+ build.

2014-03-20  Commit Queue  <commit-queue@webkit.org>

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

        It broke the build (Requested by Ossy on #webkit).

        Reverted changeset:

        "[EFL][GTK] Get CMake to find Freetype2 properly"
        https://bugs.webkit.org/show_bug.cgi?id=130150
        http://trac.webkit.org/changeset/165962

2014-03-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get CMake to find Freetype2 properly
        https://bugs.webkit.org/show_bug.cgi?id=130150

        Reviewed by Csaba Osztrogonác.

        Newer versions of CMake are not able to find Freetype2 correctly.
        FindFreetype2.cmake checks for the version number in freetype.h header, since it seems that bug exists in
        freetype2 repo, because a completely different version number is found in freetype2.pc.

        * PlatformEfl.cmake:

2014-03-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] test_ewk2_application_cache_manager is flaky
        https://bugs.webkit.org/show_bug.cgi?id=130501

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (timerCallback): Return ECORE_CALLBACK_CANCEL to clear the timer.

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        Address late review comment and style nit after r165934.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Back-forward swipe doesn't always complete with fingers down
        https://bugs.webkit.org/show_bug.cgi?id=130489
        <rdar://problem/16027007>

        Reviewed by Simon Fraser.

        * UIProcess/ios/ViewGestureControllerIOS.mm:
        (WebKit::ViewGestureController::beginSwipeGesture):
        In order to have fingers-down swipe completion work correctly, we need
        to give UIKit an empty interactive update block.

2014-03-19  Anders Carlsson  <andersca@apple.com>

        Get rid of two IPC::Connection functions by folding them into lambdas
        https://bugs.webkit.org/show_bug.cgi?id=130482

        Reviewed by Tim Horton.

        * Platform/IPC/Connection.cpp:
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        * Platform/IPC/Connection.h:

2014-03-19  Simon Fraser  <simon.fraser@apple.com>

        Expose text and page zoom in WK2 SPI, and hook them up in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130476

        Reviewed by Anders Carlsson.
        
        Expose page and text zoom as SPI.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _supportsTextZoom]):
        (-[WKWebView _textZoomFactor]):
        (-[WKWebView _setTextZoomFactor:]):
        (-[WKWebView _pageZoomFactor]):
        (-[WKWebView _setPageZoomFactor:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-19  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Reduce the extended background's opacity when WKContentView is smaller than its WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130436

        Reviewed by Beth Dakin.

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

2014-03-19  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WebKit2] <rdar://problem/16330387> Do not use the keyboard rect for computing the general unobscuredRect, only use it for centering
        https://bugs.webkit.org/show_bug.cgi?id=130382

        Reviewed by Simon Fraser.

        Always accumulating the keyboard rect out of the exposedRect caused some issues (see <rdar://problem/16330387>).
        This patch split the rect in two: unobscured rect for WebCore, and unobscuredContentRectIncludingKeyboard for centering
        UI Elements in view.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _zoomToRect:WebCore::atScale:origin:WebCore::]):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _zoomToRect:WebCore::withOrigin:WebCore::fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKWebView _contentRectForUserInteraction]):
        (-[WKWebView _updateVisibleContentRects]):

2014-03-19  Anders Carlsson  <andersca@apple.com>

        Get rid of WKProcessClass
        https://bugs.webkit.org/show_bug.cgi?id=130478

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessClass.h: Removed.
        * UIProcess/API/Cocoa/WKProcessClass.mm: Removed.
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.h: Removed.
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.mm: Removed.
        * UIProcess/API/Cocoa/WKProcessClassConfigurationPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKProcessClassPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKWebViewConfigurationToBeRemoved.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-19  Jer Noble  <jer.noble@apple.com>

        [Mac][EME] Query whether decoder support exists before creating a new MediaKeys object.
        https://bugs.webkit.org/show_bug.cgi?id=130459

        Reviewed by Eric Carlson.

        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize the new WCSI method.

2014-03-19  Brady Eidson  <beidson@apple.com>

        Filter out editable services from image menu for non-contenteditable images
        <rdar://problem/16319645> and https://bugs.webkit.org/show_bug.cgi?id=130437

        Reviewed by Tim Horton.

        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (-[WKSharingServicePickerDelegate setIncludeEditorServices:]):
        (-[WKSharingServicePickerDelegate sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
          Filter out editing services based on the includeEditorServices flag.
        (WebKit::WebContextMenuProxyMac::setupImageServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):

2014-03-19  Yongjun Zhang  <yongjun_zhang@apple.com>

        [iOS] WebKit2 Quicklook.
        https://bugs.webkit.org/show_bug.cgi?id=130360

        For WebKit2 resource loads, if we detect a quicklook content that QLConverter is able to
        convert, handle the response data to QLConverter and use its delegate WKWebResourceQuickLookDelegate
        to rounte the converted results (HTML) back into WebCore.  Thie similiar logic has been in place
        for WebKit1.

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj: Add WebResourceLoaderIOS.mm to the project.
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        * WebProcess/ios/WebResourceLoaderIOS.mm: Added.
        (-[WKWebResourceQuickLookDelegate initWithWebResourceLoader:WebKit::]): WKWebResourceQuickLookDelegate holds
            the original WebResourceLoader so that we could send converted result to WebCore.
        (-[WKWebResourceQuickLookDelegate connection:didReceiveDataArray:]):
        (-[WKWebResourceQuickLookDelegate connection:didReceiveData:lengthReceived:]):
        (-[WKWebResourceQuickLookDelegate connectionDidFinishLoading:]):
        (-[WKWebResourceQuickLookDelegate connection:didFailWithError:]):
        (-[WKWebResourceQuickLookDelegate clearHandle]):
        (WebKit::WebResourceLoader::setUpQuickLookHandleIfNeeded):

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Swipe gesture can track vertical movement instead of horizontal movement
        https://bugs.webkit.org/show_bug.cgi?id=130441
        <rdar://problem/16337279>

        Reviewed by Simon Fraser.

        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::scrollEventCanBecomeSwipe):
        Factor logic that determines if a scroll event can become a swipe
        out into scrollEventCanBecomeSwipe.
        Use <= instead of < when comparing the axes, because we don't want
        to start a swipe on a completely diagonal scroll either (because AppKit
        can start tracking a vertical swipe in that case).

        (WebKit::ViewGestureController::handleScrollWheelEvent):
        (WebKit::ViewGestureController::wheelEventWasNotHandledByWebCore):
        Make use of scrollEventCanBecomeSwipe.

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Add new functionality that will be required by the history item decoding
        https://bugs.webkit.org/show_bug.cgi?id=130433

        Reviewed by Sam Weinig.

        * Shared/cf/KeyedDecoder.cpp:
        (WebKit::KeyedDecoder::decodeUInt32):
        (WebKit::KeyedDecoder::decodeInt32):
        (WebKit::KeyedDecoder::decodeFloat):
        * Shared/cf/KeyedDecoder.h:

2014-03-19  Tim Horton  <timothy_horton@apple.com>

        [iOS] WebPDFViewPlaceholder divides-by-zero with an empty document
        https://bugs.webkit.org/show_bug.cgi?id=130444
        <rdar://problem/15580682>

        Reviewed by Sam Weinig.

        * UIProcess/ios/WKPDFView.mm:
        (-[WKPDFView web_setContentProviderData:]):
        Don't make UIPDFPageViews for null pages.

2014-03-18  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Provide generic software-snapshotting API
        https://bugs.webkit.org/show_bug.cgi?id=130385
        <rdar://problem/16005957>

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/_WKThumbnailView.mm:
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeSnapshot):
        (WebKit::WebPage::scaledSnapshotWithOptions):
        (WebKit::WebPage::snapshotAtSize):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Rename TakeThumbnailSnapshot message to TakeSnapshot.

        Fill the snapshot image with the FrameView's background color, to avoid
        half-pixel alpha around the edges.

        Factor snapshotAtSize out of scaledSnapshotWithOptions.

        Don't apply both the custom and device scale factor to the base CTM,
        only the device scale factor. Custom scale factor should only be
        applied to the user CTM.

        * Shared/ImageOptions.h:
        Add a snapshot option, RespectDrawingAreaTransform, that maps
        the rect through the drawing area's root layer transform.
        Use this in place of the thumbnail-specific code in TakeThumbnailSnapshot.
        Add a snapshot option, ExcludeDeviceScaleFactor, which means that
        snapshotting will not factor the device scale in (useful for drawing
        to a bitmap at an exact requested size).

2014-03-18  Samuel White  <samuel_white@apple.com>

        AX: Not able to use arrow keys to read text with VoiceOver before selection is set someplace (anyplace).
        https://bugs.webkit.org/show_bug.cgi?id=130250

        Reviewed by Chris Fleizach.

        Added ability to toggle enhanced accessibility on and off to support tests that require it.

        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
        (WKAccessibilityEnableEnhancedAccessibility):
        (WKAccessibilityEnhancedAccessibilityEnabled):
        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:

2014-03-18  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Rename async APIs for better consistency with EFL
        https://bugs.webkit.org/show_bug.cgi?id=130319

        Reviewed by Gyuyoung Kim.

        There are inconsistency with async keyword in several ewebkit2 APIs.
        This patch rename them to {module/feature}_async_{verb} for better consistency with EFL.
        In addition, added Async keyword into their callback name.

        * UIProcess/API/efl/ewk_application_cache_manager.cpp:
        (EwkApplicationCacheOriginsAsyncData::EwkApplicationCacheOriginsAsyncData):
        (getApplicationCacheOriginsCallback):
        (ewk_application_cache_manager_origins_async_get):
        * UIProcess/API/efl/ewk_application_cache_manager.h:
        * UIProcess/API/efl/ewk_cookie_manager.cpp:
        (EwkCookiePolicyAsyncData::EwkCookiePolicyAsyncData):
        (getAcceptPolicyCallback):
        (ewk_cookie_manager_accept_policy_async_get):
        (EwkCookieHostnamesAsyncData::EwkCookieHostnamesAsyncData):
        (getHostnamesWithCookiesCallback):
        (ewk_cookie_manager_hostnames_with_cookies_async_get):
        * UIProcess/API/efl/ewk_cookie_manager.h:
        * UIProcess/API/efl/ewk_database_manager.cpp:
        (EwkDatabaseOriginsAsyncData::EwkDatabaseOriginsAsyncData):
        (getDatabaseOriginsCallback):
        (ewk_database_manager_origins_async_get):
        * UIProcess/API/efl/ewk_database_manager.h:
        * UIProcess/API/efl/ewk_storage_manager.cpp:
        (EwkStorageOriginsAsyncData::EwkStorageOriginsAsyncData):
        (getStorageOriginsCallback):
        (ewk_storage_manager_origins_async_get):
        * UIProcess/API/efl/ewk_storage_manager.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        (timerCallback):
        * UIProcess/API/efl/tests/test_ewk2_cookie_manager.cpp:
        (EWK2CookieManagerTest::getAcceptPolicy):
        (EWK2CookieManagerTest::getHostnamesWithCookies):
        * UIProcess/API/efl/tests/test_ewk2_database_manager.cpp:
        (EWK2DatabaseManagerTest::timerCallback):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_storage_manager.cpp:
        (EWK2StorageManagerTest::timerCallback):
        (TEST_F):

2014-03-18  Tim Horton  <timothy_horton@apple.com>

        [iOS][WebKit2] Mark layer contents as being opaque if they are
        https://bugs.webkit.org/show_bug.cgi?id=130427
        <rdar://problem/15540434>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerBackingStore.h:
        (WebKit::RemoteLayerBackingStore::isOpaque):
        * Shared/mac/RemoteLayerBackingStore.mm:
        (RemoteLayerBackingStore::RemoteLayerBackingStore):
        (RemoteLayerBackingStore::ensureBackingStore):
        (RemoteLayerBackingStore::encode):
        (RemoteLayerBackingStore::decode):
        (RemoteLayerBackingStore::display):
        (RemoteLayerBackingStore::applyBackingStoreToLayer):
        Move the code to set a RemoteLayerBackingStore as a CALayer's contents
        from RemoteLayerTreePropertyApplier to RemoteLayerBackingStore (mostly
        as a way to keep the USE(IOSURFACE) #ifs in one place).
        Remove the surface() getter, because it's no longer needed, and make
        image() private as it can be now (and rename it to createImageForFrontBuffer
        for clarity's sake).

        Add an isOpaque argument to ensureBackingStore, encode/decode it, and
        add a getter. If isOpaque is true when applying backing store to the
        CALayer on the UI process side, set CALayer.contentsOpaque to let CA know.

        Make opaque bitmaps if not using accelerated drawing. For the IOSurface
        case, we can't make opaque IOSurfaces, but telling CA that we have filled
        the whole bitmap still enables similar optimizations.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::applyPropertiesToLayer):
        Reset contentsOpaque if the layer loses its backing store.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTextStream::operator<<):
        (WebKit::dumpChangedLayers):
        Add a bit more logging about RemoteLayerBackingStore's opaqueness
        and acceleratedness.

        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::updateBackingStore):
        (PlatformCALayerRemote::setOpaque):
        Invalidate the RemoteLayerBackingStore if layer opaqueness changes.

2014-03-18  Brady Eidson  <beidson@apple.com>

        Make image controls menu work in WK2
        <rdar://problem/16294412> and https://bugs.webkit.org/show_bug.cgi?id=130424

        Reviewed by Tim Horton.

        * Platform/SharedMemory.h:
        * Platform/mac/SharedMemoryMac.cpp:
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::clear):

        * Platform/unix/SharedMemoryUnix.cpp:
        (WebKit::SharedMemory::Handle::~Handle):
        (WebKit::SharedMemory::Handle::clear):

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::operator=):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h:
        (WebKit::ContextMenuContextData::controlledImageHandle):

        * Shared/ShareableBitmap.cpp:
        (WebKit::ShareableBitmap::Handle::clear):
        * Shared/ShareableBitmap.h:
        * UIProcess/WebContextMenuProxy.h:

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        (WebKit::WebPageProxy::replaceControlledImage):
        * UIProcess/WebPageProxy.h:

        * UIProcess/efl/WebContextMenuProxyEfl.cpp:
        (WebKit::WebContextMenuProxyEfl::showContextMenu):
        * UIProcess/efl/WebContextMenuProxyEfl.h:

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

        Add a sharing service context menu that lives side-by-side with the normal one:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        (+[WKSharingServicePickerDelegate sharedSharingServicePickerDelegate]):
        (-[WKSharingServicePickerDelegate setMenuProxy:WebKit::]):
        (-[WKSharingServicePickerDelegate setPicker:]):
        (-[WKSharingServicePickerDelegate sharingServicePicker:delegateForSharingService:]):
        (-[WKSharingServicePickerDelegate sharingService:willShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:didShareItems:]):
        (-[WKSharingServicePickerDelegate sharingService:sourceFrameOnScreenForShareItem:]):
        (-[WKSharingServicePickerDelegate sharingService:transitionImageForShareItem:contentRect:]):
        (-[WKSharingServicePickerDelegate sharingService:sourceWindowForShareItems:sharingContentScope:]):
        (WebKit::WebContextMenuProxyMac::contextMenuItemSelected):
        (WebKit::WebContextMenuProxyMac::setupImageServicesMenu):
        (WebKit::WebContextMenuProxyMac::clearImageServicesMenu):
        (WebKit::WebContextMenuProxyMac::populate):
        (WebKit::WebContextMenuProxyMac::showContextMenu):
        (WebKit::WebContextMenuProxyMac::window):
        (WebKit::WebContextMenuProxyMac::replaceControlledImage):

        * WebProcess/WebPage/WebContextMenu.cpp:
        (WebKit::WebContextMenu::show):
        (WebKit::WebContextMenu::replaceControlledImage):
        * WebProcess/WebPage/WebContextMenu.h:

        Teach the WebProcess how to accept the replaced image.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::replaceControlledImage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:

2014-03-18  Anders Carlsson  <andersca@apple.com>

        Begin cleaning up KeyedDecoder and KeyedEncoder
        https://bugs.webkit.org/show_bug.cgi?id=130431

        Reviewed by Tim Horton.

        * Shared/cf/KeyedDecoder.cpp:
        (WebKit::KeyedDecoder::KeyedDecoder):
        If we can't parse the property list data, just add an empty dictionary to the stack.

        (WebKit::KeyedDecoder::decodeBool):
        Remove unneeded m_dictionaryStack.last() null check. m_dictionaryStack would either be empty
        or at least have a root element; it would never have a null element.
        
        (WebKit::KeyedDecoder::decodeDouble):
        Remove the same check as above and remove the CFNumberGetType checks since CFNumberGetValue will
        do the type conversion for us and return false if it's lossy.

        (WebKit::KeyedDecoder::decodeInt64):
        Remove the m_dictionaryStack.last() check.

        (WebKit::KeyedDecoder::decodeUInt32):
        Ditto.

        (WebKit::KeyedDecoder::decodeString):
        Ditto.

        (WebKit::KeyedDecoder::beginObject):
        Ditto.

        (WebKit::KeyedDecoder::beginArray):
        Ditto.

        (WebKit::KeyedDecoder::beginArrayElement):
        Ditto.

        * Shared/cf/KeyedDecoder.h:
        Sort functions to be in the same logical order as the base class.

        * Shared/cf/KeyedEncoder.cpp:
        (WebKit::KeyedEncoder::finishEncoding):
        Don't check for a non-null CFErrorRef here (which we incidentally never released on error). Instead,
        just null check the returned CFDataRef object.

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed typo build fix for r165846.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::decode):

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        WebKit2 SPI to disable remote inspection on a WKWebView / WKPage
        https://bugs.webkit.org/show_bug.cgi?id=130371

        Reviewed by Dan Bernstein.

        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        Add allowsRemoteInspection bool.

        * UIProcess/API/C/WKPagePrivate.h:
        * UIProcess/API/C/WKPage.cpp:
        (WKPageGetAllowsRemoteInspection):
        (WKPageSetAllowsRemoteInspection):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _allowsRemoteInspection]):
        (-[WKWebView _setAllowsRemoteInspection:]):
        Getter and setter for allowing remote inspection state.

        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::allowsRemoteInspection):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::setAllowsRemoteInspection):
        (WebKit::WebPageProxy::creationParameters):
        Cached allows remote inspection state, with getter and setter.

        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setAllowsRemoteInspection):
        When setting, call into WebCore to adjust the Page's setting.

2014-03-18  Anders Carlsson  <andersca@apple.com>

        REGRESSION: Visited link coloring seems to be completely broken in tip of tree
        https://bugs.webkit.org/show_bug.cgi?id=130419
        <rdar://problem/16337850>

        Reviewed by Dan Bernstein.

        Make sure to send any queued up messages before calling connectionWillOpen so we'll ensure
        FIFO ordering if any messages are sent from within connectionWillOpen.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-03-18  Joseph Pecoraro  <pecoraro@apple.com>

        WebPageCreationParameters colorSpace should be MAC not COCOA
        https://bugs.webkit.org/show_bug.cgi?id=130414

        Reviewed by Dan Bernstein.

        The colorSpace param was only set and used on Mac, not iOS.

        * Shared/WebPageCreationParameters.h:
        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):

2014-03-18  Simon Fraser  <simon.fraser@apple.com>

        Dan says that options should be unsigned, and enums should be signed.
        
        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_ENUM):

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Pass ranges over IPC in a cross-platform manner
        https://bugs.webkit.org/show_bug.cgi?id=130376

        Reviewed by Anders Carlsson.

        Added an EditingRange class for IPC, which automatically converts to and from
        NSRanges, knowing the difference between notFound and NSNotFound.

        Manually applied the same fix to characterIndexForPoint.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/EditingRange.h: Added.
        (WebKit::EditingRange::EditingRange):
        (WebKit::EditingRange::isValid):
        (WebKit::EditingRange::operator NSRange):
        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView selectedRange]):
        (-[WKView hasMarkedText]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView markedRange]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        (-[WKView characterIndexForPoint:]):
        (-[WKView firstRectForCharacterRange:actualRange:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setMarkedText:selectedRange:]):
        (-[WKContentView insertText:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::insertDictatedText):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::insertDictatedText):
        (WebKit::WebPageProxy::getMarkedRange):
        (WebKit::WebPageProxy::getSelectedRange):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        (WebKit::WebPageProxy::firstRectForCharacterRange):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rangeFromEditingRange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::firstRectForCharacterRange):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getMarkedRange):
        (WebKit::WebPage::getSelectedRange):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::firstRectForCharacterRange):

2014-03-17  Filip Pizlo  <fpizlo@apple.com>

        More FTL enabling.

        Rubber stamped by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Renable pagination mode in WK2 MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130374

        Reviewed by Anders Carlsson.
        
        Add SPI for pagination mode.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _paginationMode]):
        (-[WKWebView _setPaginationMode:]):
        (-[WKWebView _paginationBehavesLikeColumns]):
        (-[WKWebView _setPaginationBehavesLikeColumns:]):
        (-[WKWebView _pageLength]):
        (-[WKWebView _setPageLength:]):
        (-[WKWebView _gapBetweenPages]):
        (-[WKWebView _setGapBetweenPages:]):
        (-[WKWebView _pageCount]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        (NS_ENUM):

2014-03-18  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE][WK2]Move CoordinatedGraphics related files out of WebKit2/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=130390

        Reviewed by Martin Robinson.

        Now, only EFL port use CoordinatedGraphics among CMake based ports.

        * CMakeLists.txt:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Removed CoordinatedGraphics related files.

2014-03-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Race condition when the socket event source is cancelled
        https://bugs.webkit.org/show_bug.cgi?id=130395

        Reviewed by Martin Robinson.

        In some cases when the socket event source is cancelled the socket
        event source callback is called with the condition of the previous
        poll instead of 0. This can happen sometimes when the source is
        cancelled from the socket event source callback. Once the socket
        event source is cancelled, it's dispatched by glib without
        polling, so the condition is never reset again and the callback is
        called again and again with the previous condition. When the
        condition is G_IO_IN, the source is re-scheduled entering into an
        infinite loop. We should always check if the source has been
        cancelled at the beginning of the callback to destroy the source
        instead of relying on the condition being 0.

        * Platform/gtk/WorkQueueGtk.cpp:
        (WorkQueue::SocketEventSource::isCancelled):
        (WorkQueue::SocketEventSource::eventCallback):

2014-03-18  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] URTFB after r165789. Stub function added.

        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::setBundleParameter):

2014-03-17  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, EFL build fix after r165789

        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::setBundleParameter): Implemented.

2014-03-17  Jae Hyun Park  <jaepark@webkit.org>

        [GTK] Build fix for debug build

        Unreviewed.

        finalizedListItem was actually used in ASSERT.  So, use ASSERT_UNUSED
        instead of ASSERT.

        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp:
        (webkitBackForwardListItemFinalized):

2014-03-17  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [WK2] Getting rid of compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=130348

        Reviewed by Benjamin Poulain.

        * UIProcess/API/APIHistoryClient.h:
        (API::HistoryClient::didPerformClientRedirect):
        (API::HistoryClient::didPerformServerRedirect):
        (API::HistoryClient::didUpdateHistoryTitle):
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::didStartProvisionalLoadForFrame):
        (API::LoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
        (API::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
        (API::LoaderClient::didCommitLoadForFrame):
        (API::LoaderClient::didFinishLoadForFrame):
        (API::LoaderClient::didFailLoadWithErrorForFrame):
        (API::LoaderClient::didChangeBackForwardList):
        * UIProcess/API/APIPolicyClient.h:
        (API::PolicyClient::decidePolicyForNavigationAction):
        (API::PolicyClient::decidePolicyForNewWindowAction):
        (API::PolicyClient::decidePolicyForResponse):
        (API::PolicyClient::unableToImplementPolicy):
        * UIProcess/API/APIUIClient.h:
        (API::UIClient::exceededDatabaseQuota):
        (API::UIClient::saveDataToFileInDownloadsFolder):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/APISession.cpp:
        (API::generateID):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::viewStateDidChange):

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Update the bundle parameters dictionary and send out KVO notifications
        https://bugs.webkit.org/show_bug.cgi?id=130379
        <rdar://problem/16213914>

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _setObject:forBundleParameter:]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        (-[WKWebProcessBundleParameters setParameter:forKey:]):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::setBundleParameter):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::setInjectedBundleParameter):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        Address some style nits.

        * UIProcess/API/Cocoa/_WKThumbnailViewInternal.h:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Address some style nits.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-17  Simon Fraser  <simon.fraser@apple.com>

        Add transparent window support back into MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=130363

        Reviewed by Anders Carlsson.
        
        Expose SPI for transparent window support.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _drawsTransparentBackground]):
        (-[WKWebView _setDrawsTransparentBackground:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        Undo some accidental Gtk changes from http://trac.webkit.org/changeset/165759

        * UIProcess/WebPageProxy.cpp:
        * WebProcess/WebPage/WebPage.messages.in:

2014-03-17  Csaba Osztrogonác  <ossy@webkit.org>

        [WK2] URTBF after r165755 for non Apple platforms, stub functions added.

        * WebProcess/InjectedBundle/efl/InjectedBundleEfl.cpp:
        (WebKit::InjectedBundle::platformInitialize):
        * WebProcess/InjectedBundle/gtk/InjectedBundleGtk.cpp:
        (WebKit::InjectedBundle::platformInitialize):

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        Move convertToRange() helper to cross-platform WebPage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=130365

        Reviewed by Tim Horton.

        Also renamed it to rangeFromEditingLocationAndLength().

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::rangeFromEditingLocationAndLength):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::insertText):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::WebPage::characterIndexForPoint):
        (WebKit::WebPage::firstRectForCharacterRange):

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Follow-up fix.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:

2014-03-17  Enrica Casucci  <enrica@apple.com>

        WK2: support data detectors driven action sheet..
        https://bugs.webkit.org/show_bug.cgi?id=130362
        <rdar://problem/16319711>

        Reviewed by Benjamin Poulain.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant showDataDetectorsSheet]):

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit OS X build.

        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm:
        * WebProcess/InjectedBundle/InjectedBundle.h:
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::platformInitialize):

2014-03-17  Jae Hyun Park  <jaepark@webkit.org>

        [GTK][CMake] Fix WebKit2 unused parameter warnings
        https://bugs.webkit.org/show_bug.cgi?id=130316

        Reviewed by Martin Robinson.

        * Platform/gtk/WorkQueueGtk.cpp: Fix unused parameter warnings.
        * UIProcess/API/gtk/PageClientImpl.cpp: Ditto.
        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp: Ditto.
        * UIProcess/API/gtk/WebKitContextMenuClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp: Ditto.
        * UIProcess/API/gtk/WebKitDownloadClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitFaviconDatabase.cpp: Ditto.
        * UIProcess/API/gtk/WebKitFindController.cpp: Ditto.
        * UIProcess/API/gtk/WebKitFormClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitGeolocationProvider.cpp: Ditto.
        * UIProcess/API/gtk/WebKitLoaderClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitPlugin.cpp: Ditto.
        * UIProcess/API/gtk/WebKitPolicyClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitRequestManagerClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitTextChecker.cpp: Ditto.
        * UIProcess/API/gtk/WebKitUIClient.cpp: Ditto.
        * UIProcess/API/gtk/WebKitURISchemeRequest.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebContext.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebInspector.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebView.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBase.cpp: Ditto.
        * UIProcess/API/gtk/WebKitWebViewBaseAccessible.cpp: Ditto.
        * UIProcess/API/gtk/WebViewBaseInputMethodFilter.cpp: Ditto.
        * UIProcess/gtk/TextCheckerGtk.cpp: Ditto.
        * UIProcess/gtk/WebContextMenuProxyGtk.cpp: Ditto.
        * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: Ditto.
        * WebProcess/InjectedBundle/API/gtk/WebKitFrame.cpp: Ditto.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp: Ditto.
        * WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp: Ditto.
        * WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp: Ditto.
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp: Ditto.

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Standardize on start/length in text input IPC methods
        https://bugs.webkit.org/show_bug.cgi?id=130359

        Reviewed by Anders Carlsson.

        Some IPC methods used start/length, and others use start/end. This was confusing.

        While here, changed WebPageMac.mm to not use NSMakeRange where we don't need it
        (I want to move this code to WebPage.cpp, where it could be shared with iOS and
        other platforms, as it doesn't depend on Foundation much).

        * UIProcess/API/mac/WKView.mm:
        (-[WKView insertText:replacementRange:]):
        (-[WKView setMarkedText:selectedRange:replacementRange:]):
        (-[WKView attributedSubstringForProposedRange:actualRange:]):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setComposition):
        (WebKit::WebPageProxy::insertText):
        (WebKit::WebPageProxy::insertDictatedText):
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::setComposition):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::setComposition):
        (WebKit::WebPage::insertText):
        (WebKit::WebPage::insertDictatedText):
        (WebKit::WebPage::getAttributedSubstringFromRange):
        (WebKit::convertToRange):
        (WebKit::WebPage::firstRectForCharacterRange):

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        Rename WKThumbnailView to _WKThumbnailView
        https://bugs.webkit.org/show_bug.cgi?id=130361

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKThumbnailView.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKThumbnailView.h.
        * UIProcess/API/Cocoa/_WKThumbnailView.mm: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKThumbnailView.mm.
        (-[_WKThumbnailView initWithFrame:fromWKView:]):
        (-[_WKThumbnailView _viewWasUnparented]):
        (-[_WKThumbnailView _viewWasParented]):
        (-[_WKThumbnailView _requestSnapshotIfNeeded]):
        (-[_WKThumbnailView _didTakeSnapshot:]):
        (-[_WKThumbnailView viewDidMoveToWindow]):
        (-[_WKThumbnailView setScale:]):
        (-[_WKThumbnailView setUsesSnapshot:]):
        (-[_WKThumbnailView _setThumbnailLayer:]):
        (-[_WKThumbnailView _thumbnailLayer]):
        * UIProcess/API/Cocoa/_WKThumbnailViewInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKThumbnailViewInternal.h.
        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setThumbnailView:]):
        (-[WKView _thumbnailView]):
        (-[WKView _updateThumbnailViewLayer]):
        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/mac/PageClientImpl.mm:
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-17  Anders Carlsson  <andersca@apple.com>

        Add SPI for getting bundle parameters from the injected bundle
        https://bugs.webkit.org/show_bug.cgi?id=130355

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.h: Copied from Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h.
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessBundleParameters.mm: Copied from Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h.
        (-[WKWebProcessBundleParameters initWithDictionary:]):
        (-[WKWebProcessBundleParameters valueForKey:]):
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.h:
        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
        (-[WKWebProcessPlugInController parameters]):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::InjectedBundle):
        * WebProcess/InjectedBundle/InjectedBundle.h:
        (WebKit::InjectedBundle::create):
        * WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:
        (WebKit::InjectedBundle::bundleParameters):
        (WebKit::InjectedBundle::platformInitialize):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):

2014-03-17  Brent Fulgham  <bfulgham@apple.com>

        Provide preference to enable additional AVFoundation options
        https://bugs.webkit.org/show_bug.cgi?id=130275

        Reviewed by Eric Carlson.

        * Shared/WebPreferencesStore.h: Added new preference.
        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetEnableInheritURIQueryComponent): Added.
        (WKPreferencesGetEnableInheritURIQueryComponent): Added.
        * UIProcess/API/C/WKPreferencesPrivate.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences): Handle new preference.

2014-03-17  Alexey Proskuryakov  <ap@apple.com>

        [Mac] getAttributedSubstringFromRange arguments are incorrectly named
        https://bugs.webkit.org/show_bug.cgi?id=130349

        Reviewed by Tim Horton.

        There is a mess of start/end and start/length pairs in IPC. One day we'll fix them
        all, but now, let's at least name them correctly.

        No behavior change.

        * UIProcess/WebPageProxy.h:
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::getAttributedSubstringFromRange):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::getAttributedSubstringFromRange):

2014-03-17  Tim Horton  <timothy_horton@apple.com>

        WKThumbnailView should support snapshots
        https://bugs.webkit.org/show_bug.cgi?id=130335
        <rdar://problem/16255139>

        Reviewed by Simon Fraser.

        Add a mode where WKThumbnailView takes a software snapshot of the web content,
        replacing the live layer tree with said snapshot once it returns from the
        web process. This may improve animation performance in cases where the
        layer tree would otherwise be very complex.

        * UIProcess/API/Cocoa/WKThumbnailView.h:
        Add a property, usesSnapshot, which determines whether the thumbnail view
        should use the live layer tree or a snapshot of the content.

        * UIProcess/API/Cocoa/WKThumbnailView.mm:
        (-[WKThumbnailView initWithFrame:fromWKView:]):
        (-[WKThumbnailView _viewWasUnparented]):
        Clear the snapshot when unparented.

        (-[WKThumbnailView _viewWasParented]):
        Take a snapshot of the web content when parented, if needed.

        (-[WKThumbnailView _requestSnapshotIfNeeded]):
        If we're using snapshots, and haven't already dispatched an async snapshot request,
        and don't already have a snapshot, request a snapshot from the web process.

        When it returns, use it as the contents of the WKThumbnailView layer, and
        unparent the live layer tree.

        (-[WKThumbnailView setScale:]):
        (-[WKThumbnailView setUsesSnapshot:]):
        (-[WKThumbnailView _setThumbnailLayer:]):
        (-[WKThumbnailView _thumbnailLayer]):
        * UIProcess/API/Cocoa/WKThumbnailViewInternal.h:

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _setAcceleratedCompositingModeRootLayer:]):
        (-[WKView _acceleratedCompositingModeRootLayer]):
        WKView should always keep track of the current root layer, instead of totally
        handing control over to WKThumbnailView when it is used.

        (-[WKView _setThumbnailView:]):
        (-[WKView _updateThumbnailViewLayer]):
        (-[WKView _reparentLayerTreeInThumbnailView]):
        If needed (either we're not using snapshots, or still waiting for the snapshot to be painted),
        push the WKView's live layer tree into the thumbnail view.

        * UIProcess/API/mac/WKViewInternal.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::takeThumbnailSnapshot):
        Add a message that asynchronously returns a snapshot that respects the
        current thumbnail scale and position.

        (WebKit::WebPage::scaledSnapshotWithOptions):
        Use some nullptr.

        * WebProcess/WebPage/DrawingArea.cpp:
        (WebKit::DrawingArea::transform):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
        Add a getter for the DrawingArea's transform.
        Rename it to rootLayerTransform.

2014-03-17  Zan Dobersek  <zdobersek@igalia.com>

        Use RunLoop objects through references instead of pointers
        https://bugs.webkit.org/show_bug.cgi?id=130313

        Reviewed by Andreas Kling.

        Adjust the code accordingly now that RunLoop::current() and RunLoop::main()
        return RunLoop reference instead of a pointer.

        * DatabaseProcess/DatabaseProcess.cpp:
        (WebKit::DatabaseProcess::didClose):
        (WebKit::DatabaseProcess::didReceiveInvalidMessage):
        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
        (WebKit::UniqueIDBDatabase::postMainThreadTask):
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::didClose):
        (WebKit::NetworkProcess::didReceiveInvalidMessage):
        * NetworkProcess/NetworkResourceLoader.cpp:
        (WebKit::NetworkResourceLoader::continueWillSendRequest):
        * Platform/IPC/Connection.cpp:
        (IPC::Connection::SyncMessageState::getOrCreate):
        (IPC::Connection::SyncMessageState::SyncMessageState):
        (IPC::Connection::SyncMessageState::~SyncMessageState):
        (IPC::Connection::SyncMessageState::processIncomingMessage):
        (IPC::Connection::SyncMessageState::dispatchMessages):
        (IPC::Connection::createServerConnection):
        (IPC::Connection::createClientConnection):
        (IPC::Connection::Connection):
        (IPC::Connection::addWorkQueueMessageReceiver):
        (IPC::Connection::removeWorkQueueMessageReceiver):
        (IPC::Connection::sendSyncMessage):
        (IPC::Connection::sendSyncMessageFromSecondaryThread):
        (IPC::Connection::waitForSyncReply):
        (IPC::Connection::processIncomingMessage):
        (IPC::Connection::connectionDidClose):
        (IPC::Connection::dispatchDidReceiveInvalidMessage):
        (IPC::Connection::enqueueIncomingMessage):
        (IPC::Connection::wakeUpRunLoop):
        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::receiveSourceEventHandler):
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::stopRunLoop):
        * Shared/Plugins/NPObjectProxy.cpp:
        (WebKit::NPObjectProxy::NP_Deallocate):
        * UIProcess/Launcher/efl/ProcessLauncherEfl.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/gtk/ProcessLauncherGtk.cpp:
        (WebKit::ProcessLauncher::launchProcess):
        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
        (WebKit::connectToService):
        (WebKit::tryPreexistingProcess):
        (WebKit::createProcess):
        * UIProcess/Storage/StorageManager.cpp:
        (WebKit::StorageManager::getOrigins):
        (WebKit::StorageManager::getStorageDetailsByOrigin):
        * UIProcess/Storage/StorageManager.h:
        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
        (WebKit::NetscapePlugin::pluginThreadAsyncCall):
        * WebProcess/Plugins/PluginView.cpp:
        (WebKit::PluginView::unprotectPluginFromDestruction):
        * WebProcess/WebPage/EventDispatcher.cpp:
        (WebKit::EventDispatcher::wheelEvent):
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp:
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close):

2014-03-17  Giovanni Campagna  <gcampagna@src.gnome.org>

        [GTK] Don't busy loop when the socket is full
        https://bugs.webkit.org/show_bug.cgi?id=129802

        Reviewed by Carlos Garcia Campos.

        When the socket is full and we see EAGAIN or EWOULDBLOCK
        (because the socket is non blocking), don't busy loop by
        tring to write again, instead poll() until the socket
        becomes writable.

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

2014-03-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Ensure that HAVE_GTK_UNIX_PRINTING is defined when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=130155

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Add GTK_UNIX_PRINT flags to the build.

2014-03-17  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Restore cursor when moving mouse into webview
        https://bugs.webkit.org/show_bug.cgi?id=130182

        Reviewed by Gyuyoung Kim.

        We changed mouse cursor when the type of cursor is changed.
        But once mouse is moved out of webview, ewebkit will not know whether cursor
        is changed or not.

        So, this patch added a logic to restore the last applied type of cursor when
        mouse is moved into webview again.

        * UIProcess/API/efl/EwkView.cpp:
        (EwkViewEventHandler<EVAS_CALLBACK_MOUSE_IN>::handleEvent):
        Call updateCursor to restore the last applied type of cursor.
        (EwkView::EwkView):
        (EwkView::updateCursor): Extracted from setCursor.
        (EwkView::setCursor):
        (EwkView::handleEvasObjectAdd):
        * UIProcess/API/efl/EwkView.h:

2014-03-16  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][WK2] Add ewk_application_cache_manager APIs
        https://bugs.webkit.org/show_bug.cgi?id=102853

        Reviewed by Gyuyoung Kim.

        Implemented application cache manager to get list of origins which stores
        application cache and remove specified origin or all.

        * PlatformEfl.cmake: Added newly added files.
        * UIProcess/API/efl/ewk_application_cache_manager.cpp: Added.
        (EwkApplicationCacheManager::EwkApplicationCacheManager):
        (EwkApplicationCacheManager::~EwkApplicationCacheManager):
        (Get_Origins_Data::Get_Origins_Data):
        (getApplicationCacheOriginsCallback):
        (ewk_application_cache_manager_origins_get):
        (ewk_application_cache_origins_free):
        (ewk_application_cache_manager_delete_all):
        (ewk_application_cache_manager_delete):
        * UIProcess/API/efl/ewk_application_cache_manager.h: Added.
        * UIProcess/API/efl/ewk_application_cache_manager_private.h: Added.
        (EwkApplicationCacheManager::impl):
        * UIProcess/API/efl/ewk_context.cpp:
        (EwkContext::applicationCacheManager):
        (ewk_context_application_cache_manager_get):
        * UIProcess/API/efl/ewk_context.h:
        * UIProcess/API/efl/ewk_context_private.h:
        * UIProcess/API/efl/ewk_security_origin_private.h:
        (EwkSecurityOrigin::wkSecurityOrigin):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.cpp:
        (EWK2UnitTestServer::port):
        * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestServer.h:
        * UIProcess/API/efl/tests/test_ewk2_application_cache_manager.cpp:
        Added to test application_cache_manager.
        (serverCallback):
        (getOriginsCallback):
        (timerCallback):
        (TEST_F):
        * UIProcess/API/efl/tests/test_ewk2_context.cpp:
        Added test case to test getter of application_cache_manager.
        (TEST_F):

2014-03-16  Zan Dobersek  <zdobersek@igalia.com>

        Move GTK WebKit2 code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=129672

        Reviewed by Anders Carlsson.

        Repace uses of OwnPtr and PassOwnPtr in GTK-specific WebKit2 code with std::unique_ptr.

        * Shared/Downloads/Download.h:
        * Shared/Downloads/soup/DownloadSoup.cpp:
        (WebKit::Download::start):
        (WebKit::Download::startWithHandle):
        (WebKit::Download::platformInvalidate):
        * UIProcess/API/gtk/PageClientImpl.cpp:
        * UIProcess/API/gtk/PageClientImpl.h:
        * UIProcess/API/gtk/WebKitContextMenuItem.cpp:
        (webkitContextMenuItemCreate):
        (webkitContextMenuItemCreateForGtkItem):
        (webkit_context_menu_item_new):
        (webkit_context_menu_item_new_from_stock_action):
        (webkit_context_menu_item_new_from_stock_action_with_label):
        (webkit_context_menu_item_new_with_submenu):
        (webkit_context_menu_item_new_separator):
        * UIProcess/API/gtk/WebKitTextChecker.h:
        * UIProcess/API/gtk/WebKitWebContext.cpp:
        (createDefaultWebContext):
        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseConstructed):
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::print):
        * WebProcess/gtk/WebGtkExtensionManager.cpp:
        (WebKit::WebGtkExtensionManager::initialize):
        * WebProcess/soup/WebKitSoupRequestInputStream.cpp:
        (webkitSoupRequestInputStreamPendingReadAsyncComplete):
        (webkitSoupRequestInputStreamReadAsync):
        * WebProcess/soup/WebSoupRequestManager.cpp:
        (WebKit::WebSoupRequestManager::send):
        * WebProcess/soup/WebSoupRequestManager.h:

2014-03-16  Brian Burg  <bburg@apple.com>

        Web Inspector: vended backend commands file should be generated as part of the build
        https://bugs.webkit.org/show_bug.cgi?id=130110

        Reviewed by Timothy Hatcher.

        * PlatformGTK.cmake: Copy over generated inspector backend commands files.

2014-03-16  Darin Adler  <darin@apple.com>

        Try to fix 32-bit Mac build.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm: Add missing include.

2014-03-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r165692.

        * UIProcess/gtk/TextCheckerGtk.cpp:
        (WebKit::TextChecker::checkSpellingOfString):
        (WebKit::TextChecker::checkGrammarOfString):

2014-03-15  Darin Adler  <darin@apple.com>

        Remove all uses of deprecatedCharacters from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130197

        Reviewed by Andreas Kling.

        * Shared/APIString.h: Rewrote getCharacters to use StringView,
        substring, and getCharactersWithUpconvert. Added an 8-bit case
        to getUTF8CString.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::writeByte): Added.
        (WebKit::writeCharacter): Added.
        (WebKit::writeLine): Added. Uses operator[] instead of characters16 to get
        the UTF-16 characters out of the string.
        (WebKit::NetscapePluginModule::scanPlugin): Replaced code that writes out
        text to stdout with much simpler version using the functions above.

        * UIProcess/TextChecker.h: Changed text arguments to use StringView instead
        of UChar/int pairs.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu): Updated to pass StringView.

        * UIProcess/efl/TextCheckerEfl.cpp:
        (WebKit::nextWordOffset): Changed function to use StringView and unsigned.
        (WebKit::TextChecker::checkTextOfParagraph): Changed to use StringView and
        substring.
        (WebKit::TextChecker::checkSpellingOfString): Ditto.
        (WebKit::TextChecker::checkGrammarOfString): Ditto.
        (WebKit::TextChecker::requestCheckingOfString): Pass in a StringView, so no
        need to call deprecatedCharacters.

        * UIProcess/ios/TextCheckerIOS.mm:
        (WebKit::TextChecker::checkTextOfParagraph): Changed to take StringView.
        (WebKit::TextChecker::checkSpellingOfString): Ditto.
        (WebKit::TextChecker::checkGrammarOfString): Ditto.

        * UIProcess/mac/TextCheckerMac.mm:
        (WebKit::TextChecker::checkTextOfParagraph): Changed to take StringView and
        use StringView::createNSStringWithoutCopying.
        (WebKit::TextChecker::checkSpellingOfString): CHanged to take StringView.
        (WebKit::TextChecker::checkGrammarOfString): Ditto.

        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
        (WebKit::convertStringToKeyCodes): Changed to take StringView and use
        upconvertedCharacters instead of deprecatedCharacters. Also use move instead
        of swap.
        (WebKit::NetscapePlugin::sendComplexTextInput): Updated to new style for loop.

        * WebProcess/WebPage/EncoderAdapter.cpp:
        (WebKit::EncoderAdapter::encodeString): Use StringView::upconvertedCharacters
        instead of String::deprecatedCharacters.

2014-03-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Define SYSTEM_VERSION_PREFIX consistently
        <http://webkit.org/b/130293>
        <rdar://problem/15926359>

        Reviewed by Dan Bernstein.

        * Configurations/Version.xcconfig:
        (SYSTEM_VERSION_PREFIX): Sync with
        Source/WebKit/mac/Version.xcconfig.

2014-03-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Sync extended attribute related rules with AppSandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=130263
        <rdar://problem/16318965>

        Reviewed by Sam Weinig.

        Update the fix to use a different syntax in some OS versions.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Revert erroneous changes made to UIProcess/API/Cocoa in r165676.

        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardListItem.h.
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigationAction.h.
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKNavigationResponse.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigationResponse.h.
        * UIProcess/API/Cocoa/WKNavigationTrigger.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.h:

2014-03-14  Mark Rowe  <mrowe@apple.com>

        Fix the production build.

        Don't rely on USE_INTERNAL_SDK being set for the Production configuration since UseInternalSDK.xcconfig won't
        be at the expected relative path when working from installed source.

        * Configurations/Base.xcconfig:

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>
        
        Reviewed by Simon Fraser.

        * Shared/AsyncRequest.cpp:
        * Shared/AsyncRequest.h:
        * Shared/ContextMenuContextData.cpp:
        * Shared/ContextMenuContextData.h:
        * Shared/Databases/DatabaseProcessCreationParameters.h:
        * Shared/Databases/IndexedDB/IDBUtilities.cpp:
        * Shared/Databases/IndexedDB/IDBUtilities.h:
        * Shared/mac/RemoteLayerBackingStore.h:
        * Shared/mac/RemoteLayerBackingStore.mm:
        * UIProcess/API/Cocoa/WKBackForwardList.h:
        * UIProcess/API/Cocoa/WKBackForwardListItem.h: Removed.
        * UIProcess/API/Cocoa/WKNavigation.h:
        * UIProcess/API/Cocoa/WKNavigationAction.h: Removed.
        * UIProcess/API/Cocoa/WKNavigationDelegate.h:
        * UIProcess/API/Cocoa/WKNavigationResponse.h: Removed.
        * UIProcess/API/Cocoa/WKNavigationTrigger.h: Added.
        (NS_ENUM):
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.cpp:
        * UIProcess/API/CoordinatedGraphics/WKCoordinatedScene.h:
        * UIProcess/CoordinatedGraphics/WKCoordinatedSceneAPICast.h:
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.cpp:
        * WebProcess/Databases/IndexedDB/WebIDBFactoryBackend.h:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.cpp:
        * WebProcess/Databases/IndexedDB/WebIDBServerConnection.h:
        * WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
        * WebProcess/Databases/WebToDatabaseProcessConnection.h:
        * WebProcess/WebCoreSupport/WebAlternativeTextClient.h:
        * WebProcess/WebCoreSupport/mac/WebAlternativeTextClient.cpp:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.cpp:
        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.h:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.cpp:
        * WebProcess/WebPage/mac/PlatformCALayerRemoteTiledBacking.h:

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] background-attachment: fixed renders oddly, moves around
        https://bugs.webkit.org/show_bug.cgi?id=130277
        <rdar://problem/16332883>

        Reviewed by Tim Horton.
        
        Actually send scrolling and counter-scrolling layers to the UI process!

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Try to fix the iOS build.

        * UIProcess/mac/WebContextMac.mm:

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Begin work on the bundle parameter API
        https://bugs.webkit.org/show_bug.cgi?id=130267

        Reviewed by Dan Bernstein.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool _objectForBundleParameter:]):
        (-[WKProcessPool _setObject:forBundleParameter:]):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::bundleParameters):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::ensureBundleParameters):
        (WebKit::WebContext::platformInitializeWebProcess):

2014-03-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Sync extended attribute related rules with AppSandbox profile
        https://bugs.webkit.org/show_bug.cgi?id=130263
        <rdar://problem/16318965>

        Reviewed by Sam Weinig.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/PlugInSandboxProfiles/com.apple.QuickTime Plugin.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.apple.WebKit.plugin-common.sb:
        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:
        * Resources/PlugInSandboxProfiles/com.macromedia.Flash Player.plugin.sb:
        * Resources/PlugInSandboxProfiles/com.microsoft.SilverlightPlugin.sb:
        * Resources/PlugInSandboxProfiles/com.oracle.java.JavaAppletPlugin.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-03-14  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Improve behavior of fixed elments on zooming
        https://bugs.webkit.org/show_bug.cgi?id=130253

        Reviewed by Beth Dakin.

        Correctly reposition right- and bottom-relative position:fixed
        elements on zooming in WK2 iOS by telling the scrolling tree
        about zoom-related viewport changes.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged):
        Drive-by cleanup; typedef the flags field to an unsigned, to avoid ugly casting.
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::updateScrollingTree): Pass out a flag to say
        if the update contained a new fixed or sticky layer.
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        (WebKit::RemoteScrollingCoordinatorProxy::viewportChangedViaDelegatedScrolling):
        Call into the new ScrolingTree::viewportChangedViaDelegatedScrolling().
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm: If we got a new fixed
        or sticky layer, set fixedOrStickyLayerChanged to true.
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers): Ditto.
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        Remember both the old zoomScale and the filteredScale, since the fixed position rect
        should be computed using the unfiltered scale.
        Some FloatRect -> CGRect changes.
        Now call viewportChangedViaDelegatedScrolling() on the scrolling coordinator.
        (-[WKContentView fixedPositionRectFromExposedRect:scale:]): Call the
        FrameView function to compute the iOS fixed position rect.
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree): If the update
        got a new fixed or sticky layer, run the scrolling tree logic to make sure
        it gets into the right place.
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree): If we logged here,
        we'd log twice if the tiled scrolling indicator was enabled, so 
        hoisted the logging out into the caller.

2014-03-14  Landry Breuil  <landry@openbsd.org>

        Use the correct type in webkitSoupRequestInputStreamNew()'s declaration.
        Nhttps://bugs.webkit.org/show_bug.cgi?id=129974

        Reviewed by Andreas Kling.

        * WebProcess/soup/WebKitSoupRequestInputStream.h:

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Fix crash when resizing the visited link table
        https://bugs.webkit.org/show_bug.cgi?id=130257
        <rdar://problem/16328177>

        Reviewed by Dan Bernstein.

        We're iterating over the old table, so use currentTableSize in the loop termination condition.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::resizeTable):

2014-03-14  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose a way to set the cookie accept policy
        https://bugs.webkit.org/show_bug.cgi?id=130251

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (toHTTPCookieAcceptPolicy): Added a helper function that maps from NSHTTPCookieAcceptPolicy
        values to WebKit::HTTPCookieAcceptPolicy values.
        (-[WKProcessPool _setCookieAcceptPolicy:]): Added. Calls
        WebCookieManagerProxy::setHTTPCookieAcceptPolicy. 
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Declared new method.

2014-03-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebKit2WebExtension GIR can't be used in vala
        https://bugs.webkit.org/show_bug.cgi?id=127179

        Reviewed by Martin Robinson.

        Do not include all WebKit2 gir symbols from WebKit2WebExtension gir
        file.

        * GNUmakefile.am:
        * PlatformGTK.cmake:

2014-03-14  Csaba Osztrogonác  <ossy@webkit.org>

        [CMake] URTBF after r165619.

        * CMakeLists.txt: Add new files.

2014-03-14  Anders Carlsson  <andersca@apple.com>

        Remove WebContext::addVisitedLink
        https://bugs.webkit.org/show_bug.cgi?id=130242

        Reviewed by Dan Bernstein.

        Fold the function into WKContextAddVisitedLink instead.

        * UIProcess/API/C/WKContext.cpp:
        (WKContextAddVisitedLink):
        * UIProcess/WebContext.cpp:
        * UIProcess/WebContext.h:
        (WebKit::WebContext::visitedLinkProvider):

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Move visited link handling to VisitedLinkTableController and VisitedLinkProvider
        https://bugs.webkit.org/show_bug.cgi?id=130223
        <rdar://problem/16315792>

        Reviewed by Dan Bernstein.

        * DerivedSources.make:
        Generate messages for VisitedLinkProvider and VisitedLinkTableController.
        
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        Set the visited link provider.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h:
        Add addVisitedLinkWithURL: method.

        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm:
        (-[_WKVisitedLinkProvider addVisitedLinkWithURL:]):
        Compute a link hash from the absolute URL string and pass it to the underlying VisitedLinkProvider object.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::addProcess):
        Add the process to the m_processes HashCountedSet. If it's the first time we're adding the process, 
        add the VisitedLinkProvider object as a message receiver and send the visited link table to the process.

        (WebKit::VisitedLinkProvider::removeProcess):
        Remove the process from the m_processes HashCountedSet. If we're removing the last reference to the process,
        remove ourselves as a  message receiver.

        (WebKit::VisitedLinkProvider::addVisitedLinkHash):
        Rename this from addVisitedLink to better indicate what it's doing.

        (WebKit::tableSizeForKeyCount):
        Update for constant rename.

        (WebKit::VisitedLinkProvider::pendingVisitedLinksTimerFired):
        Compute the new pending visited links table size. If it's bigger than our current table, resize the table
        by calling resizeTable. Otherwise, simply try to add the pending hashes to our shared hash table. If successful,
        add the link hash to the addedVisitedLinks table and eventually send it to all processes associated with the visited link provider.

        (WebKit::VisitedLinkProvider::resizeTable):
        Create a new shared memory segment, Set it as the table backing store and add all visited links from the old table. Finally,
        add our pending visited link hashes and send the new table memory to all processes associated with the visited link provider.

        (WebKit::VisitedLinkProvider::sendTable):
        Helper function that creates a shared memory handle and sends it to a given web process.

        * UIProcess/VisitedLinkProvider.h:
        Add new members.

        * UIProcess/VisitedLinkProvider.messages.in:
        Add messages.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::processDidFinishLaunching):
        (WebKit::WebContext::disconnectProcess):
        The WebContext no longer needs to inform the visited link provider about the processes coming and going, that's already handled
        by the WebPageProxy objects.

        (WebKit::WebContext::addVisitedLink):
        Call addVisitedLinkHash on the visited link provider.

        * UIProcess/WebContext.h:
        * UIProcess/WebContext.messages.in:
        Remove a message that is now implemented by the visited link provider.

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

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::VisitedLinkTableController::VisitedLinkTableController):
        Add the table controller as a message receiver.

        (WebKit::VisitedLinkTableController::~VisitedLinkTableController):
        Remove the table controller as a message receiver.

        (WebKit::VisitedLinkTableController::isLinkVisited):
        Check if the link is visited according to the visited link table.

        (WebKit::VisitedLinkTableController::addVisitedLink):
        Send the link hash to the UI process if it's not already visited.

        (WebKit::VisitedLinkTableController::setVisitedLinkTable):
        Set the backing store memory and invalidate all styles.

        (WebKit::VisitedLinkTableController::visitedLinkStateChanged):
        Invalidate the styles for the given links.

        (WebKit::VisitedLinkTableController::allVisitedLinkStateChanged):
        Invalidate the styles for all links.

        * WebProcess/WebPage/VisitedLinkTableController.h:
        Add new members.

        * WebProcess/WebPage/VisitedLinkTableController.messages.in:
        Add new messages.

        * WebProcess/WebProcess.cpp:
        Remove unused functions; these are handled by VisitedLinkTableController now.

        * WebProcess/WebProcess.h:
        (WebKit::WebProcess::shouldTrackVisitedLinks):
        Add getter.

        * WebProcess/WebProcess.messages.in:
        Remove messages.

2014-03-12  Sergio Villar Senin  <svillar@igalia.com>

        Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=129612

        Reviewed by Darin Adler.

        For new code use static NeverDestroyed<T> instead.

        * DatabaseProcess/IndexedDB/sqlite/SQLiteIDBCursor.cpp:
        (WebKit::getIndexStatement):
        (WebKit::getObjectStoreStatement):
        * Shared/linux/SeccompFilters/SeccompBroker.cpp:
        (WebKit::SeccompBrokerClient::shared):
        * UIProcess/InspectorServer/WebInspectorServer.cpp:
        (WebKit::WebInspectorServer::didReceiveWebSocketUpgradeHTTPRequest):

2014-03-14  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16319722> [Cocoa] WKHistoryDelegate is being called for subframes
        https://bugs.webkit.org/show_bug.cgi?id=130228

        Reviewed by Mark Rowe.

        * UIProcess/Cocoa/HistoryClient.mm:
        (WebKit::HistoryClient::didNavigateWithNavigationData): Bail out if the frame is not the
        main frame.
        (WebKit::HistoryClient::didPerformClientRedirect): Ditto.
        (WebKit::HistoryClient::didPerformServerRedirect): Ditto.
        (WebKit::HistoryClient::didUpdateHistoryTitle): Ditto.

2014-03-13  Jinwoo Jeong  <jw00.jeong@samsung.com>

        Refactor Vibration algorithm to use only one timer.
        https://bugs.webkit.org/show_bug.cgi?id=130059

        Reviewed by Darin Adler.

        This patch adds a vibration unit test regression after r161257.
        It consists of two short term requests to check
        that Vibration could work properly by sequential requests.

        Indeed this patch tightens condition of existing tests.

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

2014-03-13  Paul Hankes Drielsma  <phd@apple.com>

        Add SPI to set a custom user agent on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130164

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _customUserAgent]):
        (-[WKWebView _setCustomUserAgent:]):
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

2014-03-13  Paul Hankes Drielsma  <phd@apple.com>

        Add SPI to run javascript in main frame on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130047

        Reviewed by Anders Carlsson.

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

2014-03-13  Benjamin Poulain  <bpoulain@apple.com>

        The viewport code should not depend on WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=130218

        Reviewed by Tim Horton.

        Get the viewport size from the UIProcess when creating a new WebProcess.
        From there, the value is stored in WebPage and used whenever we need to update
        the viewport parameters.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::viewportScreenSize):
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::viewportScreenSize):
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::viewportScreenSize):

2014-03-13  Beth Dakin  <bdakin@apple.com>

        Do not show extended background during a pinch gesture on iOS
        https://bugs.webkit.org/show_bug.cgi?id=130152
        -and corresponding-
        <rdar://problem/16303819>

        Reviewed by Simon Fraser.

        This patch refactors the backgroundColor-setting logic into its own method so that 
        it can be called from both _didCommitLayerTree and scrollViewDidZoom.

        Only set the UIScrollView’s background color when the zoomScale is greater than or 
        equal to the minimumZoomScale. Also do not set it during the zoom bounce 
        animation. Otherwise, clear the background color by setting it to nil.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView updateScrollViewBackground]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView scrollViewDidZoom:]):

2014-03-13  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] block selection should avoid large blocks.
        https://bugs.webkit.org/show_bug.cgi?id=130208
        <rdar://problem/16251785>

        Reviewed by Benjamin Poulain.

        When creating a block selection, we should discard blocks that
        are larger than most of the visible portion of the document.
        This prevents the accidental selection the entire document, which
        is fairly common when tapping over empty areas.

        * Shared/InteractionInformationAtPosition.cpp:
        (WebKit::InteractionInformationAtPosition::encode):
        (WebKit::InteractionInformationAtPosition::decode):
        * Shared/InteractionInformationAtPosition.h: Removed selectionRects that was not really needed and
        added isSelectable to indicate whether the selection can start.
        (WebKit::InteractionInformationAtPosition::InteractionInformationAtPosition):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView hasSelectablePositionAtPoint:]): Now uses isSelectable.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getPositionInformation): Takes into account the userSelect property
        to figure out if the element can be selected and discards blocks that are
        larger than 97% of the visible area of the document.

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Rename WKVisitedLinkProvider to _WKVisitedLinkProvider and make it private
        https://bugs.webkit.org/show_bug.cgi?id=130207

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKVisitedLinkProviderPrivate.h: Removed.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _visitedLinkProvider]):
        (-[WKWebViewConfiguration _setVisitedLinkProvider:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKVisitedLinkProvider.h.
        * UIProcess/API/Cocoa/_WKVisitedLinkProvider.mm: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKVisitedLinkProvider.mm.
        (-[_WKVisitedLinkProvider init]):
        * UIProcess/API/Cocoa/_WKVisitedLinkProviderInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKVisitedLinkProviderInternal.h.
        * WebKit2.xcodeproj/project.pbxproj:

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Remove a commented out member function
        https://bugs.webkit.org/show_bug.cgi?id=130204

        Reviewed by Tim Horton.

        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::canSendMessage):

2014-03-13  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Crash on iPad when displaying a select element with options.
        https://bugs.webkit.org/show_bug.cgi?id=130200
        <rdar://problem/16316187>

        Reviewed by Simon Fraser.

        _singleSelectionIndex should be initialized to NSNotFound for multiSelect elements.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (-[WKSelectTableViewController initWithView:hasGroups:]):

2014-03-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Close the connection when we fail to read from the socket for any unhandled error
        https://bugs.webkit.org/show_bug.cgi?id=130191

        Reviewed by Martin Robinson.

        We currently show an error message, but we should close the
        connection avoid entering an infinite loop. Also provide more
        information in the error message to help when debugging the issue.

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler):

2014-03-13  Radu Stavila  <stavila@adobe.com>

        Webkit not building on XCode 5.1 due to garbage collection no longer being supported
        https://bugs.webkit.org/show_bug.cgi?id=130087

        Reviewed by Mark Rowe.

        Disable garbage collection on macosx when not using internal SDK.

        * Configurations/Base.xcconfig:

2014-03-10  Darin Adler  <darin@apple.com>

        Avoid copy-prone idiom "for (auto item : collection)"
        https://bugs.webkit.org/show_bug.cgi?id=129990

        Reviewed by Geoffrey Garen.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): Use auto&.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode): Use auto&
        even though the type is a scalar. This does no harm and makes it easier
        to spot uses that trigger unnecessary copying with grep.
        (WebKit::RemoteLayerTreeTransaction::decode): Ditto.
        (WebKit::dumpChangedLayers): Ditto.
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree): Ditto.
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged): Ditto.

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
        (WKBundleInspectorEvaluateScriptForTest):
        * WebProcess/InjectedBundle/API/c/WKBundleInspector.h:
        * WebProcess/WebPage/WebInspector.cpp:
        (WebKit::WebInspector::evaluateScriptForTest):
        * WebProcess/WebPage/WebInspector.h:

2014-03-13  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Fix the !ENABLE(SQL_DATABASE) build
        https://bugs.webkit.org/show_bug.cgi?id=130130

        Reviewed by Csaba Osztrogonác.

        Add missing #ifdef guard to typedef.

        * UIProcess/API/C/WKDatabaseManager.cpp:

2014-03-12  Dean Jackson  <dino@apple.com>

        [WebGL] WebKit1 + WebKit2 iOS clients should check load policy
        https://bugs.webkit.org/show_bug.cgi?id=130162

        Reviewed by Simon Fraser.

        Implement webGLPolicyForURL() methods for iOS.

        * Configurations/WebContent-iOS.entitlements: Add the MobileAsset asset type.
        * Configurations/WebKit2.xcconfig: Add MobileAsset to iOS link list.
        * WebProcess/WebPage/WebPage.cpp: Exclude iOS.
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::webGLPolicyForURL): Call into WKSI.
        (WebKit::WebPage::resolveWebGLPolicyForURL):

2014-03-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Disable REMOTE_INSPECTOR in earlier OS X releases
        https://bugs.webkit.org/show_bug.cgi?id=130118

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:

2014-03-12  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Crash when trying to select inside a video element with longpress..
        https://bugs.webkit.org/show_bug.cgi?id=130095
        <rdar://problem/16294534>

        Reviewed by Benjamin Poulain.

        We only need to set the assisted node for nodes that will receive an
        input peripheral (keyboard, picker, popover, etc.).

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

2014-03-12  Simon Fraser  <simon.fraser@apple.com>

        Have the scrolling tree track the viewport size, not the viewport rect
        https://bugs.webkit.org/show_bug.cgi?id=130141

        Reviewed by Beth Dakin.

        The scrolling tree only needs to know the size of the viewport, not its
        origin, since the origin is deduced from the updated scroll position.

        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
        (ArgumentCoder<ScrollingStateScrollingNode>::encode):
        (ArgumentCoder<ScrollingStateScrollingNode>::decode):

2014-03-12  Commit Queue  <commit-queue@webkit.org>

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

        That didn't go well. (Requested by kling on #webkit).

        Reverted changeset:

        https://bugs.webkit.org/show_bug.cgi?id=130140
        http://trac.webkit.org/changeset/165481

2014-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Runtime error when page is closed while print operation is in progress
        https://bugs.webkit.org/show_bug.cgi?id=129869

        Reviewed by Anders Carlsson.

        Sometimes when the page is closed right after printing the web
        process aborts with the runtime message "pure virtual method
        called terminate called without an active exception".
        This happens because the page is closed when the pages have been
        printed, but print job is still ongoing sending the data to the
        printer. When print job finishes, we try to notify the UI process
        sending the print callback message using WebPage::send(), but the
        web page object has been destroyed. The virtual method it complains
        about is probably MessageSender::messageSenderDestinationID() used
        by send(). Since our print operation is always asynchronous, we
        need a way to notify the web page when the print operation has
        actually finished to clean it up, but also notify the print
        operation when the page has been closed to not try to notify the
        UI process in that case.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::close): Call disconnectFromPage to notify the
        print operation in case there's an ongoing print job.
        (WebKit::WebPage::endPrinting): Do not cleanup the print operation
        here, since the print opertation might not have finished yet.
        (WebKit::WebPage::didFinishPrintOperation): Send
        PrintFinishedCallback message to the Ui process and cleanup the
        print operation.
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:
        (WebKit::WebPrintOperationGtk::disconnectFromPage): Set m_webPage
        to nullptr.
        (WebKit::WebPrintOperationGtk::printDone): Call
        didFinishPrintOperation() is the web page hasn't been closed.
        * WebProcess/WebPage/gtk/WebPrintOperationGtk.h:

2014-03-12  Andreas Kling  <akling@apple.com>

        BundlePageDiagnosticLoggingClient leaks every string passing through it.
        <https://webkit.org/b/130140>
        <rdar://problem/15416838>

        Use toAPI() instead of toCopiedAPI() so the receiving end doesn't need
        to worry about adopting the WKStringRef.

        Reviewed by Anders Carlsson.

        * WebProcess/InjectedBundle/InjectedBundlePageDiagnosticLoggingClient.cpp:
        (WebKit::InjectedBundlePageDiagnosticLoggingClient::logDiagnosticMessage):

2014-03-12  Tim Horton  <timothy_horton@apple.com>

        Hook up image controls for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=130062
        <rdar://problem/15964809>

        Reviewed by Brady Eidson.

        * Shared/ContextMenuContextData.cpp:
        (WebKit::ContextMenuContextData::ContextMenuContextData):

2014-03-11  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r165356): [Mac] Multi-part key bindings don't work
        https://bugs.webkit.org/show_bug.cgi?id=130100

        Reviewed by Darin Adler.

        Restore the previous behavior, where we only interpreted keydowns (including those
        coming through performKeyEquivalent).

        In the future, we might send all events to input methods, but not to key bindings.

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

2014-03-11  Beth Dakin  <bdakin@apple.com>

        _pageExtendedBackgroundColor should not be exposed on WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130093

        Reviewed by Simon Fraser.

        Added comment indicating that _pageExtendedBackgroundColor is deprecated.
        * UIProcess/API/Cocoa/WKViewPrivate.h:

        _pageExtendedBackgroundColor now returns nil, but the conversation functionality 
        is maintained with a convenience method pageExtendedBackgroundColor.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView pageExtendedBackgroundColor]):
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        (-[WKWebView _pageExtendedBackgroundColor]):

        Added comment indicating that _pageExtendedBackgroundColor is deprecated.
        * UIProcess/API/Cocoa/WKWebViewPrivate.h:

        Return nil.
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _pageExtendedBackgroundColor]):

2014-03-11  Jae Hyun Park  <jaepark@webkit.org>

        [GTK][CMake] Add HARFBUZZ_INCLUDE_DIRS to WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=130070

        Reviewed by Martin Robinson.

        * PlatformGTK.cmake:

2014-03-10  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Expose WebPageProxy::close
        https://bugs.webkit.org/show_bug.cgi?id=130068

        Reviewed by Adele Peterson.

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

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WebKit 2] Wire the unobscured rect in the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=130058

        Reviewed by Simon Fraser.

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

2014-03-10  Simon Fraser  <simon.fraser@apple.com>

        Fix three leaks
        https://bugs.webkit.org/show_bug.cgi?id=130048

        Reviewed by Anders Carlsson.

        * Shared/API/Cocoa/WKRemoteObjectCoder.mm:
        (decodeObject): Code is simpler and less leaky without the RetainPtr.
        * UIProcess/API/Cocoa/WKNavigationAction.mm: Fix _originalURL leak
        by making it a RetainPtr and implementing the getter and setter.
        (-[WKNavigationAction _setOriginalURL:]):
        (-[WKNavigationAction _originalURL]):

2014-03-10  Beth Dakin  <bdakin@apple.com>

        Set background color of WK2's UIScrollView to the pageExtendedBackgroundColor
        https://bugs.webkit.org/show_bug.cgi?id=129919

        Reviewed by Benjamin Poulain.

        Make the pageExtendedBackgroundColor part of a RemoteLayerTreeTransaction.
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::pageExtendedBackgroundColor):
        (WebKit::RemoteLayerTreeTransaction::setPageExtendedBackgroundColor):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):

        Set the background color of the UIScrollView based on the 
        pageExtendedBackgroundColor.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):

        For the sake of PLATFORM(MAC), continue to support the fact that this color can be 
        set via a message from the WebProcess or the new RemoteLayerTreeTransaction.
        * UIProcess/WebPageProxy.h:

        Cache the pageExtendedBackgroundColor as provided by the 
        RemoteLayerTreeTransaction.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):

        It’s not necessary to do anything here in non-Mac platforms anymore.
        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
        (WebKit::WebChromeClient::pageExtendedBackgroundColorDidChange):

        Include the pageExtendedBackgroundColor in the RemoteLayerTreeTransaction.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):

2014-03-10  Benjamin Poulain  <bpoulain@apple.com>

        Generalize unobscured rect to all ports
        https://bugs.webkit.org/show_bug.cgi?id=130036

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForMagnificationGesture):
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
        (WebKit::TiledCoreAnimationDrawingArea::applyTransientZoomToPage):

2014-03-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16278716> [Cocoa] Allow setting a custom group identifier on a WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=130033

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]): Create a page group with the group identifier
        from the configuration, if it’s non-empty.
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration _groupIdentifier]): Added this accessor.
        (-[WKWebViewConfiguration _setGroupIdentifier:]): Ditto.
        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: Declared _groupIdentifier property.

2014-03-10  Enrica Casucci  <enrica@apple.com>

        WebKit2: Crash in WebPage::getPositionInformation.
        https://bugs.webkit.org/show_bug.cgi?id=129936
        <rdar://problem/16264550>
 
        Reviewed by Eric Carlson.
 
        Missing null check on the node renderer in one code path.
        If the page body is smaller than the document, hit testing
        will return HTMLHtmlElement that has no renderer.

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

2014-03-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up library linking
        https://bugs.webkit.org/show_bug.cgi?id=129782

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Use the new macro.

2014-03-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] The web process can finish while a print operation is still ongoing
        https://bugs.webkit.org/show_bug.cgi?id=129871

        Reviewed by Martin Robinson.

        This can happen when the last page is closed while the print job
        is sending data to the printer.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp: Disable web
        process termination when the print job is sending data to the
        printer and enable it again when job finishes.

2014-03-09  Jeong Yong-uk  <yong@company100.com>

        Update comment in NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=129997

        Reviewed by Andreas Kling.

        NetworkResourceLoader::resourceHandleStopped() has been renamed to
        NetworkResourceLoader::cleanup() but the comment is not updated.

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

2014-03-09  Alexey Proskuryakov  <ap@apple.com>

        iOS build fix.

        * WebProcess/WebPage/ios/WebPageIOS.mm: Include WebCore/KeyboardEvent.h.

2014-03-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Don't perform a round-trip through WebProcess before interpreting key events
        https://bugs.webkit.org/show_bug.cgi?id=129812

        Reviewed by Darin Adler.

        * Shared/NativeWebKeyboardEvent.h:
        * Shared/WebEvent.h:
        (WebKit::WebKeyboardEvent::handledByInputMethod):
        (WebKit::WebKeyboardEvent::commands):
        * Shared/WebEventConversion.cpp:
        (WebKit::WebKit2PlatformKeyboardEvent::WebKit2PlatformKeyboardEvent):
        * Shared/WebKeyboardEvent.cpp:
        (WebKit::WebKeyboardEvent::WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::~WebKeyboardEvent):
        (WebKit::WebKeyboardEvent::encode):
        (WebKit::WebKeyboardEvent::decode):
        * Shared/mac/NativeWebKeyboardEventMac.mm:
        (WebKit::NativeWebKeyboardEvent::NativeWebKeyboardEvent):
        * Shared/mac/WebEventFactory.h:
        * Shared/mac/WebEventFactory.mm:
        (WebKit::WebEventFactory::createWebKeyboardEvent):
        Keyboard events now carry results of interpretation with them.
        Ideally, mouse events should also have a handledByInputMethod member, because IMs
        can handle events, but that can wait until we have actual bugs caused by not diabling
        default processing for these.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView becomeFirstResponder]): Updated for new NativeWebKeyboardEvent contructor
        signature. We don't interpret the event in this code path.
        (-[WKView doCommandBySelector:]): Added logging.
        (-[WKView performKeyEquivalent:]): Reimplemented Esc and Cmd+period handling to avoid
        infinite loops and re-entrancy. These two work in a unique way in AppKit.
        Interpret key event before sending it down to WebProcess.
        (-[WKView keyUp:]): Interpret key event before sending it down to WebProcess.
        We need to tell IMs about the event, but key binding processing is moot, all commands
        are executed on keydown.
        (-[WKView keyDown:]): Interpret the event.
        (-[WKView flagsChanged:]): Ditto.
        (-[WKView _interpretKeyEvent:savingCommandsTo:WebCore::]): Added an assertion in
        consumedByIM code path.
        (-[WKView _executeSavedCommandBySelector:]): Added logging.

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        Removed interpretQueuedKeyEvent/interpretKeyEvent, WebProcess no longer asks UIProcess to do this.

        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::handleKeyboardEvent):
        (WebKit::WebEditorClient::handleInputMethodKeydown):
        WebPage::handleEditingKeyboardEvent is now one function instead of two with a boolean
        switch between two behaviors.

        * WebProcess/WebPage/WebPage.cpp:(WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        Removed m_keyboardEventBeingInterpreted, as we no longer send the event for interpretation.
        This means that we sometimes have to pass a null event down to WebCore, but I wasn't
        able to find any behavior differences from us doing so.

        * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::handleEditingKeyboardEvent):
        Added a FIXME.

        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::executeKeypressCommandsInternal): When we don't have an event,
        use current frame as a target, just like input method messages do.
        (WebKit::WebPage::handleEditingKeyboardEvent): This function no longer saves commands,
        it only interprets them.
        Added a check for Esc, as we don't want to handle it in keydown event handler.
        (WebKit::WebPage::insertText): Pass 0 instead of m_keyboardEventBeingInterpreted.
        (WebKit::WebPage::insertDictatedText): Ditto.
        (WebKit::WebPage::executeKeypressCommands): Ditto.

2014-03-09  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Pass FloatSize boxsize to transform animations to support device pixel sizing.
        https://bugs.webkit.org/show_bug.cgi?id=129985

        Reviewed by Simon Fraser.

        This is in preparation to stop passing integral positioned boxes to transform animations.

        No change in behavior.

        * WebProcess/WebPage/mac/GraphicsLayerCARemote.h:

2014-03-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS Wk2] Can't scroll after going back to page in page cache
        https://bugs.webkit.org/show_bug.cgi?id=129989
        <rdar://problem/16217588>

        Reviewed by Dan Bernstein.

        iOS has a special FrameLoader::forceLayoutWithoutRecalculatingStyle()
        function that is called instead of FrameView::forceLayout(). This was unimplemented
        for the WK2 FrameLoaderClient, so no layout was forced, with the result
        that the contentSize was never updated and scrolling was broken.
        
        Fix by renaming the client function to forceLayoutOnRestoreFromPageCache()
        and having it return a bool to say whether the default forceLayout()
        should be done. WK1 can then continue to have its custom behavior,
        and Wk2 will simply do a forceLayout().
        
        Also remove FrameLaoderClient::forceLayout(), which was never called.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        (WebKit::WebFrameLoaderClient::forceLayoutOnRestoreFromPageCache):

2014-03-08  Simon Fraser  <simon.fraser@apple.com>

        [iOS WK2] Get position:fixed working slighlty better
        https://bugs.webkit.org/show_bug.cgi?id=129988

        Reviewed by Dan Bernstein.
        
        iOS uses fixed layout, but does not want fixed elements laid
        out relative to the frame.

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

2014-03-08  Jon Lee  <jonlee@apple.com>

        iOS broken after r165342
        https://bugs.webkit.org/show_bug.cgi?id=129987

        Reviewed by Simon Fraser.

        * NetworkProcess/ios/NetworkProcessIOS.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler): Add missing stub implementation for
        platformLowMemoryHandler().

2014-03-08  Eric Carlson  <eric.carlson@apple.com>

        [iOS] media preferences not initialized correctly in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129983

        Reviewed by Dan Bernstein.

        * Shared/WebPreferencesStore.h: Initialize mediaPlaybackAllowsInline and 
        mediaPlaybackRequiresUserGesture correctly for iOS.

2014-03-08  Jeremy Jones  <jeremyj@apple.com>

        Allow media element to supply the video layer after fullscreen transition has already begun.
        https://bugs.webkit.org/show_bug.cgi?id=129870

        Reviewed by Eric Carlson.

        WebVideoFullscreenManager and WebVideoFullscreenManagerProxy do their own remote hosting of the video layer instead of needing the video layer to have already been hosted elsewhere. This allows the removal of the coordination with WebPageProxy via a RemoteLayerTreeTransaction.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        Remove m_videoLayerIDsPendingFullscreen and accessors.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        Don't encode m_videoLayerIDsPendingFullscreen

        (WebKit::RemoteLayerTreeTransaction::decode):
        Don't decode m_videoLayerIDsPendingFullscreen

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        Don't forward didCommitLayerTree to m_videoFullscreenManager.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Remove code for synchronizing with the RenderTree.
        Add a hosting layer and methods to keep video layer frame and video gravity synchronized.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Change IPC interface to fascilitate rehosting video layer with a instead of coordinating with the RenderTree by PlatformLayerID.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        Remove initialization for removed members.

        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreenWithID):
        Rehost the video layer by id and pass on the layer.
        This replaces didCommitLayerTree() and  willLendVideoLayerWithID(). 

        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        Cleanup the hosting layer.

        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerFrame):
        Forward on the video layer's frame to keep the hosted layer in sync with the interface.

        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerGravity):
        Forward the videolayer gravity.

        * WebKit2.xcodeproj/project.pbxproj:
        Rename WebVideoFullscreenManager.cpp to WebVideoFullscreenManager.mm

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        Don't invovle the m_videoFullscreenManager in layer tree transactions.

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Remove code that synchronizes with the render tree via RemoteLayerTreeTransaction.
        Instead rehost the video layer directly.
        Instead of hoping the WebVideoFullscreenModel has a videoLayer, supply one into which
        it can add whatever it likes as needed.

        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        No more explicit borrowing and returning video layers.
        Add functions to keep video layer bounds and gravity in sync with the UI. 

        * WebProcess/ios/WebVideoFullscreenManager.mm: Renamed from Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.cpp.
        Removed code for synchronizing via RemoteLAyerTreeTransaction.

        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager):
        Remove initialization for removed memeber m_sendUnparentVideoLayerTransaction.

        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode):
        Creates a fullscreen layer, gives it to the WebVideoFullscreenModel to fill in,
        and hosts it in a context to send to the UIProcess.

        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode):
        remove enterFullscreen() and just directly send the IPC message. 

        (WebKit::WebVideoFullscreenManager::didExitFullscreen):
        Clean up the hosting context.

        (WebKit::WebVideoFullscreenManager::setVideoLayerGravityEnum):
        Forward on the video gravity. Type convert from unsigned to MediaPlayer::VideoGravity.

2014-03-08  Andreas Kling  <akling@apple.com>

        [WK2] Improve the network process low memory handler.
        <https://webkit.org/b/129977>

        Split the network process low memory handler into platform-specific
        and shared parts. The shared part tells FastMalloc to release freed
        pages back to the OS.

        For Mac, added a call to purge the in-memory part of CFURLCache.
        Remove the malloc_zone_pressure_relief() since that is now taken care
        of by the shared MemoryPressureHandler code.

        Reviewed by Darin Adler.

        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::lowMemoryHandler):
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformLowMemoryHandler):
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

2014-03-08  Jae Hyun Park  <jaepark@webkit.org>

        Remove unnecessary casting in NetworkProcessMainUnix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=129968

        Reviewed by Andreas Kling.

        * NetworkProcess/unix/NetworkProcessMainUnix.cpp:
        Since socket is an int, int casting is not necessary.

        (WebKit::NetworkProcessMain):

2014-03-08  Aaron Golden  <golden@inkling.com>

        Prevent processes spawned by WebProcess from trying to insert the SecItem shim.
        https://bugs.webkit.org/show_bug.cgi?id=129864

        Reviewed by Anders Carlsson.

        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:
        (WebKit::WebContentProcessMainDelegate::doPreInitializationWork):

2014-03-07  Tim Horton  <timothy_horton@apple.com>

        [WebKit2][iOS] PDF
        https://bugs.webkit.org/show_bug.cgi?id=129600
        <rdar://problem/15260216>

        Reviewed by Anders Carlsson.

        Add a single custom content provider which installs a very primitive PDF view
        in place of the WKContentView if a PDF is loaded in the main frame.

        * Configurations/WebKit2.xcconfig:
        Link against CorePDF, for UIPDFPageView.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm:
        (-[WKWebViewContentProviderRegistry init]):
        Initialize the registry, using WKPDFView for all PDF MIME types.

        * WebKit2.xcodeproj/project.pbxproj:
        * UIProcess/ios/WKPDFView.h: Added.
        * UIProcess/ios/WKPDFView.mm: Added.
        Add a very simple PDF view based on UIPDFPageView. Additional functionality
        can come in the future; right now, we just create one view for each page, and
        depend on CATiledLayer to only paint the pages that are being displayed.

2014-03-07  Andreas Kling  <akling@apple.com>

        ArgumentEncoder and ArgumentDecoder should be fastmalloced.
        <https://webkit.org/b/129960>

        Reviewed by Ryosuke Niwa.

        * Platform/IPC/ArgumentDecoder.h:
        * Platform/IPC/ArgumentEncoder.h:

2014-03-07  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build after the recent iOS merge.

        * UIProcess/API/gtk/PageClientImpl.cpp: Make some methods available to non-Cocoa ports and fix some signatures.
        * UIProcess/WebPageProxy.h: Ditto.

2014-03-07  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed. Fix build on the EFL port after r165303

        * UIProcess/CoordinatedGraphics/WebView.cpp:
        (WebKit::WebView::didCommitLoadForMainFrame): Added new parameters.
        * UIProcess/CoordinatedGraphics/WebView.h: Ditto.
        * UIProcess/WebPageProxy.h:
        * UIProcess/efl/WebViewEfl.cpp: Added dummy didFinishLoadingDataForCustomContentProvider()
        (WebKit::WebViewEfl::exitFullScreen):
        (WebKit::WebViewEfl::didFinishLoadingDataForCustomContentProvider):
        * UIProcess/efl/WebViewEfl.h: Ditto.

2014-03-07  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Keyboard accessory comes up when I click a link.
        https://bugs.webkit.org/show_bug.cgi?id=129949
        <rdar://problem/16265305>

        Reviewed by Simon Fraser.

        We need to create the accessory view only when needed.

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

2014-03-07  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Long-press on a link shows just "Copy".
        https://bugs.webkit.org/show_bug.cgi?id=129938
        <rdar://problem/16266054>

        Reviewed by Benjamin Poulain.

        When adding a FIXME comment, I accidentally removed the ! on
        the if (!element) condition.

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

2014-03-07  Tim Horton  <timothy_horton@apple.com>

        [WebKit2][iOS] Main-frame custom content providers
        https://bugs.webkit.org/show_bug.cgi?id=129809

        Reviewed by Dan Bernstein.

        Re-introduce custom content providers to WebKit2 (removed in r152841), but
        for iOS this time.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        Send the initial MIME types that have custom content providers to the WebProcess.

        (-[WKWebView dealloc]):
        Unregister our page from the content provider registry.
        
        (-[WKWebView _setHasCustomContentView:loadedMIMEType:]):
        Install/uninstall the custom content provider. Create a view, if needed,
        based on the class that the registry has associated with the given MIME type.
        We unparent the WKContentView while the custom content provider is active,
        and re-use the existing WKScrollView to contain the custom content provider.

        (-[WKWebView _didFinishLoadingDataForCustomContentProviderWithSuggestedFilename:dataReference:]):
        Forward loaded data on to the custom content provider for display.

        (-[WKWebView _didCommitLayerTree:WebKit::]):
        Assert that we aren't getting layer tree commits while using a custom content provider.

        (-[WKWebView viewForZoomingInScrollView:]):
        If we're using a custom content provider, its view should be used for zooming
        instead of the (unparented) web content view.

        (-[WKWebView hasContentView]):
        (-[WKWebView scrollViewWillBeginZooming:withView:]):
        (-[WKWebView scrollViewWillBeginDragging:]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView _updateVisibleContentRects]):
        If we do not have a parented WKContentView because we are using a custom
        content provider, we should not forward scroll view related changes to it.

        (-[WKWebView _frameOrBoundsChanged]):
        Update the minimum size of the custom content provider if the web view size changes.

        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration _contentProviderRegistry]):
        (-[WKWebViewConfiguration _setContentProviderRegistry:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationInternal.h: Added.
        Add an internal WKWebViewConfiguration property, the WKWebViewContentProviderRegistry.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:

        * UIProcess/Cocoa/WKWebViewContentProvider.h: Added.
        A minimal protocol for informing custom content providers of changes to
        the size of the view, the represented data, and the owning scroll view.

        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.h: Added.
        * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: Added.
        (-[WKWebViewContentProviderRegistry addPage:]):
        (-[WKWebViewContentProviderRegistry removePage:]):
        (-[WKWebViewContentProviderRegistry registerProvider:forMIMEType:]):
        (-[WKWebViewContentProviderRegistry providerForMIMEType:]):
        (-[WKWebViewContentProviderRegistry mimeTypesWithContentProviders]):
        New class, keeps track of a mapping from MIME types to UIViews that
        conform to the WKWebViewContentProvider protocol.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::didCommitLoadForFrame):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

        * UIProcess/PageClient.h:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::didFinishLoadingDataForCustomContentProvider):
        Add parameters to didCommitLoadForMainFrame, indicating if we should use
        a custom content provider to display the main frame, and what MIME type
        was loaded in said frame, and add didFinishLoadingDataForCustomContentProvider.
        On iOS, forward these to the WKWebView.
        Also, give PageClientImplIOS a reference to the WKWebView.
        
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
        (-[WKWebProcessPlugInFrame _hasCustomContentProvider]):
        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFramePrivate.h:
        Expose whether or not a given frame has a custom content provider to the plug-in.

        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebKit::WebFrameLoaderClient::WebFrameLoaderClient):
        (WebKit::WebFrameLoaderClient::hasHTMLView):
        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::WebFrameLoaderClient::committedLoad):
        (WebKit::WebFrameLoaderClient::finishedLoading):
        (WebKit::WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebKit::WebFrameLoaderClient::canCachePage):
        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
        (WebKit::WebFrameLoaderClient::frameHasCustomContentProvider):
        Restore WebFrameLoaderClient custom representation code, which ensures
        that data is routed correctly (to the UI process, and not to WebCore) and
        that we don't try to use the page cache for frames with content providers.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::mainFrameHasCustomContentProvider):
        (WebKit::WebPage::addMIMETypeWithCustomContentProvider):
        (WebKit::WebPage::shouldUseCustomContentProviderForResponse):
        (WebKit::WebPage::canShowMIMEType):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        Keep a list of MIME types which can be displayed via custom content providers
        in WebPage, which will be pushed down from the registry as new providers
        are added. Plug-ins still take precendence over custom content providers.

2014-03-07  Anders Carlsson  <andersca@apple.com>

        MigrateHeaders.make should remove C SPI includes from WebKit2 headers
        https://bugs.webkit.org/show_bug.cgi?id=129937
        <rdar://problem/15920020>

        Reviewed by Tim Horton.

        * WebKit2.xcodeproj/project.pbxproj:
        Make WKPreferences.h and all headers it includes public. Update the post processing of WKBase.h
        to account for WKBase.h now being a public header again.

2014-03-07  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r164847): Pressing the command key while hovering an element causes it to un-hover
        https://bugs.webkit.org/show_bug.cgi?id=129872

        Reviewed by Tim Horton.

        * UIProcess/API/Cocoa/WKViewPrivate.h: Changes in performDictionaryLookupAtCurrentMouseLocation
        were also not correct, because the current event could be a keyboard one (Cmd+Ctrl+D).
        But this SPI is unused, and can be simply removed.

        * UIProcess/API/mac/WKView.mm: (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]):
        locationInWindow is undefined for keyboard events, so we have to use current location.
        Thankfully, there is a method that returns the location in appropriate coordinate
        space, unlike +[NSEvent mouseLocation] that we used before.

2014-03-07  Andy Estes  <aestes@apple.com>

        [iOS] Install WebKit2 XPC services to the correct place during iOS Simulator builds
        https://bugs.webkit.org/show_bug.cgi?id=129914

        Reviewed by Dan Bernstein.

        We weren't specifying INSTALL_PATH for iOS Simulator builds in
        BaseXPCService.xcconfig, and r164576 changed INSTALL_PATH to
        INSTALL_PATH_ACTUAL. This caused XPC services to start being installed
        to the root of the iOS Simulator SDK. Fix this by setting
        INSTALL_PATH_ACTUAL for iphonesimulator.

        * Configurations/BaseXPCService.xcconfig:

2014-03-07  Andreas Kling  <akling@apple.com>

        [Mac] Notify system malloc of fake memory pressure.
        <https://webkit.org/b/129908>

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/NetworkProcessMac.mm:
        (WebKit::NetworkProcess::platformInitializeNetworkProcess):

            Listen for the fake memory pressure notification and respond by
            just forwarding to system malloc. We don't do the full WebCore
            memory pressure handling here, since that will cause stuff that
            the network process doesn't need to get instantiated.

2014-03-07  Dean Jackson  <dino@apple.com>

        Attempt to fix the iOS build.

        * Configurations/WebKit2.xcconfig: Add -framework OpenGLES to linking.

2014-03-07  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Add an updateID to visibleContentRect updates which is passed back in layer transactions, so we know whether transactions are stale
        https://bugs.webkit.org/show_bug.cgi?id=129897

        Reviewed by Benjamin Poulain.

        In WebKit2 on iOS we need to know when layer updates from the web process
        are stale with respect to visible rect updates from the UI process. Do so
        by adding an updateID to VisibleContentRectUpdateInfo, and storing it
        on each side, returning it in RemoteLayerTreeTransaction.
        
        Did some re-ordering of members and encoding order in RemoteLayerTreeTransaction
        to group like data members together.
        
        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::updateID):
        (WebKit::operator==):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::setLastVisibleContentRectUpdateID):
        (WebKit::RemoteLayerTreeTransaction::lastVisibleContentRectUpdateID):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::nextVisibleContentRectUpdateID):
        (WebKit::WebPageProxy::lastVisibleContentRectUpdateID):
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::willCommitLayerTree):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):

2014-03-07  Roger Fong  <roger_fong@apple.com>

        Replace setSystemWebGLLoadPolicy API with methods to query for WebGL blocking policy.
        https://bugs.webkit.org/show_bug.cgi?id=129873.

        Reviewed by Dean Jackson.

        Remove setSystemWebGLLoadPolicy API.
        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::resolveWebGLLoadPolicy):
        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageLoaderClient):
        * UIProcess/API/C/WKPageLoaderClient.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resolveWebGLPolicyForURL):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::webGLPolicyForURL):

        Add API to directly query the WebGL blocking policies from WKSI.
        * UIProcess/API/C/mac/WKContextPrivateMac.h:
        * UIProcess/API/C/mac/WKContextPrivateMac.mm:
        (WKContextShouldBlockWebGL):
        (WKContextShouldSuggestBlockWebGL):

2014-03-07  Eric Carlson  <eric.carlson@apple.com>

        Initialize new WKSI functions for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129889

        Reviewed by Simon Fraser.

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

2014-03-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use final and override in WebPrintOperationGtk
        https://bugs.webkit.org/show_bug.cgi?id=129868

        Reviewed by Sergio Villar Senin.

        * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:

2014-03-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Allow com.apple.GSSCred in WebKit sandbox profiles
        https://bugs.webkit.org/show_bug.cgi?id=129777
        <rdar://problem/16050832>

        Reviewed by Anders Carlsson.

        * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:
        * WebProcess/com.apple.WebProcess.sb.in:

2014-03-06  Filip Pizlo  <fpizlo@apple.com>

        If the FTL is build-time enabled then it should be run-time enabled.

        Rubber stamped by Geoffrey Garen.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::WebProcessCreationParameters):
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::registerUserDefaultsIfNeeded):
        (WebKit::WebContext::platformInitializeWebProcess):
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeWebProcess):

2014-03-06  Hyowon Kim  <hw1008.kim@samsung.com>

        [EFL] Move EvasGL classes from WebKit to WebCore namespace.
        https://bugs.webkit.org/show_bug.cgi?id=129797

        Reviewed by Gyuyoung Kim.

        * UIProcess/API/efl/EwkView.h: namespace changes for EvasGLContext/Surface.

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Remove one more setCustomFixedPositionRect() that I missed.

        * UIProcess/DrawingAreaProxy.h:

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Send the fixed position rect to the WebProcess along with the other rects
        https://bugs.webkit.org/show_bug.cgi?id=129856

        Reviewed by Benjamin Poulain.
        
        Remove the functions that pass the custom fixed position rect through
        the DrawingArea, and replace them by adding this rect to the
        VisibleContentRectUpdateInfo, along with the "is stable" flag. We
        then set the custom fixed position rect in the web process for
        stable updates.

        * Shared/VisibleContentRectUpdateInfo.cpp:
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h:
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::customFixedPositionRect):
        (WebKit::VisibleContentRectUpdateInfo::inStableState):
        (WebKit::operator==):
        * UIProcess/DrawingAreaProxy.cpp:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/DrawingArea.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        Remove empty class extension in WKContentViewInteraction
        https://bugs.webkit.org/show_bug.cgi?id=129849

        Reviewed by Enrica Casucci.
        
        This empty class extension is cruft left over from refactoring.
        It can be removed.

        * UIProcess/ios/WKContentViewInteraction.mm:

2014-03-06  Simon Fraser  <simon.fraser@apple.com>

        [iOS] didUpdateVisibleRect: should use fabs, not abs
        https://bugs.webkit.org/show_bug.cgi?id=129843

        Reviewed by Benjamin Poulain.
        
        When zooming we sent messages to the web process with an unchanging
        zoom scale because of use of abs() rather than fabs().

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):

2014-03-06  Anders Carlsson  <andersca@apple.com>

        Remove WebKit1 header includes from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129824

        Reviewed by Dan Bernstein.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (makeResponderFirstResponderIfDescendantOfView):
        Add a new function instead of calling an NSWindow category method that's defined in WebKit1.

        (-[WKFullScreenWindowController enterFullScreen:]):
        (-[WKFullScreenWindowController finishedEnterFullScreenAnimation:]):
        (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]):
        Call makeResponderFirstResponderIfDescendantOfView.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        Remove unused WebKit1 header import.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::documentFragmentFromAttributedString):
        Change a category to be on NSObject instead of WebResource.

2014-03-06  Jon Lee  <jonlee@apple.com>

        iOS build fix.

        Reviewed by Simon Fraser.

        * UIProcess/ios/SmartMagnificationController.mm:

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Expose the console object in JSContexts to interact with Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=127944

        Reviewed by Geoffrey Garen.

        * WebProcess/WebCoreSupport/WebChromeClient.h:
        Update namespaces.

2014-03-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Close the page when the view is disposed instead of when finalized
        https://bugs.webkit.org/show_bug.cgi?id=129783

        Reviewed by Sergio Villar Senin.

        When a GtkWidget is destroyed, the GObject is disposed, but not
        finalized if it has additional references. When the destroyed
        widget is leaked by the application, we leak the page proxy and
        what is more important the web process in multi-process mode.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseDispose): Close the WebPageProxy.

2014-03-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Build fix.

        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2014-03-05  Chris Fleizach  <cfleizach@apple.com>

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Address review comments from Simon noted in bug.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm:
        (-[WKAccessibilityWebPageObject init]):
        (-[WKAccessibilityWebPageObject dealloc]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm:
        (-[WKAccessibilityWebPageObject accessibilityAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):

2014-03-05  Dean Jackson  <dino@apple.com>

        [WebGL] Use WKSI to see what the system policy for WebGL is
        https://bugs.webkit.org/show_bug.cgi?id=129722
        <rdar://problem/15790542>

        Reviewed by Tim Horton.

        Use the WebKitSystemInterface methods WKShouldBlockWebGL
        and WKShouldSuggestBlockingWebGL to query what the host
        system thinks about the hardware. Tell the client about
        the result in a new WebPage method setSystemWebGLPolicy.

        * UIProcess/API/APILoaderClient.h:
        (API::LoaderClient::setSystemWebGLLoadPolicy): New empty definition.
        * UIProcess/API/C/WKAPICast.h:
        (WebKit::toAPI): Convert a WebGLLoadPolicy into a WKWebGLLoadPolicy.
        * UIProcess/API/C/WKPage.cpp: Call setSystemWebGLLoadPolicy.
        (WKPageSetPageLoaderClient):
        * UIProcess/API/C/WKPageLoaderClient.h: New typedef and entry in client structure.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::setSystemWebGLPolicy):
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in: Add SetSystemWebGLPolicy.
        * Source/WebKit2/Configurations/WebKit2.xcconfig: We have to link against OpenGL now, because WKSI
        uses it for hardware detection.
        * WebProcess/WebPage/WebPage.cpp: Remove the implementation here, but leave
        empty methods for non-Apple platforms.
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::webGLPolicyForURL):
        (WebKit::WebPage::resolveWebGLPolicyForURL):
        * WebProcess/WebPage/WebPage.h: Add m_systemWebGLPolicy.
        * WebProcess/WebPage/mac/WebPageMac.mm:
        (WebKit::WebPage::webGLPolicyForURL): Moved in from WebPage, but now they call
        into WKSI and send the result to the client if necessary.
        (WebKit::WebPage::resolveWebGLPolicyForURL):

2014-03-05  Simon Fraser  <simon.fraser@apple.com>

        Fix a stupid error in r165118 that caused userVisibleString()
        to call itself recursively.

        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::userVisibleString):

2014-03-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS] Rename the various VisibleExtent variations to exposedContentRect
        https://bugs.webkit.org/show_bug.cgi?id=129728

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setExposedContentRect):

2014-03-05  Dean Jackson  <dino@apple.com>

        Unreviewed. Fix the Apple-internal builds.

        * Configurations/WebKit2.xcconfig: Add -framework OpenGL.

2014-03-05  Simon Fraser  <simon.fraser@apple.com>

        ObjC exception when dropping files into a WKView: drag and drop uses code from WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=129752

        Reviewed by Enrica Casucci.
        
        Get WebDragClientMac off of all WebKit headers, and WebEditorClientMac off
        all but one by using C functions from WebCoreNSURLExtras.h rather than
        the NSURL category.

        * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:
        (WebKit::WebDragClient::declareAndWriteDragImage):
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        (WebKit::WebEditorClient::userVisibleString):
        (WebKit::WebEditorClient::canonicalizeURL):
        (WebKit::WebEditorClient::canonicalizeURLString):

2014-03-05  Martin Hock  <mhock@apple.com>

        Add support for sessions to MemoryCache.
        https://bugs.webkit.org/show_bug.cgi?id=127794

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.h: Add sessionID() method.
        (WebKit::NetworkResourceLoader::sessionID):
        * NetworkProcess/mac/DiskCacheMonitor.h: Add sessionID member.
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor): Send sessionID to NetworkProcessConnection::DidCacheResource.
        * WebProcess/Network/NetworkProcessConnection.cpp: Add sessionID parameter to didCacheResource and pass to MemoryCache.
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/NetworkProcessConnection.h: Ditto.
        * WebProcess/Network/NetworkProcessConnection.messages.in: Ditto.

2014-03-05  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] support multi-select and select with groups for iPhone.
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16206928>

        Reviewed by Simon Fraser.

        This is the remaining work on select element support on iOS.
        This adds multi-select and select with group support with UI
        for iPhone that uses UIPickerView.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView resignFirstResponder]):
        (-[WKContentView inputAccessoryView]): Removed incorrect early return.
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm:
        (adjustedFontSize): Moved here to make it available to both picker and
        popover based implementations.
        (-[WKFormSelectControl initWithView:]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm:
        (-[WKOptionPickerCell _isSelectable]):
        (-[WKOptionPickerCell initCommon]):
        (-[WKOptionPickerCell initWithOptionItem:]):
        (-[WKOptionGroupPickerCell initWithOptionItem:]):
        (-[WKOptionGroupPickerCell labelWidthForBounds:]):
        (-[WKOptionGroupPickerCell layoutSubviews]):
        (-[WKMultipleSelectPicker initWithView:]):
        (-[WKMultipleSelectPicker dealloc]):
        (-[WKMultipleSelectPicker controlView]):
        (-[WKMultipleSelectPicker controlBeginEditing]):
        (-[WKMultipleSelectPicker controlEndEditing]):
        (-[WKMultipleSelectPicker layoutSubviews]):
        (-[WKMultipleSelectPicker pickerView:viewForRow:forComponent:reusingView:]):
        (-[WKMultipleSelectPicker numberOfComponentsInPickerView:]):
        (-[WKMultipleSelectPicker pickerView:numberOfRowsInComponent:]):
        (-[WKMultipleSelectPicker findItemIndexAt:]):
        (-[WKMultipleSelectPicker pickerView:row:column:checked:]):
        (-[WKSelectSinglePicker initWithView:]):
        (-[WKSelectSinglePicker controlEndEditing]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm:

2014-03-03  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Generate documentation for the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=126211

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake: The list of headers for GIR generation has a better name now.

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        Fix the build after r165095

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

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Account for the keyboard when computing the unobscuredRect
        https://bugs.webkit.org/show_bug.cgi?id=129660

        Reviewed by Enrica Casucci.

        Adjust the unobscuredRect when a docked keyboard is on screen.

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

2014-03-04  Andy Estes  <aestes@apple.com>

        [iOS][WebKit2] Exclude plug-in sandbox profiles from the build
        https://bugs.webkit.org/show_bug.cgi?id=129719

        Reviewed by Simon Fraser.

        * Configurations/WebKit2.xcconfig:

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WKScrollView should be able to cancel touches in content view
        https://bugs.webkit.org/show_bug.cgi?id=129711

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKScrollView.mm:
        We should not override UIWebScrollView behavior regarding touch cancellation otherwise we force
        other gesture recognizers to fail if delayed touches have been dispatched.

2014-03-04  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Consider the entire view state on update to find if a change is stable or not
        https://bugs.webkit.org/show_bug.cgi?id=129721

        Reviewed by Simon Fraser.

        Changes in scroll, zoom and obscuredRect can happen simultaneously. To compute if the current state
        is stable or not, we should consider the complete picture from all the type of updates.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRects]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):

2014-03-04  Jeremy Jones  <jeremyj@apple.com>

        WebVideoFullscreen, should make the hand off of the video layer explicit.
        https://bugs.webkit.org/show_bug.cgi?id=128844

        Reviewed by Simon Fraser.

        This change introduces a more explicit hand-off of the video layer and fullscreen transition.
        This describes the interactions between WebVideoFullscreenInterface and WebVideoFullscreenModel
        WebVideoFullscreenModel <-> WebVideoFullscreenInterface
              enterFullScreen(*) ->
                                <- borrowVideoLayer
              willLendVideoLayer ->
               didLendVideoLayer ->
                                <- didEnterFullscreen
                                ...
                                <- requestExitFullscreen
                  exitFullscreen ->
                                <- returnVideoLayer
                                <- didExitFullscreen
        (*) enterFullScreen actually comes from WebVideoFullscreenControllerAVKit.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        Implement WebVideoFullscreenChangeObserver.
        Add support for explicit video layer hand-off.
        Add m_videoView to retain the videoLayer's UIView.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        WillLendVideoLayerWithID replaces SetVideoLayerID

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        Adopt new methods for explicit video layer hand-off.

        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        Observe fullscreen changes.

        (WebKit::WebVideoFullscreenManagerProxy::didCommitLayerTree):
        Pending fullscreen transition now does didLendVideoLayer instead of calling enter fullscreen.
        It also removes the videoView from it's super view now that it is safe to do so.

        (WebKit::WebVideoFullscreenManagerProxy::willLendVideoLayerWithID):
        This replaces setVideoLayerID. It retains the UIView for the layer to keep it alive before it is unparented.

        (WebKit::WebVideoFullscreenManagerProxy::requestExitFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManagerProxy::didEnterFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManagerProxy::borrowVideoLayer):
        Adopt more explicit video layer hand-off.

        (WebKit::WebVideoFullscreenManagerProxy::returnVideoLayer):
        Adopt more explicit video layer hand-off.

        * WebProcess/ios/WebVideoFullscreenManager.cpp:
        Manage state of fullscreen transition more competently. Wait till an animation is complete to begin the next one.

        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager):
        Init three new state members.

        (WebKit::WebVideoFullscreenManager::enterFullscreenForNode):
        Update animation state. Don't procede if animation is in progress.

        (WebKit::WebVideoFullscreenManager::exitFullscreenForNode):
        Update animation state. Don't procede if animation is in progress.

        (WebKit::WebVideoFullscreenManager::willLendVideoLayer):
        Adopt more explicit video layer hand-off.
        This replaces SetVideoLayer.

        (WebKit::WebVideoFullscreenManager::didLendVideoLayer):
        This is a no-op as this will be sent through a RemoteLayerTreeTransaction.

        (WebKit::WebVideoFullscreenManager::didEnterFullscreen):
        Adopt more explicit fullscreen transition.

        (WebKit::WebVideoFullscreenManager::didExitFullscreen):
        Adopt more explicit fullscreen transition.

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Adopt more explicit fullscreen transition.

        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
        Adopt more explicit fullscreen/video layer transition.

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Get position:fixed working slightly better on iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=129714

        Reviewed by Benjamin Poulain.
        
        Start telling the RemoteScrollingCoordinatorProxy about scroll position changes
        again, so it can update fixed and sticky layers.
        
        Send the scroll position as a FloatPoint, rather than an IntPoint.

        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChangedViaDelegatedScrolling):
        (WebKit::RemoteScrollingCoordinatorProxy::scrollPositionChanged):
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        Tell the RemoteScrollingCoordinatorProxy about the scroll update.
        Only update the customFixedPositionRect if we've finished scrolling or zooming.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects): Return a bool indicating
        whether the visible rects changed.

2014-03-04  Conrad Shultz  <conrad_shultz@apple.com>

        WKPage's pageExtendedBackgroundColor API exposed through WKView/WKWebView should support NSColor
        https://bugs.webkit.org/show_bug.cgi?id=129704

        Reviewed by Beth Dakin.

        Add NSColor-returning methods to complement the existing UIColor-returning methods.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Declare _pageExtendedBackgroundColor for non-TARGET_OS_IPHONE.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _pageExtendedBackgroundColor]):
        Return an NSColor created from the pageExtendedBackgroundColor.

        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
        Declare _pageExtendedBackgroundColor for non-TARGET_OS_IPHONE.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView _pageExtendedBackgroundColor]):
        Return an NSColor created from the pageExtendedBackgroundColor.

2014-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give WebProcess private RWI entitlement
        https://bugs.webkit.org/show_bug.cgi?id=129710

        Reviewed by Timothy Hatcher.

        * Configurations/WebContent-iOS.entitlements:
        Add entitlements to "WebProcess" when code signing.

        * Configurations/WebContentProcess.xcconfig:
        Add the private RWI entitlement.

2014-03-04  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2]: Next/Prev button in the accessory bar do not work.
        https://bugs.webkit.org/show_bug.cgi?id=129690
        <rdar://problem/16073569>

        Reviewed by Simon Fraser.

        Adding support for Next and Previous buttons in the accessory bar.
        When the request is processed by the WebProcess, we identify the next
        focusable node that needs to be assisted and we call focus() on the element
        letting the focus changing machinery take care of updating the assisted node.
        This change also add support for the Clear button, when appropriate and hooks up
        the call to the WebProcess.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView accessoryTab:]):
        (-[WKContentView accessoryClear]):
        (-[WKContentView _updateAccessory]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::focusNextAssistedNode):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::nextFocusableElement):
        (WebKit::hasFocusableElement):
        (WebKit::WebPage::focusNextAssistedNode):
        (WebKit::WebPage::getAssistedNodeInformation):

2014-03-04  Simon Fraser  <simon.fraser@apple.com>

        Allow iOS DumpRenderTree crashes to show application-specific information
        https://bugs.webkit.org/show_bug.cgi?id=129705

        Reviewed by David Kilzer.
        
        Make the WKSI function SetCrashReportApplicationSpecificInformation available
        in iOS simulator builds.

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

2014-03-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Merge API shims and JSLock
        https://bugs.webkit.org/show_bug.cgi?id=129650

        Reviewed by Mark Lam.

        JSLock is now taking on all of APIEntryShim's responsibilities since there is never a reason 
        to take just the JSLock. Ditto for DropAllLocks and APICallbackShim.

        * DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::~UniqueIDBDatabaseBackingStoreSQLite):
        (WebKit::UniqueIDBDatabaseBackingStoreSQLite::createIndex):

2014-03-03  Enrica Casucci  <enrica@apple.com>

        [WK2] Selection remains after reload.
        https://bugs.webkit.org/show_bug.cgi?id=129648
        <rdar://problem/16207547>

        Reviewed by Sam Weinig.

        We normally clear the selection when resigninig first responder but
        that doesn't get called when reloading the page or when navigating with
        back/forward buttons. The correct place to do this is when we get
        _didCommitLoadForMainFrame where we already stop assisting the node.
        The method we call into webselectionassistant is resignedFirstResponder
        which takes care of clearing the selection and removing the selection view.

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

2014-03-04  Hyowon Kim  <hw1008.kim@samsung.com>

        Move EvasGLContext and EvasGLSurface files into the efl common directory.
        https://bugs.webkit.org/show_bug.cgi?id=129603

        Reviewed by Gyuyoung Kim.

        * PlatformEfl.cmake: Update for removed files.

2014-03-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] WebPage::updateVisibleContentRects can set the position directly instead of using programmatic scrolling
        https://bugs.webkit.org/show_bug.cgi?id=129649

        Reviewed by Sam Weinig.

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        Update my workaround from r165003. We should not use programmatic scrolling when the scroll position is changed
        from the UI.

2014-03-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Update UIScrollView's contentSize when a new layer tree is committed
        https://bugs.webkit.org/show_bug.cgi?id=129641

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didCommitLayerTree:WebKit::]):
        Previously, we relied on [UIScrollView setZoomScale:] to reset the contentSize for us.
        In the cases where we would not go through [UIScrollView setZoomScale:], the UIScrollView's contentSize
        did not match the actual WKContentView's area on screen.

2014-03-03  Jeremy Jones  <jeremyj@apple.com>

        Forward application suspend resume notifications to the web process.
        https://bugs.webkit.org/show_bug.cgi?id=129356

        Reviewed by Eric Carlson.

        Repost UIApplicationWillEnterForegroundNotification,
        UIApplicationDidBecomeActiveNotification and 
        UIApplicationWillResignActiveNotification from UIProcess to WebProcess.
        As WebUIApplicationWillEnterForegroundNotification,
        WebUIApplicationDidBecomeActiveNotification, and
        WebUIApplicationWillResignActiveNotification

        * UIProcess/WebPageProxy.h:
        Add applicationWillEnterForeground()
        applicationWillResignActive()
        applicationDidBecomeActive()

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::]):
        Observe notifications.

        (-[WKContentView dealloc]):
        Stop observing notifications.

        (-[WKContentView _applicationWillResignActive:]):
        Notify WebPageProxy of the event.

        (-[WKContentView _applicationWillEnterForeground:]):
        Notify WebPageProxy of the event.

        (-[WKContentView _applicationDidBecomeActive:]):
        Notify WebPageProxy of the event.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applicationWillEnterForeground):
        Send corresponding Message to WebPage.

        (WebKit::WebPageProxy::applicationWillResignActive):
        Send corresponding Message to WebPage.

        (WebKit::WebPageProxy::applicationDidBecomeActive):
        Send corresponding Message to WebPage.

        * WebProcess/WebPage/WebPage.h:
        Add applicationWillEnterForeground()
        applicationWillResignActive()
        applicationDidBecomeActive()

        * WebProcess/WebPage/WebPage.messages.in:
        Add applicationWillEnterForeground()
        applicationWillResignActive()
        applicationDidBecomeActive()

        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applicationWillResignActive):
        Post corresponding NSNotification.

        (WebKit::WebPage::applicationWillEnterForeground):
        Post corresponding NSNotification.

        (WebKit::WebPage::applicationDidBecomeActive):
        Post corresponding NSNotification.

2014-03-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r165013.
        http://trac.webkit.org/changeset/165013
        https://bugs.webkit.org/show_bug.cgi?id=129646

        New code is not thread safe, asserting on a worker test
        (Requested by ap on #webkit).

        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/mac/DiskCacheMonitor.h:
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor):
        * WebProcess/Network/NetworkProcessConnection.cpp:
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/NetworkProcessConnection.h:
        * WebProcess/Network/NetworkProcessConnection.messages.in:

2014-03-03  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2]: Text fields don't zoom in when focused
        https://bugs.webkit.org/show_bug.cgi?id=129632
        <rdar://problem/16185230>

        Reviewed by Benjamin Poulain.

        When focusing the node we need to zoom and center it and possibly
        scroll to make it visible.
        On iPad we only scroll, without zooming.

        * Shared/AssistedNodeInformation.cpp:
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _scrollToRect:withOrigin:minimumScrollDistance:]):
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView _startAssistingNode:]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::getAssistedNodeInformation):

2014-03-03  Sam Weinig  <sam@webkit.org>

        Fix ASSERT and leaks introduced in recent "Support IOS Accessibility in WK2" patch

        Reviewed by Simon Fraser.

        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitializeAccessibility):

2014-03-03  Simon Fraser  <simon.fraser@apple.com>

        Composited masks not working on iOS after r164890 
        https://bugs.webkit.org/show_bug.cgi?id=129630

        Reviewed by Jer Noble.
        
        Fix typo in UIView-related masks code; set the mask layer
        on the view, not the maskView.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):

2014-02-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Support IOS Accessibility in WK2
        https://bugs.webkit.org/show_bug.cgi?id=129527

        Reviewed by Sam Weinig.

        Implement enough AX hooks so that accessibility can work in WebKit2.

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::identifier):
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::accessibilityWebProcessTokenReceived):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _updateForScreen:]):
        (-[WKContentView _setAccessibilityWebProcessToken:]):
        (-[WKContentView _accessibilityRegisterUIProcessTokens]):
        (-[WKContentView _didRelaunchProcess]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):
        (WebKit::WebPageProxy::registerUIProcessAccessibilityTokens):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/Plugins/PDF/PDFPlugin.mm:
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.h: Added.
        * WebProcess/WebPage/WKAccessibilityWebPageObjectIOS.mm: Added.
        (-[WKAccessibilityWebPageObject init]):
        (-[WKAccessibilityWebPageObject _accessibilityCategoryInstalled:]):
        (-[WKAccessibilityWebPageObject pageScale]):
        (-[WKAccessibilityWebPageObject dealloc]):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::platformInitialize):
        (WebKit::WebPage::platformInitializeAccessibility):
        (WebKit::WebPage::accessibilityObjectForMainFramePlugin):
        (WebKit::WebPage::registerUIProcessAccessibilityTokens):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.h: Copied from Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.h.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: Copied from Source/WebKit2/WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm.
        (-[WKAccessibilityWebPageObjectBase accessibilityFocusedUIElement]):
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.h: Added.
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: Added.
        (-[WKAccessibilityWebPageObject accessibilityIsIgnored]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityParameterizedAttributeNames]):
        (-[WKAccessibilityWebPageObject accessibilityIsAttributeSettable:]):
        (-[WKAccessibilityWebPageObject accessibilitySetValue:forAttribute:]):
        (-[WKAccessibilityWebPageObject convertScreenPointToRootView:]):
        (-[WKAccessibilityWebPageObject accessibilityActionNames]):
        (-[WKAccessibilityWebPageObject accessibilityChildren]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:]):
        (-[WKAccessibilityWebPageObject accessibilityAttributeValue:forParameter:]):
        (-[WKAccessibilityWebPageObject accessibilityShouldUseUniqueId]):
        (-[WKAccessibilityWebPageObject accessibilityHitTest:]):
        * WebProcess/WebPage/mac/WebPageMac.mm:
        * WebProcess/cocoa/WebProcessCocoa.mm:
        (WebKit::WebProcess::platformInitializeProcess):

2014-03-03  Martin Hock  <mhock@apple.com>

        Add support for sessions to MemoryCache.
        https://bugs.webkit.org/show_bug.cgi?id=127794

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkResourceLoader.h: Add sessionID() method.
        (WebKit::NetworkResourceLoader::sessionID):
        * NetworkProcess/mac/DiskCacheMonitor.h: Add sessionID member.
        * NetworkProcess/mac/DiskCacheMonitor.mm:
        (WebKit::DiskCacheMonitor::DiskCacheMonitor): Send sessionID to NetworkProcessConnection::DidCacheResource.
        * WebProcess/Network/NetworkProcessConnection.cpp: Add sessionID parameter to didCacheResource and pass to MemoryCache.
        (WebKit::NetworkProcessConnection::didCacheResource):
        * WebProcess/Network/NetworkProcessConnection.h: Ditto.
        * WebProcess/Network/NetworkProcessConnection.messages.in: Ditto.

2014-03-03  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Regression: ScrollView's scroll offset is never set after r164702
        https://bugs.webkit.org/show_bug.cgi?id=129620

        Reviewed by Simon Fraser.

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

2014-03-03  Simon Fraser  <simon.fraser@apple.com>

        Crash when going into video fullscreen on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129613

        Reviewed by Dean Jackson.
        
        We shouldn't reparent a UIView's layer without unparenting
        the view first.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerID):

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

        [GTK] WebKit2WebExtension GIR can't be used in vala
        https://bugs.webkit.org/show_bug.cgi?id=127179

        Reviewed by Martin Robinson.

        Add a different pkg-config file for the web extensions API.

        * GNUmakefile.am:
        * PlatformGTK.cmake:
        * webkit2gtk-web-extension.pc.in: Added.

2014-03-02  Darin Adler  <darin@apple.com>

        Streamline use of TextIterator, cutting down includes and use of soon-to-be-deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=129592

        Reviewed by Sam Weinig.

        * UIProcess/WebPageProxy.cpp: Added now-needed include.
        * WebProcess/WebPage/WebPage.cpp: Ditto.

2014-03-02  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Keyboard deadlock when accepting/dismissing autocorrection.
        https://bugs.webkit.org/show_bug.cgi?id=129594
        <rdar://problem/16168978>

        Reviewed by Sam Weinig.

        As a temporary fix, we are using a synchronous
        message to accept autocorrection until we implement
        a solution that processes these requests on a thread that
        is not the main thread.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::applyAutocorrection):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::applyAutocorrection):
        (WebKit::WebPage::syncApplyAutocorrection):

2014-03-02  Dan Bernstein  <mitz@apple.com>

        Try to fix the 32-bit build.

        * UIProcess/ios/forms/WKFormSelectPopover.mm:
        (adjustedFontSize):

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

        Page Cache is not enabled when using the modern WebKit2 API
        https://bugs.webkit.org/show_bug.cgi?id=129585

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool initWithConfiguration:]):
        Default to CacheModelPrimaryWebBrowser until there is a way to configure it.

2014-03-02  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Form controls handling
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16053643>

        Reviewed by Simon Fraser.

        Adding support for select elements on iOS.
        There is full support on iPad, while on iPhone it is
        still limited to single select with no groups.
        The change also fixes the issue of the keyboard appearing
        on screen for types of elements that are implemented with
        a popover or a picker.

        * Scripts/webkit2/messages.py:
        * Shared/AssistedNodeInformation.cpp:
        (WebKit::WKOptionItem::encode):
        (WebKit::WKOptionItem::decode):
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h:
        (WebKit::WKOptionItem::WKOptionItem):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView inputView]):
        (-[WKContentView assistedNodeSelectOptions]):
        (-[WKContentView _startAssistingNode:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAssistedNodeSelectedIndex):
        * UIProcess/ios/forms/WKFormSelectControl.h:
        * UIProcess/ios/forms/WKFormSelectControl.mm: Added.
        (-[WKFormSelectControl initWithView:]):
        (+[WKFormSelectControl createPeripheralWithView:]):
        (-[WKFormSelectControl assistantView]):
        (-[WKFormSelectControl beginEditing]):
        (-[WKFormSelectControl endEditing]):
        * UIProcess/ios/forms/WKFormSelectPicker.mm: Added.
        (-[WKSelectSinglePicker initWithView:]):
        (-[WKSelectSinglePicker dealloc]):
        (-[WKSelectSinglePicker controlView]):
        (-[WKSelectSinglePicker controlBeginEditing]):
        (-[WKSelectSinglePicker controlEndEditing]):
        (-[WKSelectSinglePicker numberOfComponentsInPickerView:]):
        (stringByTrimmingWhitespaceAndNewlines):
        (-[WKSelectSinglePicker pickerView:numberOfRowsInComponent:]):
        (-[WKSelectSinglePicker pickerView:attributedTitleForRow:forComponent:]):
        (-[WKSelectSinglePicker pickerView:didSelectRow:inComponent:]):
        * UIProcess/ios/forms/WKFormSelectPopover.mm: Added.
        (stringWithWritingDirection):
        (adjustedFontSize):
        (-[WKSelectTableViewController initWithView:hasGroups:]):
        (-[WKSelectTableViewController viewWillAppear:]):
        (-[WKSelectTableViewController numberOfSectionsInTableView:]):
        (-[WKSelectTableViewController tableView:numberOfRowsInSection:]):
        (-[WKSelectTableViewController tableView:titleForHeaderInSection:]):
        (-[WKSelectTableViewController populateCell:withItem:]):
        (-[WKSelectTableViewController findItemIndexAt:]):
        (-[WKSelectTableViewController findItemAt:]):
        (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]):
        (-[WKSelectTableViewController tableView:didSelectRowAtIndexPath:]):
        (-[WKSelectTableViewController hasText]):
        (-[WKSelectTableViewController insertText:]):
        (-[WKSelectTableViewController deleteBackward]):
        (-[WKSelectPopover initWithView:hasGroups:]):
        (-[WKSelectPopover dealloc]):
        (-[WKSelectPopover controlView]):
        (-[WKSelectPopover controlBeginEditing]):
        (-[WKSelectPopover controlEndEditing]):
        (-[WKSelectPopover _userActionDismissedPopover:]):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setAssistedNodeSelectedIndex):
        (WebKit::innerFrameQuad):
        (WebKit::WebPage::getPositionInformation):
        (WebKit::hasFocusableNode):
        (WebKit::WebPage::getAssistedNodeInformation):
        (WebKit::WebPage::elementDidFocus):

2014-03-02  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Pages using tiled compositing layers allocate too many tiles on zoom
        https://bugs.webkit.org/show_bug.cgi?id=129471

        Reviewed by Simon Fraser.

        * WebProcess/WebPage/DrawingArea.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::updateVisibleContentRects):
        A few interesting changes here:
        -Now that we do not use setExposedRect, we can pass the exposed area directly
         to the drawing area since everything is now in content coordinates :)
        -The scale is now converted to float before being compared to the Page's scaleFactor.
         The page's scalefactor being a float, the comparison was failing most of the time.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::setVisibleExtentContentRect):

2014-03-02  Darin Adler  <darin@apple.com>

        Change public text iterator API implementations to not depend on 16-bit character pointers
        https://bugs.webkit.org/show_bug.cgi?id=129566

        Reviewed by Anders Carlsson.

        * WebView/WebTextIterator.mm:
        (-[WKDOMTextIterator initWithRange:]): Use make_unique instead of adoptPtr.
        (-[WKDOMTextIterator advance]): Clear out the upconverted text since we are moving on to the
        next text.
        (-[WKDOMTextIterator currentTextPointer]): Upconvert if we have 8-bit text.
        (-[WKDOMTextIterator currentTextLength]): Call TextIterator::text().length() since we will
        probably be removing TextIterator::length eventually.

        * WebProcess/WebCoreSupport/WebEditorClient.cpp: Removed unneded include of TextIterator.h.
        * WebProcess/WebPage/WebPage.cpp: Ditto.

2014-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Make impossible to build with <webkit2/webkit2.h> and <webkit2/webkit-web-extension.h> included together
        https://bugs.webkit.org/show_bug.cgi?id=129549

        Reviewed by Martin Robinson.

        Add a compile error to prevent mixing the UI and web process APIs.

        * UIProcess/API/gtk/webkit2.h:
        * WebProcess/InjectedBundle/API/gtk/webkit-web-extension.h:

2014-03-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove the include dir of the C API from the WebKit2 pkg-config file
        https://bugs.webkit.org/show_bug.cgi?id=129543

        Reviewed by Martin Robinson.

        We are not installing the C API headers anymore.

        * webkit2gtk.pc.in:

2014-03-01  Tim Horton  <timothy_horton@apple.com>

        Fix the Mac build.

        * UIProcess/mac/ViewGestureController.messages.in:

2014-03-01  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures (Smart Magnification): Support for iOS
        https://bugs.webkit.org/show_bug.cgi?id=129146
        <rdar://problem/16032668>

        Reviewed by Benjamin Poulain.

        Add support for double-tap smart magnification on iOS.

        * DerivedSources.make:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        WKContentView is no longer API, so it can know about WKWebView
        and will always have one.

        (-[WKWebView contentView:didCommitLayerTree:WebKit::]):
        Don't replace the zoom scale if we're currently animating.

        (-[WKWebView _takeViewSnapshot]):
        Rename.

        (-[WKWebView _zoomToPoint:WebCore::atScale:]):
        (-[WKWebView _zoomToRect:WebCore::atScale:origin:WebCore::]):
        (constrainContentOffset):
        (-[WKWebView _scrollToRect:WebCore::origin:WebCore::minimumScrollDistance:]):
        (-[WKWebView _zoomOutWithOrigin:]):
        (-[WKWebView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        Add _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:
        and _zoomOutWithOrigin: as internal API, for use by SmartMagnificationController via WKContentView.
        These will use some heuristics to generally center the target rect in the view
        in a way that should match WebKit1 fairly closely.

        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        Don't use the WKContentViewDelegate protocol for things that don't belong there.

        * UIProcess/ios/SmartMagnificationController.h: Added.
        * UIProcess/ios/SmartMagnificationController.messages.in: Added.
        * UIProcess/ios/SmartMagnificationController.mm: Added.
        (WebKit::SmartMagnificationController::SmartMagnificationController):
        (WebKit::SmartMagnificationController::~SmartMagnificationController):
        (WebKit::SmartMagnificationController::handleSmartMagnificationGesture):
        (WebKit::SmartMagnificationController::didCollectGeometryForSmartMagnificationGesture):
        SmartMagnificationController sits off of WKContentView, and sends/receives
        messages to the WebProcess to do the smart magnification hit-testing.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::webView:]):
        As before, teach WKContentView about its owning WKWebView.

        (-[WKContentView _takeViewSnapshot]):
        Rename.

        (-[WKContentView _zoomToRect:withOrigin:fitEntireRect:minimumScale:maximumScale:minimumScrollDistance:]):
        (-[WKContentView _zoomOutWithOrigin:]):
        Forward _zoomToRect:::::: and _zoomOutWithOrigin: to WKWebView.

        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView setupInteraction]):
        (-[WKContentView _doubleTapRecognized:]):
        (-[WKContentView _twoFingerDoubleTapRecognized:]):
        Forward double tap to the SmartMagnificationController.

        * UIProcess/mac/ViewGestureController.h:
        * UIProcess/mac/ViewGestureController.messages.in:
        * UIProcess/mac/ViewGestureControllerMac.mm:
        (WebKit::ViewGestureController::didCollectGeometryForSmartMagnificationGesture):
        Retrieve the minimum/maximum viewport scale from the WebProcess.

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

        * WebProcess/WebPage/ViewGestureGeometryCollector.cpp:
        (WebKit::ViewGestureGeometryCollector::ViewGestureGeometryCollector):
        (WebKit::ViewGestureGeometryCollector::dispatchDidCollectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForSmartMagnificationGesture):
        (WebKit::ViewGestureGeometryCollector::collectGeometryForMagnificationGesture):
        Factor out code to send the geometry back to the UI process.

        * WebProcess/WebPage/ViewGestureGeometryCollector.h:
        * WebProcess/WebPage/ViewGestureGeometryCollector.messages.in:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebPage.h:
        We should have a ViewGestureGeometryCollector on iOS too.

2014-03-01  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r164905 and r164912.

        * Platform/IPC/Connection.h: Only declare setShouldCloseConnectionOnMachExceptions() for the Mac port.
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::didFinishLaunching): Only call setShouldCloseConnectionOnMachExceptions() on the Mac port.

2014-03-01  Gavin Barraclough  <barraclough@apple.com>

        Split UserActivity/CountedUserActivity
        https://bugs.webkit.org/show_bug.cgi?id=129520

        Reviewed by Sam Weinig.

        UserActivity currently provides an interface allowing counted, nested calls to enable/disable.
        In some cases it would be easier to use if it were a simpler boolean enabled/disabled interface.

        * PluginProcess/PluginProcess.h:
        (WebKit::PluginProcess::connectionActivity):
            - UserActivity->CountedUserActivity
        * PluginProcess/mac/PluginProcessMac.mm:
        (WebKit::PluginProcess::platformInitializeProcess):
            - beginActivity->start
        * Shared/ActivityAssertion.cpp:
        (WebKit::ActivityAssertion::ActivityAssertion):
        (WebKit::ActivityAssertion::~ActivityAssertion):
            - beginActivity->increment, endActivity->decrement.
        * Shared/ActivityAssertion.h:
            - UserActivity->CountedUserActivity
        * Shared/ChildProcess.cpp:
        (WebKit::ChildProcess::setProcessSuppressionEnabled):
            - beginActivity->start, endActivity->stop.
        * Shared/ChildProcess.h:
            - removed processSuppressionEnabled()
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::updatePreferences):
            - beginActivity->start, endActivity->stop.

2014-03-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial Linux buildfix after r164905.

        setShouldCloseConnectionOnMachExceptions() is defined in the Mac only
        Source/WebKit2/Platform/IPC/mac/ConnectionMac.cpp inside !PLATFORM(IOS)
        which means PLATFORM(MAC), because nobody else uses this source file.

        But ChildProcessProxy.cpp is used by Linux ports too, so we have to
        use the most specific #if guard here, which is PLATFORM(MAC).

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-02-28  Simon Fraser  <simon.fraser@apple.com>

        [iOS] Assertions and bad behavior when zooming into an iframe containing apple.com
        https://bugs.webkit.org/show_bug.cgi?id=129537

        Reviewed by Benjamin Poulain.
        
        When building RemoteLayerTreeTransactions, the ordering of setting created
        layers and doing the recursive tree walk was wrong, such that we failed
        to noticed layers created during the recursiveBuildTransaction().
        
        Also harden the UI-side code against Obj-C exceptions thrown when layers
        are missing.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties): Assert when 
        children are not found, and protect against Obj-C exceptions.
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::LayerCreationProperties::LayerCreationProperties):
        Initialize the members.
        * WebProcess/WebPage/mac/RemoteLayerTreeContext.mm:
        (WebKit::RemoteLayerTreeContext::buildTransaction): Do the recursive walk
        before setting created and destroyed layers, since the walk can create
        layers (especially when swapping into tiled layers).

2014-02-28  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix WebKit2 build after r164890
        https://bugs.webkit.org/show_bug.cgi?id=129533

        Reviewed by Simon Fraser.

        LayerRepresentation.h is included to WebPageProxy.h in r164890
        but it is not used in non Mac or iOS port.

        * UIProcess/WebPageProxy.h:

2014-02-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Extract _data->_thumbnailView checks into a helper function
        https://bugs.webkit.org/show_bug.cgi?id=129517

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView shouldIgnoreMouseEvents]):
        (-[WKView scrollWheel:]):
        (-[WKView mouseMoved:]):
        (-[WKView mouseDown:]):
        (-[WKView mouseUp:]):
        (-[WKView mouseDragged:]):

2014-02-28  Pratik Solanki  <psolanki@apple.com>

        [iOS][WebKit2] Don't use any of the mach exception handling code on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129516

        Reviewed by Sam Weinig.

        This code is not used on iOS after my fix in r164883. We can just move it all under
        !PLATFORM(IOS).

        * Platform/IPC/Connection.h:
        * Platform/IPC/mac/ConnectionMac.cpp:
        (IPC::Connection::platformInvalidate):
        (IPC::Connection::platformInitialize):
        (IPC::Connection::open):
        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-02-28  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] highlight rects should never big bigger than the view
        https://bugs.webkit.org/show_bug.cgi?id=129472
        <rdar://problem/15673655>

        Reviewed by Enrica Casucci.

        The unobscuredRect on WebPageProxy is the "true" view rect as seen by the user.
        Use that to constrain our highlight rects.

        * UIProcess/ios/WKContentViewInteraction.mm:
        (highlightedQuadsFitInRect):
        (-[WKContentView _didGetTapHighlightForRequest:color:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):

2014-02-28  Simon Fraser  <simon.fraser@apple.com>

        Make UIViews for compositing layers in the UI process on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129508

        Reviewed by Sam Weinig.
        
        In order to parent UIScrollViews for -webkit-overflow-scrolling:touch,
        we need to use UIViews in the compositing layer hierarchy on iOS.
        
        Make much of the code that currently uses CALayers layer-or-view
        agnostic by using a typedef LayerOrView.
        
        Fix RemoteLayerTreePropertyApplier to apply properties to UIViews
        or CALayers; on iOS, we need both paths because we have to set properties
        on CALayer for remotely hosted content.
        
        Add iOS-specific implementation files for RemoteLayerTreeHost and RemoteScrollingCoordinatorProxy,
        since these need to see the UIView implementation. WebVideoFullscreenManagerProxy.cpp also needs
        to be come a .mm file.

        * Shared/mac/RemoteLayerTreePropertyApplier.h:
        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (-[UIView setSubviews:]):
        (WebKit::applyPropertiesToLayer):
        (WebKit::RemoteLayerTreePropertyApplier::applyProperties):
        * UIProcess/Cocoa/LayerRepresentation.h: Copied from Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h.
        (asLayer):
        * UIProcess/PageClient.h:
        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/LayerRepresentation.mm: Copied from Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h.
        (asLayer):
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::acceleratedCompositingRootLayer):
        * UIProcess/ios/RemoteLayerTreeHostIOS.mm: Added.
        (+[WKTransformView layerClass]):
        (-[WKRemoteView initWithFrame:contextID:]):
        (+[WKRemoteView layerClass]):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/ios/RemoteScrollingCoordinatorProxyIOS.mm: Added.
        (WebKit::layerRepresentationFromLayerOrView):
        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _setAcceleratedCompositingRootView:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):
        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: Renamed from Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.cpp.
        (WebKit::WebVideoFullscreenManagerProxy::create):
        (WebKit::WebVideoFullscreenManagerProxy::WebVideoFullscreenManagerProxy):
        (WebKit::WebVideoFullscreenManagerProxy::~WebVideoFullscreenManagerProxy):
        (WebKit::WebVideoFullscreenManagerProxy::didCommitLayerTree):
        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerID):
        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreen):
        (WebKit::WebVideoFullscreenManagerProxy::requestExitFullScreen):
        (WebKit::WebVideoFullscreenManagerProxy::play):
        (WebKit::WebVideoFullscreenManagerProxy::pause):
        (WebKit::WebVideoFullscreenManagerProxy::togglePlayState):
        (WebKit::WebVideoFullscreenManagerProxy::seekToTime):
        (WebKit::WebVideoFullscreenManagerProxy::didExitFullscreen):
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        * UIProcess/mac/RemoteLayerTreeHost.h:
        (WebKit::RemoteLayerTreeHost::rootLayer):
        * UIProcess/mac/RemoteLayerTreeHost.mm:
        (WebKit::RemoteLayerTreeHost::updateLayerTree):
        (WebKit::RemoteLayerTreeHost::getLayer):
        (WebKit::RemoteLayerTreeHost::createLayer):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::setAcceleratedCompositingRootLayer):
        (WebKit::WebPageProxy::acceleratedCompositingRootLayer):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
        (PlatformCALayerRemote::recursiveBuildTransaction):

2014-02-28  Anders Carlsson  <andersca@apple.com>

        WebKit2.TerminateTwice test is failing.

        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Turns out this can be called even when we're in the launching state so don't try to
        remove the process from the visited link provider when in that state.

2014-02-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in WebKit::WebPageProxy::registerWebProcessAccessibilityToken
        https://bugs.webkit.org/show_bug.cgi?id=127387

        Reviewed by Alexey Proskuryakov.

        Speculative fix for crasher. We should check if the connection is still valid before proceeding.

        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::registerWebProcessAccessibilityToken):

2014-02-28  Timothy Hatcher  <timothy@apple.com>

        Properly handle when Test.html is not present in Production builds.

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

        Reviewed by Joseph Pecoraro.

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

2014-02-28  Pratik Solanki  <psolanki@apple.com>

        [iOS][WebKit2] Don't grab mach exception port on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129505
        <rdar://problem/15972749>

        Reviewed by Anders Carlsson.

        Don't grab the mach exception port on iOS so we get crash logs for web process and network
        process.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::didFinishLaunching):

2014-02-28  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r164832.

        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState): Switch from removed
        'isValid' to 'state() != State::Running'

2014-02-28  Anders Carlsson  <andersca@apple.com>

        VisitedLinkProvider should keep track of processes, not pages
        https://bugs.webkit.org/show_bug.cgi?id=129497

        Reviewed by Dan Bernstein.

        Use a counted set of WebProcessProxy pointers instead of a set of pages.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        Assert that m_processes is null.

        (WebKit::VisitedLinkProvider::addProcess):
        Add the process to the set.

        (WebKit::VisitedLinkProvider::removeProcess):
        Remove the process from the set.

        * UIProcess/VisitedLinkProvider.h:
        
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        If our process is currently running, add it to the visited link provider.
        Otherwise it will be added in connectionWillOpen.

        (WebKit::WebPageProxy::close):
        If our process is running, remove it from the visited link provider. 
        Otherwise it's either crashed or not yet launched and will not have been added.

        (WebKit::WebPageProxy::connectionWillOpen):
        Add the process to the visited link provider.

        (WebKit::WebPageProxy::resetStateAfterProcessExited):
        Remove the process from the visited link provider.

2014-02-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Stop using some deprecated functions in WKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=129455

        Reviewed by Anders Carlsson.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView firstRectForCharacterRange:actualRange:]): Use convertRectToScreen,
        which is a replacement for convertBaseToScreen. Don't check for window being null,
        because isn't that crazy talk?
        (-[WKView _postFakeMouseMovedEventForFlagsChangedEvent:]): Use event's location
        in window instead of current mouse location. Using location that is not synced to
        event stream rarely makes sense, and it doesn't look like this is one of those cases.
        (-[WKView performDictionaryLookupAtCurrentMouseLocation]): Ditto.

2014-02-27  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed. Fix build after r164832

        * UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:
        (WebKit::CoordinatedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState):

2014-02-27  Martin Robinson  <mrobinson@igalia.com>

        Fix build after r164832

        * UIProcess/DrawingAreaProxyImpl.cpp:
        (WebKit::DrawingAreaProxyImpl::waitForAndDispatchDidUpdateBackingStoreState): WebProcessProxy::isLaunching() has been replaced
        by WebProcessProxy::state().

2014-02-27  Tim Horton  <timothy_horton@apple.com>

        Crash in RemoteLayerTreePropertyApplier::applyPropertiesToLayer
        https://bugs.webkit.org/show_bug.cgi?id=129456
        <rdar://problem/16182676>

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
        We were dereferencing the RemoteLayerBackingStore without checking if it exists,
        in the accelerated drawing codepath. This case will occur if a layer
        previously drew contents, but now does not.

2014-02-27  Anders Carlsson  <andersca@apple.com>

        Simplify WebProcessProxy state accessors
        https://bugs.webkit.org/show_bug.cgi?id=129453

        Reviewed by Andreas Kling.

        Replace WebProcessProxy::isLaunching() and WebProcessProxy::isValid() with a single
        WebProcessProxy::state() that return one of three values: Launching, Running or Terminated.

        * Shared/ChildProcessProxy.cpp:
        (WebKit::ChildProcessProxy::state):
        (WebKit::ChildProcessProxy::sendMessage):
        (WebKit::ChildProcessProxy::abortProcessLaunchIfNeeded):
        * Shared/ChildProcessProxy.h:
        (WebKit::ChildProcessProxy::canSendMessage):
        * UIProcess/Databases/DatabaseProcessProxy.cpp:
        (WebKit::DatabaseProcessProxy::getDatabaseProcessConnection):
        * UIProcess/Network/NetworkProcessProxy.cpp:
        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
        * UIProcess/Network/mac/NetworkProcessProxyMac.mm:
        (WebKit::NetworkProcessProxy::setProcessSuppressionEnabled):
        * UIProcess/Plugins/PluginProcessProxy.cpp:
        (WebKit::PluginProcessProxy::getPluginProcessConnection):
        (WebKit::PluginProcessProxy::getSitesWithData):
        (WebKit::PluginProcessProxy::clearSiteData):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::reattachToWebProcess):
        (WebKit::WebPageProxy::waitForDidUpdateViewState):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::requestTermination):
        (WebKit::WebProcessProxy::enableSuddenTermination):
        (WebKit::WebProcessProxy::disableSuddenTermination):
        * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
        (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate):
        * UIProcess/mac/WebPageProxyMac.mm:
        (WebKit::WebPageProxy::shouldDelayWindowOrderingForEvent):
        * UIProcess/mac/WebProcessProxyMac.mm:
        (WebKit::WebProcessProxy::updateProcessSuppressionState):

2014-02-27  Simon Fraser  <simon.fraser@apple.com>

        Crash tapping on play button on video on iOS
        https://bugs.webkit.org/show_bug.cgi?id=129452

        Reviewed by Benjamin Poulain.
        
        node->computedStyle() can return null. Just use
        renderer->style() to get the tap highlight color.

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

2014-02-27  Brian Burg  <bburg@apple.com>

        Web Inspector: model tests should use a special Test.html inspector page
        https://bugs.webkit.org/show_bug.cgi?id=129190

        Reviewed by Timothy Hatcher.

        Support creating a separate test inspector page, based on the value of
        InspectorController::isUnderTest(). Add this as a separate API call for
        WebInspectorProxy. Modify the navigation policy to check the URL against
        both normal and test inspector pages.

        * UIProcess/WebInspectorProxy.cpp:
        (WebKit::isMainOrTestInspectorPage):
        (WebKit::decidePolicyForNavigationAction):
        (WebKit::WebInspectorProxy::createInspectorPageForTest):
        * UIProcess/WebInspectorProxy.h:
        * UIProcess/WebInspectorProxy.messages.in:
        * UIProcess/efl/WebInspectorProxyEfl.cpp:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * UIProcess/gtk/WebInspectorProxyGtk.cpp:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * UIProcess/ios/WebInspectorProxyIOS.mm:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * UIProcess/mac/WebInspectorProxyMac.mm:
        (WebKit::WebInspectorProxy::inspectorTestPageURL):
        * WebProcess/WebCoreSupport/WebInspectorClient.cpp:
        (WebKit::WebInspectorClient::openInspectorFrontend):
        * WebProcess/WebPage/WebInspector.cpp: Some drive-by nullptr refactorings.
        (WebKit::WebInspector::WebInspector):
        (WebKit::WebInspector::createInspectorPage):
        (WebKit::WebInspector::createInspectorPageForTest):
        (WebKit::WebInspector::destroyInspectorPage):
        * WebProcess/WebPage/WebInspector.h:

2014-02-27  Anders Carlsson  <andersca@apple.com>

        Make WebProcessProxy::pages() return an IteratorRange
        https://bugs.webkit.org/show_bug.cgi?id=129440

        Reviewed by Dan Bernstein.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageCopyRelatedPages):
        Move the implementation of WebPageProxy::relatedPages here.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcessRespectingProcessCountLimit):
        Use std::min_element here instead of a manual loop.

        * UIProcess/WebPageProxy.cpp:
        Remove WebPageProxy::relatedPages().

        * UIProcess/WebProcessProxy.cpp:
        Remove WebProcessProxy::pages().

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::pages):
        Make this return an IteratorRange.

        (WebKit::WebProcessProxy::pageCount):
        New function that returns the page count.

2014-02-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac][WK2] Remove hardcoded Cmd+B and Cmd+I from WKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=129436

        Reviewed by Darin Adler.

        * UIProcess/API/mac/WKView.mm: Removed a historic WebKit1 behavior that we don't
        need to preserve in WebKit2.

2014-02-27  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Remove unused SPI declarations from WKView.mm
        https://bugs.webkit.org/show_bug.cgi?id=129434

        Reviewed by Sam Weinig.

        * UIProcess/API/mac/WKView.mm:

2014-02-26  Michael Saboff  <msaboff@apple.com>

        Auto generate bytecode information for bytecode parser and LLInt
        https://bugs.webkit.org/show_bug.cgi?id=129181

        Reviewed by Mark Lam.

        Added ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR} to WebKit2_INCLUDE_DIRECTORIES due to new
        generated Bytecodes.h include file.

        * CMakeLists.txt:

2014-02-27  Anders Carlsson  <andersca@apple.com>

        Look up already existing VisitedLinkTableController objects by identifier
        https://bugs.webkit.org/show_bug.cgi?id=129431

        Reviewed by Dan Bernstein.

        * WebProcess/WebPage/VisitedLinkTableController.cpp:
        (WebKit::visitedLinkTableControllers):
        (WebKit::VisitedLinkTableController::getOrCreate):
        (WebKit::VisitedLinkTableController::VisitedLinkTableController):
        (WebKit::VisitedLinkTableController::~VisitedLinkTableController):
        * WebProcess/WebPage/VisitedLinkTableController.h:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2014-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WK2] Blocks when fetching plugins information
        https://bugs.webkit.org/show_bug.cgi?id=115650

        Reviewed by Gustavo Noronha Silva.

        Use a persistent cache to store the plugins metadata to avoid
        having to load all the plugins everytime a plugin is used for the
        first time.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * Shared/Plugins/Netscape/NetscapePluginModule.h:
        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::parseMIMEDescription): Make this
        method public.
        (WebKit::NetscapePluginModule::buildMIMEDescription): Added this
        helper to build the MIME description string.
        * UIProcess/Plugins/gtk/PluginInfoCache.cpp: Added.
        (WebKit::PluginInfoCache::shared):
        (WebKit::PluginInfoCache::PluginInfoCache):
        (WebKit::PluginInfoCache::~PluginInfoCache):
        (WebKit::PluginInfoCache::saveToFileIdleCallback):
        (WebKit::PluginInfoCache::saveToFile):
        (WebKit::PluginInfoCache::getPluginInfo):
        (WebKit::PluginInfoCache::updatePluginInfo):
        * UIProcess/Plugins/gtk/PluginInfoCache.h: Added.
        * UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp:
        (WebKit::PluginInfoStore::getPluginInfo): Check first if we have
        metadata of the plugin in the cache and update the cache if we
        loaded the plugin to get its metadata.

2014-02-27  Ryan Lortie  <desrt@desrt.ca>

        need to #include <libgen.h> for basename
        https://bugs.webkit.org/show_bug.cgi?id=128597

        Reviewed by Carlos Garcia Campos.

        * PluginProcess/unix/PluginProcessMainUnix.cpp: include <libgen.h> as required by POSIX for basename

2014-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Web Inspector doesn't work with network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=127651

        Reviewed by Sergio Villar Senin.

        The problem is that the web inspector loads so many resources,
        that when using the network process, a lot of IPC traffic is
        generated causing the send buffer of the socket to be full. When
        that happens sendmsg() fails with EAGAIN, because we are using non
        blocking sockets, and we are not handling neither EAGAIN nor
        EWOULDBLOCK errors (we do when reading from the socket, though).

        * Platform/IPC/unix/ConnectionUnix.cpp:
        (IPC::Connection::readyReadHandler): Add a log message to know
        when reading from the socket fails for any unhandled error.
        (IPC::Connection::sendOutgoingMessage): Handle EAGAIN and
        EWOULDBLOCK errors to try again in those cases. Also add a log
        message for unhandled errors.

2014-02-26  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix after r164751.

        * GNUmakefile.list.am:

2014-02-26  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:

2014-02-26  Dan Bernstein  <mitz@apple.com>

        Replaced use of the EXCLUDED_SOURCE_FILE_NAMES build setting with #if PLATFORM(…) guards in
        the files themselves.

        Rubber-stamped by Sam Weinig.

        * Configurations/WebKit2.xcconfig: Cleared out EXCLUDED_SOURCE_FILE_NAMES_macosx, and left
        EXCLUDED_SOURCE_FILE_NAMES_iphoneos containing just the names of resources the should be
        excluded from Copy Files build phases.
        * NetworkProcess/ios/NetworkProcessIOS.mm:
        * NetworkProcess/mac/NetworkProcessMac.mm:
        * Shared/Downloads/ios/DownloadIOS.mm:
        * Shared/Downloads/mac/DownloadMac.mm:
        * Shared/NativeWebTouchEvent.h:
        * Shared/WebPlatformTouchPoint.cpp:
        * Shared/WebTouchEvent.cpp:
        * Shared/ios/NativeWebKeyboardEventIOS.mm:
        * Shared/ios/NativeWebTouchEventIOS.mm:
        * Shared/ios/WebIOSEventFactory.h:
        * Shared/ios/WebIOSEventFactory.mm:
        * Shared/mac/PasteboardTypes.h:
        * Shared/mac/PasteboardTypes.mm:
        * Shared/mac/PrintInfoMac.mm:
        * UIProcess/API/C/WKInspector.cpp:
        * UIProcess/API/Cocoa/WKThumbnailView.h:
        * UIProcess/API/Cocoa/WKThumbnailView.mm:
        * UIProcess/API/Cocoa/WKThumbnailViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/Plugins/mac/PluginInfoStoreMac.mm:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/TextCheckerIOS.mm:
        * UIProcess/ios/ViewGestureControllerIOS.mm:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        * UIProcess/ios/WKContentView.mm:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        * UIProcess/ios/WKGeolocationProviderIOS.h:
        * UIProcess/ios/WKGeolocationProviderIOS.mm:
        * UIProcess/ios/WKGeolocationProviderIOSObjCSecurityOrigin.mm:
        * UIProcess/ios/WKScrollView.h:
        * UIProcess/ios/WKScrollView.mm:
        * UIProcess/ios/WebInspectorProxyIOS.mm:
        * UIProcess/ios/WebPageProxyIOS.mm:
        * UIProcess/ios/WebProcessProxyIOS.mm:
        * UIProcess/ios/forms/WKFormInputControl.h:
        * UIProcess/ios/forms/WKFormInputControl.mm:
        * UIProcess/ios/forms/WKFormPopover.h:
        * UIProcess/ios/forms/WKFormPopover.mm:
        * UIProcess/mac/FindIndicatorWindow.h:
        * UIProcess/mac/FindIndicatorWindow.mm:
        * UIProcess/mac/PageClientImpl.h:
        * UIProcess/mac/PageClientImpl.mm:
        * UIProcess/mac/TextCheckerMac.mm:
        * UIProcess/mac/WKFullKeyboardAccessWatcher.h:
        * UIProcess/mac/WKFullKeyboardAccessWatcher.mm:
        * UIProcess/mac/WKPrintingView.h:
        * UIProcess/mac/WKPrintingView.mm:
        * UIProcess/mac/WebContextMenuProxyMac.h:
        * UIProcess/mac/WebContextMenuProxyMac.mm:
        * UIProcess/mac/WebInspectorProxyMac.mm:
        * UIProcess/mac/WebPageProxyMac.mm:
        * UIProcess/mac/WebProcessProxyMac.mm:
        * WebProcess/WebCoreSupport/WebChromeClient.h:
        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebDatabaseManagerIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm:
        * WebProcess/WebCoreSupport/ios/WebFrameLoaderClientIOS.mm:
        * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:
        * WebProcess/WebPage/ios/WebBackForwardListProxyIOS.mm:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.h:
        * WebProcess/WebPage/mac/WKAccessibilityWebPageObject.mm:
        * WebProcess/WebPage/mac/WebPageMac.mm:

2014-02-26  Anders Carlsson  <andersca@apple.com>

        VisitedLinkProvider should know which pages it belongs to
        https://bugs.webkit.org/show_bug.cgi?id=129410

        Reviewed by Dan Bernstein.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        (WebKit::VisitedLinkProvider::addPage):
        (WebKit::VisitedLinkProvider::removePage):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::close):

2014-02-26  Enrica Casucci  <enrica@apple.com>

        Build fix.

        Unexpected line break.

        * Configurations/WebKit2.xcconfig:

2014-02-26  Enrica Casucci  <enrica@apple.com>

        Build fix.

        WKFormInputControl.mm and WKFormPopover.mm should be excluded from OS X builds.

        * Configurations/WebKit2.xcconfig:

2014-02-26  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Form controls handling: implement date and time controls.
        https://bugs.webkit.org/show_bug.cgi?id=129344

        Reviewed by Simon Fraser and Joseph Pecoraro.

        This is another step in the implementation of form controls on iOS
        for WebKit2. This adds support for date and time input elements supporting
        the different look and feel for iPhone and iPad.
        WKDateTimePicker implements iPhone UI and
        WKDateTimePopover implements iPad UI.
        WKFormRotatingAccessoryPopover and WKRotatingPopover are
        classes that implement the popover object handling the rotation
        and they will be used as base class for the select controls as well.

        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _displayFormNodeInputView]):
        (-[WKContentView inputView]):
        (-[WKContentView _startAssistingNode:]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/WKFormInputControl.h: Added.
        * UIProcess/ios/WKFormInputControl.mm: Added.
        (-[WKDateTimePicker datePicker]):
        (-[WKDateTimePicker initWithView:datePickerMode:]):
        (-[WKDateTimePicker dealloc]):
        (-[WKDateTimePicker controlView]):
        (-[WKDateTimePicker _timeZoneOffsetFromGMT:]):
        (-[WKDateTimePicker _sanitizeInputValueForFormatter:]):
        (-[WKDateTimePicker _dateChangedSetAsNumber]):
        (-[WKDateTimePicker _dateChangedSetAsString]):
        (-[WKDateTimePicker _dateChanged]):
        (-[WKDateTimePicker _dateChangeHandler:]):
        (-[WKDateTimePicker controlBeginEditing]):
        (-[WKDateTimePicker controlEndEditing]):
        (-[WKFormInputControl initWithView:]):
        (+[WKFormInputControl createPeripheralWithView:]):
        (-[WKFormInputControl beginEditing]):
        (-[WKFormInputControl endEditing]):
        (-[WKFormInputControl assistantView]):
        (-[WKDateTimePopoverViewController initWithView:datePickerMode:]):
        (-[WKDateTimePopoverViewController innerControl]):
        (-[WKDateTimePopoverViewController loadView]):
        (-[WKDateTimePopover clear:]):
        (-[WKDateTimePopover initWithView:datePickerMode:]):
        (-[WKDateTimePopover viewController]):
        (-[WKDateTimePopover controlBeginEditing]):
        (-[WKDateTimePopover controlEndEditing]):
        (-[WKDateTimePopover controlView]):
        * UIProcess/ios/WKFormPeripheral.h: Added.
        * UIProcess/ios/WKFormPopover.h: Added.
        * UIProcess/ios/WKFormPopover.mm: Added.
        (-[WKFormRotatingAccessoryPopover initWithView:]):
        (-[WKFormRotatingAccessoryPopover accessoryDone]):
        (-[WKFormRotatingAccessoryPopover popoverArrowDirections]):
        (-[WKFormRotatingAccessoryPopover popoverWasDismissed:]):
        (-[WKRotatingPopover initWithView:]):
        (-[WKRotatingPopover dealloc]):
        (-[WKRotatingPopover popoverController]):
        (-[WKRotatingPopover setPopoverController:]):
        (-[WKRotatingPopover popoverArrowDirections]):
        (-[WKRotatingPopover presentPopoverAnimated:]):
        (-[WKRotatingPopover dismissPopoverAnimated:]):
        (-[WKRotatingPopover willRotate:]):
        (-[WKRotatingPopover didRotate:]):
        (-[WKRotatingPopover popoverControllerDidDismissPopover:]):
        * UIProcess/ios/WKFormSelectControl.h: Added.
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::setAssistedNodeValue):
        (WebKit::WebPageProxy::setAssistedNodeValueAsNumber):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::setAssistedNodeValue):
        (WebKit::WebPage::setAssistedNodeValueAsNumber):

2014-02-26  Pratik Solanki  <psolanki@apple.com>

        [iOS][Webkit2] Enable codesigning entitlement for web process
        https://bugs.webkit.org/show_bug.cgi?id=129401
        <rdar://problem/16173873>

        Reviewed by Geoffrey Garen.

        * Configurations/WebContent-iOS.entitlements:

2014-02-26  Anders Carlsson  <andersca@apple.com>

        Give VisitedLinkProviders an identifier and send them to the web process
        https://bugs.webkit.org/show_bug.cgi?id=129400

        Reviewed by Dan Bernstein.

        * Shared/WebPageCreationParameters.cpp:
        (WebKit::WebPageCreationParameters::encode):
        (WebKit::WebPageCreationParameters::decode):
        * Shared/WebPageCreationParameters.h:
        * UIProcess/API/Cocoa/WKVisitedLinkProviderInternal.h:
        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::generateIdentifier):
        (WebKit::VisitedLinkProvider::VisitedLinkProvider):
        * UIProcess/VisitedLinkProvider.h:
        (WebKit::VisitedLinkProvider::identifier):
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createWebPage):
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::WebPageProxy):
        (WebKit::WebPageProxy::internalShowContextMenu):
        * UIProcess/WebPageProxy.h:

2014-02-26  Jinwoo Song  <jinwoo7.song@samsung.com>

        Unreviewed CMAKE build fix after r164751.

        * CMakeLists.txt: Renamed WebVisitedLinkProvider.cpp to VisitedLinkTableController.cpp.

2014-02-26  Anders Carlsson  <andersca@apple.com>

        Rename WebVisitedLinkProvider to VisitedLinkTableController
        https://bugs.webkit.org/show_bug.cgi?id=129396

        Reviewed by Dan Bernstein.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/VisitedLinkTableController.cpp: Renamed from Source/WebKit2/WebProcess/WebPage/WebVisitedLinkProvider.cpp.
        (WebKit::VisitedLinkTableController::create):
        (WebKit::VisitedLinkTableController::VisitedLinkTableController):
        (WebKit::VisitedLinkTableController::~VisitedLinkTableController):
        (WebKit::VisitedLinkTableController::isLinkVisited):
        (WebKit::VisitedLinkTableController::addVisitedLink):
        * WebProcess/WebPage/VisitedLinkTableController.h: Renamed from Source/WebKit2/WebProcess/WebPage/WebVisitedLinkProvider.h.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):

2014-02-26  Enrica Casucci  <enrica@apple.com>

        Keyboard keeps showing up when clicking links after being shown once.
        https://bugs.webkit.org/show_bug.cgi?id=129392

        Reviewed by Benjamin Poulain.

        This is a regression introduced by http://trac.webkit.org/changeset/164690.
        _requiresKeyboardWhenFirstResponder should always return NO, if there is
        no assisted node.

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

2014-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        WebProcessProxy::updateProcessState() is causing duplicate symbol linker errors
        https://bugs.webkit.org/show_bug.cgi?id=129390

        Reviewed by Tim Horton.

        Caused by r164737. WebProcessProxy::updateProcessState() is defined in a header, outside of
        a class, but isn't inlined.

        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::updateProcessState):

2014-02-26  Brian Burg  <bburg@apple.com>

        Web Replay: route through UserInputBridge when delivering user inputs to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=128150

        Reviewed by Timothy Hatcher.

        When delivering user inputs to WebCore, route calls through the page's UserInputBridge.
        This allows us to capture and replay user inputs from WebKit2 solely within WebCore.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::tryClose):
        (WebKit::WebPage::loadRequest):
        (WebKit::WebPage::stopLoadingFrame):
        (WebKit::WebPage::stopLoading):
        (WebKit::WebPage::reload):
        (WebKit::WebPage::contextMenuAtPointInWindow):
        (WebKit::handleContextMenuEvent):
        (WebKit::handleMouseEvent):
        (WebKit::handleWheelEvent):
        (WebKit::handleKeyEvent):
        (WebKit::WebPage::scroll):
        (WebKit::WebPage::logicalScroll):

2014-02-26  Pratik Solanki  <psolanki@apple.com>

        [iOS][WebKit2] Adopt SPI for managing tabs
        https://bugs.webkit.org/show_bug.cgi?id=129188
        <rdar://problem/15939827>

        Reviewed by Gavin Barraclough.

        Call into assertions SPI to mark tabs as foreground and background.

        * Configurations/WebKit2.xcconfig:
        * Platform/IPC/Connection.h:
        (IPC::Connection::xpcConnection): Expose the xpc_connection_t.
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::viewStateDidChange):
        * UIProcess/WebProcessProxy.cpp:
        (WebKit::WebProcessProxy::didFinishLaunching):
        * UIProcess/WebProcessProxy.h:
        (WebKit::WebProcessProxy::updateProcessState):
        * UIProcess/ios/WebProcessProxyIOS.mm:
        (WebKit::WebProcessProxy::updateProcessState): Added. This goes through the list of
        WebPageProxies and sets the process state to foreground if one of them is in a window.
        Otherwise, it sets it to background.

2014-02-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r164725 and r164731.
        http://trac.webkit.org/changeset/164725
        http://trac.webkit.org/changeset/164731
        https://bugs.webkit.org/show_bug.cgi?id=129382

        WebKitTestRunner build is broken on IOS (Requested by smfr on
        #webkit).

        * UIProcess/API/Cocoa/WKView.h:
        * UIProcess/API/ios/WKViewIOS.mm: Added.
        (-[WKView initWithCoder:]):
        (-[WKView initWithFrame:processGroup:browsingContextGroup:]):
        (-[WKView initWithFrame:processGroup:browsingContextGroup:relatedToView:]):
        (-[WKView dealloc]):
        (-[WKView setFrame:]):
        (-[WKView setBounds:]):
        (-[WKView scrollView]):
        (-[WKView browsingContextController]):
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        (-[WKView allowsBackForwardNavigationGestures]):
        (-[WKView viewForZoomingInScrollView:]):
        (-[WKView scrollViewWillBeginZooming:withView:]):
        (-[WKView scrollViewWillBeginDragging:]):
        (-[WKView _didFinishScrolling]):
        (-[WKView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKView scrollViewDidEndDecelerating:]):
        (-[WKView scrollViewDidScrollToTop:]):
        (-[WKView scrollViewDidScroll:]):
        (-[WKView scrollViewDidZoom:]):
        (-[WKView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
        (-[WKView _frameOrBoundsChanged]):
        (-[WKView _updateVisibleContentRects]):
        (-[WKView _keyboardChangedWithInfo:adjustScrollView:]):
        (-[WKView _keyboardWillChangeFrame:]):
        (-[WKView _keyboardDidChangeFrame:]):
        (-[WKView _keyboardWillShow:]):
        (-[WKView _keyboardWillHide:]):
        (-[WKView pageRef]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:]):
        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
        (-[WKView minimumLayoutSizeOverride]):
        (-[WKView setMinimumLayoutSizeOverride:]):
        (-[WKView _obscuredInsets]):
        (-[WKView _setObscuredInsets:]):
        (-[WKView _beginInteractiveObscuredInsetsChange]):
        (-[WKView _endInteractiveObscuredInsetsChange]):
        (-[WKView _pageExtendedBackgroundColor]):
        (-[WKView _setBackgroundExtendsBeyondPage:]):
        (-[WKView _backgroundExtendsBeyondPage]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Simon Fraser  <simon.fraser@apple.com>

        Build fix: ContextMenuContextData.* should not be in the Copy Files
        phase.

        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Simon Fraser  <simon.fraser@apple.com>

        Fix MiniBrowser/WebKitTestRunner link errors; WKView still
        needs to be exported while these tools are using it.

        * UIProcess/API/Cocoa/WKView.h:

2014-02-26  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build by wrapping some context menu stuff in #if ENABLE(CONTEXT_MENUS)

        * UIProcess/WebPageProxy.h:

2014-02-26  Martin Hock  <mhock@apple.com>

        Create SessionID value-style class for session IDs.
        https://bugs.webkit.org/show_bug.cgi?id=129141

        The below changes deal solely with mechanical changes to use the SessionID value class instead of uint64_t except where noted.

        Reviewed by Sam Weinig.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        (WebKit::NetworkProcess::destroyPrivateBrowsingSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * Shared/SessionTracker.cpp:
        (WebKit::staticSessionMap):
        (WebKit::storageSessionToID):
        (WebKit::SessionTracker::sessionMap):
        (WebKit::SessionTracker::session):
        (WebKit::SessionTracker::sessionID):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        * Shared/SessionTracker.h: Move code to SessionID class.
        * Shared/WebCoreArgumentCoders.cpp: Add encode and decode for SessionID.
        (IPC::ArgumentCoder<SessionID>::encode):
        (IPC::ArgumentCoder<SessionID>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/CookieStorageShim.mm:
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):
        * UIProcess/APISession.cpp:
        (API::generateID):
        (API::Session::defaultSession):
        (API::Session::legacyPrivateSession):
        (API::Session::Session):
        (API::Session::isEphemeral):
        (API::Session::getID):
        * UIProcess/APISession.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sessionID):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/WebPage/WebPage.cpp: Move sessionID to Page to allow WebCore to access it.
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::sessionID):
        (WebKit::WebPage::isUsingEphemeralSession):
        (WebKit::WebPage::setSessionID):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-02-26  Anders Carlsson  <andersca@apple.com>

        Get rid of WKViewIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=129378

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKView.h:
        * UIProcess/API/ios/WKViewIOS.mm: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-26  Alexey Proskuryakov  <ap@apple.com>

        [iOS] Remove some erroneously captured blocks
        https://bugs.webkit.org/show_bug.cgi?id=129362

        Reviewed by Sam Weinig.

        Remove unused captured Objective-C block variables (capturing these doesn't work anyway).

        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):

2014-02-26  Brady Eidson  <beidson@apple.com>

        Pipe experimental image controls menu up to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=129339

        Reviewed by Simon Fraser.

        Add a WebKit object to represent the data from a ContextMenuContext object that can be shared via IPC:
        * Shared/ContextMenuContextData.cpp: Added.
        (WebKit::ContextMenuContextData::ContextMenuContextData):
        (WebKit::ContextMenuContextData::encode):
        (WebKit::ContextMenuContextData::decode):
        * Shared/ContextMenuContextData.h: Added.
        (WebKit::ContextMenuContextData::webHitTestResultData):
        (WebKit::ContextMenuContextData::isImageControl):

        Update the rest of WK2 to use this object instead of WebHitTestResult::Data directly:
        * UIProcess/WebPageProxy.cpp:
        (WebKit::WebPageProxy::showContextMenu):
        (WebKit::WebPageProxy::internalShowContextMenu): Also make an ENABLE(IMAGE_CONTROLS) change here.
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:

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

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

2014-02-26  Enrique Ocaña González  <eocanha@igalia.com>

        WebKitFindOptions shouldn't expose WEBKIT_FIND_OPTIONS_SHOW_{OVERLAY,FIND_INDICATOR,HIGHLIGHT}
        https://bugs.webkit.org/show_bug.cgi?id=129263

        Reviewed by Sergio Villar Senin.

        Avoided the need of WEBKIT_FIND_OPTIONS_SHOW_* fields by changing the semantics
        of the findOptions field in WebKitFindOptions.

        * UIProcess/API/gtk/WebKitFindController.cpp: Now
        _WebKitFindControllerPrivate.findOptions is interpreted as WebKit::FindOptions
        instead of WebKitFindOptions like before. Now the conversion has to be done in
        both ways.
        (toWebKitFindOptions): Added conversion function from WebKit::FindOptions to
        WebKitFindOptions.
        (webkit_find_controller_get_options):
        (webKitFindControllerPerform):
        (webkit_find_controller_search):
        (webkit_find_controller_search_next):
        (webkit_find_controller_search_previous):
        (webkit_find_controller_count_matches):
        * UIProcess/API/gtk/WebKitFindController.h: Removed values that shouldn't be
        exposed.

2014-02-26  Gergo Balogh  <gbalogh.u-szeged@partner.samsung.com>

        Inspector server should be enabled only when the web sockets is enabled too.
        https://bugs.webkit.org/show_bug.cgi?id=129304

        Reviewed by Csaba Osztrogonác.

        * config.h:

2014-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r164702.

        * UIProcess/DrawingAreaProxy.cpp:

2014-02-26  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc can fail with WebKit1 or WebKit2 only builds
        https://bugs.webkit.org/show_bug.cgi?id=129319

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Do not generate the documentation configuration file if the port
        is disabled.

2014-02-25  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Split the rects/scale updates in 3 internally consistent groups
        https://bugs.webkit.org/show_bug.cgi?id=129354

        Reviewed by Sam Weinig.

        During scaling, the scale and rect of UIScrollView, WebPageProxy, DrawingAreaProxy,
        DrawingArea and WebPage were in completely inconsistent states.

        Some of those disconnect were temporary (like when setting the rect and scale in two different
        messages), some were lasting the time of a tile update (like the UIProcess view of the scale).
        This was causing various visual glitches.

        To fix this, all the updates from the UIProcess are funneled through a single path and the values
        are split into 3 different groups/types.
        When updating the scale/rects, the UIProcess sends the new information to the WebProcess on a queue
        through ViewUpdateDispatcher. There, the updates are accumulated until the MainThread is available.
        Once the main thread is "unblocked" from the previous frame, all the data are updated at once from
        the last known state in ViewUpdateDispatcher. The new tiles are created for the new converage information
        and they are sent to the UIProcess.

        At any point, there are 3 types of scale and rects used for different purpose:
        -In the UIProcess, there is the UIScrollView scale and rects which represent the "true" state or what
         is currently on screen.
         That information is mirrored into WebPageProxy for the other classes needing it like DrawingAreaProxy.
        -In the WebProcess, there is the last known state. That state is always lagging a little behind the "true"
         state.
        -Back in the UIProcess, we have the tile states that is attached to RemoteLayerTreeTransaction. It is used
         to setup the rendering.

        With this change, there are two paths for updating the page scale factor:
        -The UI drives the change, the updates goes WKWebView->WKContentView->WebPageProxy->ViewUpdateDispatcher
         ->WebPage->RemoteLayerTreeDrawingArea->RemoteLayerTreeDrawingAreaProxy->WKContentView->WKWebView.
        -If changes in the content force scaling parameters, the updates goes: WebPage->RemoteLayerTreeDrawingArea
         ->RemoteLayerTreeDrawingAreaProxy->WKContentView->WKWebView.
        The two kind of updates frequently conflicts during loading. We differentiate those through the flag
        scaleWasSetByUIProcess passed with the updates. In cases of conflicts, the user always wins.

        * DerivedSources.make:
        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/VisibleContentRectUpdateInfo.cpp: Added.
        (WebKit::VisibleContentRectUpdateInfo::encode):
        (WebKit::VisibleContentRectUpdateInfo::decode):
        * Shared/VisibleContentRectUpdateInfo.h: Added.
        (WebKit::VisibleContentRectUpdateInfo::VisibleContentRectUpdateInfo):
        (WebKit::VisibleContentRectUpdateInfo::exposedRect):
        (WebKit::VisibleContentRectUpdateInfo::unobscuredRect):
        (WebKit::VisibleContentRectUpdateInfo::scale):
        (WebKit::operator==):
        * Shared/mac/RemoteLayerTreeTransaction.h:
        (WebKit::RemoteLayerTreeTransaction::scaleWasSetByUIProcess):
        (WebKit::RemoteLayerTreeTransaction::setScaleWasSetByUIProcess):
        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView contentView:didCommitLayerTree:WebKit::]):
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidZoom:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateVisibleContentRectsWithStableState:]):
        (-[WKWebView _setObscuredInsets:]):
        (-[WKWebView _endInteractiveObscuredInsetsChange]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _updateVisibleContentRects]):
        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::setCustomFixedPositionRect):
        * UIProcess/DrawingAreaProxy.h:
        (WebKit::DrawingAreaProxy::updateDebugIndicator):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::displayedContentScale):
        (WebKit::WebPageProxy::exposedContentRect):
        (WebKit::WebPageProxy::unobscuredContentRect):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:inStableState:]):
        (-[WKContentView didFinishScrolling]):
        (-[WKContentView didZoomToScale:]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateVisibleContentRects):
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
        (WebKit::RemoteLayerTreeDrawingAreaProxy::scaledExposedRect):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorScale):
        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/ViewUpdateDispatcher.cpp: Added.
        (WebKit::ViewUpdateDispatcher::create):
        (WebKit::ViewUpdateDispatcher::ViewUpdateDispatcher):
        (WebKit::ViewUpdateDispatcher::~ViewUpdateDispatcher):
        (WebKit::ViewUpdateDispatcher::initializeConnection):
        (WebKit::ViewUpdateDispatcher::visibleContentRectUpdate):
        (WebKit::ViewUpdateDispatcher::dispatchVisibleContentRectUpdate):
        * WebProcess/WebPage/ViewUpdateDispatcher.h: Added.
        * WebProcess/WebPage/ViewUpdateDispatcher.messages.in: Added.
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::scalePage):
        * WebProcess/WebPage/WebPage.h:
        (WebKit::WebPage::scaleWasSetByUIProcess):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::tapHighlightAtPosition):
        (WebKit::WebPage::updateVisibleContentRects):
        (WebKit::WebPage::willStartUserTriggeredZooming):
        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::WebProcess):
        (WebKit::WebProcess::initializeConnection):
        * WebProcess/WebProcess.h:

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

        Rename WebCore::VisitedLinkProvider to WebCore::VisitedLinkStore
        https://bugs.webkit.org/show_bug.cgi?id=129357

        Reviewed by Sam Weinig.

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

2014-02-25  Enrica Casucci  <enrica@apple.com>

        [WebKit2] Form controls handling.
        https://bugs.webkit.org/show_bug.cgi?id=129344
        <rdar://problem/16053643>

        Reviewed by Simon Fraser and Joseph Pecoraro.

        This is the step toward adding support for
        form controls iOS style. It adds the logic to
        select the appropriate keyboard type based on the
        element type and introduces the AssistedNodeInformation
        structure used currently for the keyboard type selection
        and that will be used to populate pickers and popovers.
        It also provides information to enable/disable next/previous
        buttons in the accessory view.

        * Scripts/webkit2/messages.py:
        (struct_or_class):
        * Shared/AssistedNodeInformation.cpp: Added.
        (WebKit::AssistedNodeInformation::encode):
        (WebKit::AssistedNodeInformation::decode):
        * Shared/AssistedNodeInformation.h: Added.
        (WebKit::AssistedNodeInformation::AssistedNodeInformation):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/PageClientImplIOS.h:
        * UIProcess/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::startAssistingNode):
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView _requiresKeyboardWhenFirstResponder]):
        (-[WKContentView _updateAccessory]):
        (toUITextAutocapitalize):
        (-[WKContentView textInputTraits]):
        (-[WKContentView assistedNodeInformation]):
        (-[WKContentView _startAssistingNode:]):
        (-[WKContentView _stopAssistingNode]):
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::startAssistingNode):
        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::isAssistableNode):
        (WebKit::hasFocusableNode):
        (WebKit::WebPage::getAssistedNodeInformation):
        (WebKit::WebPage::elementDidFocus):

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

        VisitedLinkProvider should be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=129351

        Reviewed by Sam Weinig.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::create):
        (WebKit::VisitedLinkProvider::~VisitedLinkProvider):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::processDidFinishLaunching):
        (WebKit::WebContext::disconnectProcess):
        (WebKit::WebContext::addVisitedLinkHash):
        * UIProcess/WebContext.h:

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

        Make WebContext handle populating visited links
        https://bugs.webkit.org/show_bug.cgi?id=129348

        Reviewed by Tim Horton.

        This makes it possible to decouple VisitedLinkProvider from WebContext.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::VisitedLinkProvider):
        (WebKit::VisitedLinkProvider::processDidFinishLaunching):
        * UIProcess/VisitedLinkProvider.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::WebContext):
        (WebKit::WebContext::processDidFinishLaunching):
        * UIProcess/WebContext.h:

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

        DrawingAreaProxy is using WebCore's Timer
        https://bugs.webkit.org/show_bug.cgi?id=129347
        <rdar://problem/16078133>

        Reviewed by Tim Horton.

        Use a RunLoop::Timer instead.

        * UIProcess/DrawingAreaProxy.cpp:
        (WebKit::DrawingAreaProxy::DrawingAreaProxy):
        (WebKit::DrawingAreaProxy::exposedRectChangedTimerFired):
        * UIProcess/DrawingAreaProxy.h:

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

        Add WKVisitedLinkProvider
        https://bugs.webkit.org/show_bug.cgi?id=129343

        Reviewed by Sam Weinig.

        * UIProcess/API/Cocoa/WKVisitedLinkProvider.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKVisitedLinkProvider.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKVisitedLinkProviderInternal.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKVisitedLinkProviderPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKWebViewConfiguration.h.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration visitedLinkProvider]):
        (-[WKWebViewConfiguration setVisitedLinkProvider:]):
        * WebKit2.xcodeproj/project.pbxproj:

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

        Simplify visited link style invalidation
        https://bugs.webkit.org/show_bug.cgi?id=129340

        Reviewed by Dan Bernstein.

        * UIProcess/VisitedLinkProvider.cpp:
        (WebKit::VisitedLinkProvider::addVisitedLink):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::visitedLinkStateChanged):
        (WebKit::WebProcess::allVisitedLinkStateChanged):

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

        Fix build.

        Remove VisitedLinkStrategy.

        * NetworkProcess/NetworkProcessPlatformStrategies.cpp:
        * NetworkProcess/NetworkProcessPlatformStrategies.h:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        * WebProcess/WebCoreSupport/WebPlatformStrategies.h:

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

        Rolling out http://trac.webkit.org/changeset/164611, because it broke
        WebKit2.PrivateBrowsingPushStateNoHistoryCallback API test

        The change was for:

        https://bugs.webkit.org/show_bug.cgi?id=129141
        Create SessionID class

2014-02-25  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add delegate method for customizing actions on activated elements
        https://bugs.webkit.org/show_bug.cgi?id=129290

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added. Declared new delegate method.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h:
        (_WKActivatedElementType): Defined enum of element types.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.mm:
        (-[_WKActivatedElementInfo _initWithType:URL:location:title:rect:]): Added type parameter
        to the initializer, used to set the new type property.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h:

        * UIProcess/Cocoa/UIClient.h:
        * UIProcess/Cocoa/UIClient.mm:
        (WebKit::UIClient::setDelegate): Initialize webViewActionsForElementDefaultActions member
        of m_delegateMethods.
        (WebKit::UIClient::actionsForElement): Added. Calls out to the new delegate method if
        implemented. Otherwise returns the default actions.

        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]): Use new _elementInfo ivar
        instead of creating element info here.
        (-[WKActionSheetAssistant showImageSheet]): Create element info here and assign it to
        _elementInfo ivar if presenting a sheet. Call the UI client to get custom actions.
        (-[WKActionSheetAssistant showLinkSheet]): Ditto.
        (-[WKActionSheetAssistant cleanupSheet]): Clear _elementInfo ivar.
        * WebKit2.xcodeproj/project.pbxproj: Added reference to WKUIDelegatePrivate.h.

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

        Unreviewed EFL build fix attempt after r164562

        * CMakeLists.txt: Added WebVisitedLinkProvider.cpp.

2014-02-25  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add ENABLE flag
        https://bugs.webkit.org/show_bug.cgi?id=129153

        Reviewed by Simon Fraser.

        Added ENABLE_CSS_GRID_LAYOUT feature flag.

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

2014-02-25  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r164652.

        * GNUmakefile.list.am: Add WebVisitedLinkProvider build targets.

2014-02-24  Anders Carlsson  <andersca@apple.com>

        Make it possible to set the visited link provider on a per page basis
        https://bugs.webkit.org/show_bug.cgi?id=129288

        Reviewed by Andreas Kling.

        Add WebVisitedLinkProvider which just calls the web process.

        * WebKit2.xcodeproj/project.pbxproj:
        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::WebPage):
        * WebProcess/WebPage/WebVisitedLinkProvider.cpp: Added.
        (WebKit::WebVisitedLinkProvider::create):
        (WebKit::WebVisitedLinkProvider::WebVisitedLinkProvider):
        (WebKit::WebVisitedLinkProvider::~WebVisitedLinkProvider):
        (WebKit::WebVisitedLinkProvider::isLinkVisited):
        (WebKit::WebVisitedLinkProvider::addVisitedLink):
        * WebProcess/WebPage/WebVisitedLinkProvider.h: Added.

2014-02-25  Dan Bernstein  <mitz@apple.com>

        Build fix for case-sensitive filesystems.

        * WebProcess/ios/WebVideoFullscreenManager.cpp:

2014-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark view source mode methods as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=128920

        Reviewed by Martin Robinson.

        Mark WEBKIT_VIEW_MODE_SOURCE as deprecated in documentation and
        only show warnings when set_view_mode is used with WEBKIT_VIEW_MODE_SOURCE.

        * UIProcess/API/gtk/WebKitWebView.cpp:
        (webkit_web_view_set_view_mode):
        (webkit_web_view_get_view_mode):
        * UIProcess/API/gtk/WebKitWebView.h:

2014-02-24  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Stop looking for plug-in profiles in /S/L/Sandbox/Profiles
        https://bugs.webkit.org/show_bug.cgi?id=129262
        <rdar://problem/16149420>

        Reviewed by Sam Weinig.

        Remove unused code.

        * Shared/Plugins/mac/PluginSandboxProfile.mm:
        (WebKit::pluginSandboxProfileDirectory):
        (WebKit::pluginSandboxCommonProfile):
        (WebKit::pluginSandboxProfile):
        (WebKit::pluginHasSandboxProfile):

2014-02-24  Martin Robinson  <mrobinson@igalia.com>

        [GTK] generate-gtkdoc should not generate documentation for source files for unbuilt source files
        https://bugs.webkit.org/show_bug.cgi?id=128417

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Generate a config file for generate-gtkdoc.
        * PlatformGTK.cmake: Ditto.

2014-02-24  Dan Bernstein  <mitz@apple.com>

        32-bit build fix.

        * UIProcess/API/Cocoa/_WKElementAction.mm:
        (+[_WKElementAction elementActionWithType:customTitle:]):

2014-02-24  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Start adding API for customizing actions on activated elements
        https://bugs.webkit.org/show_bug.cgi?id=129284

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/_WKActivatedElementInfo.h: Added. Includes the public interface of what
        was WKElementActionInfo.
        * UIProcess/API/Cocoa/_WKActivatedElementInfo.m: Added.
        (-[_WKActivatedElementInfo _initWithURL:location:title:rect:]): Moved and renamed internal
        initializer from WKElementActionInfo.
        (-[_WKActivatedElementInfo dealloc]): Moved from WKElementActionInfo.
        (-[_WKActivatedElementInfo _boundingRect]): Added private accessor.
        (-[_WKActivatedElementInfo _interactionLocation]): Ditto.
        * UIProcess/API/Cocoa/_WKActivatedElementInfoInternal.h: Added.

        * UIProcess/API/Cocoa/_WKElementAction.h: Added.
        (_WKElementActionType): Moved from WKActionSheet.h and turned into a proper NS_ENUM.
        * UIProcess/API/Cocoa/_WKElementAction.mm: Added.
        (-[_WKElementAction _initWithTitle:actionHandler:type:]): Moved and renamed internal
        initializer from WKActionSheet.mm.
        (-[_WKElementAction dealloc]): Moved from WKActionSheet.mm.
        (+[_WKElementAction elementActionWithTitle:actionHandler:]): Moved and renamed.
        (copyElement): Moved from WKActionSheet.mm.
        (saveImage): Ditto.
        (addToReadingList): Ditto.
        (+[_WKElementAction elementActionWithType:customTitle:]): Moved and renamed.
        (+[_WKElementAction elementActionWithType:]): Ditto.
        (-[_WKElementAction _runActionWithElementInfo:view:]): Moved from WKActionSheet.mm.
        * UIProcess/API/Cocoa/WKElementActionInternal.h: Added.

        * UIProcess/ios/WKActionSheet.h: Removed declarations that were moved elsewhere.
        * UIProcess/ios/WKActionSheet.mm: Removed code that was moved elsewhere.
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):

        * WebKit2.xcodeproj/project.pbxproj: Added references to new files. Changed the Objective-C
        class name check to allow _WK as a class name prefix.

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Use RetainPtrs for two WKContentView data members
        https://bugs.webkit.org/show_bug.cgi?id=129276

        Reviewed by Benjamin Poulain.
        
        The UITextInputTraits were leaked. Fix with RetainPtr goodness.
        
        Rename the obscure _accessory to _formAccessoryView and
        make it a RetainPtr.
        
        Rearrange the data members of the WKContentView class extension
        for better packing and readability.

        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentViewInteraction.h:
        * UIProcess/ios/WKContentViewInteraction.mm:
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView textInputTraits]):

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Remove WKInteractionView, move code into WKContentView
        https://bugs.webkit.org/show_bug.cgi?id=129275

        Reviewed by Benjamin Poulain.
        
        WKInteractionView as an interim solution as WebKit2 on iOS was being
        brought up, and should be removed.
        
        Move its code into a category on WKContentView, mostly unchanged. The
        WKContentView (WKInteraction) categroy now implements the various protocols
        that WKInteractionView implemented.
        
        WKContentView is not an API class, so no longer has WK_API_CLASS, and can
        have implementation-related data members. WKContentViewInternal.h is removed.
        
        WKContentView now exposes a WebPageProxy* rather than a WKPageRef.
        
        Other changes: WKActionSheetAssistant no longer stores a WebPageProxy,
        getting it from the WKContentView instead.
        
        WKAutoCorrectionData and InteractionInformationAtPosition are stored via unique_ptr
        to reduce class size, and avoid having to expose their details in the header.

        * Configurations/WebKit2.xcconfig:
        * UIProcess/API/Cocoa/WKWebViewInternal.h:
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        (-[WKView pageRef]):
        (-[WKView _pageExtendedBackgroundColor]):
        (-[WKView _setBackgroundExtendsBeyondPage:]):
        (-[WKView _backgroundExtendsBeyondPage]):
        * UIProcess/ios/PageClientImplIOS.mm:
        * UIProcess/ios/WKActionSheet.h:
        * UIProcess/ios/WKActionSheet.mm:
        (-[WKActionSheet initWithView:]):
        (+[WKElementAction customElementActionWithTitle:actionHandler:]):
        (copyElement):
        (saveImage):
        (+[WKElementAction standardElementActionWithType:customTitle:]):
        (-[WKElementAction runActionWithElementInfo:view:]):
        * UIProcess/ios/WKActionSheetAssistant.h:
        * UIProcess/ios/WKActionSheetAssistant.mm:
        (-[WKActionSheetAssistant initWithView:]):
        (-[WKActionSheetAssistant dealloc]):
        (-[WKActionSheetAssistant initialPresentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant presentationRectInHostViewForSheet]):
        (-[WKActionSheetAssistant actionSheet:clickedButtonAtIndex:]):
        (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]):
        (-[WKActionSheetAssistant showImageSheet]):
        (-[WKActionSheetAssistant showLinkSheet]):
        (-[WKActionSheetAssistant showDataDetectorsSheet]):
        (-[WKActionSheetAssistant cleanupSheet]):
        * UIProcess/ios/WKContentView.h:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView initWithFrame:context:WebKit::configuration:WebKit::]):
        (-[WKContentView dealloc]):
        (-[WKContentView page]):
        (-[WKContentView isAssistingNode]):
        (-[WKContentView didFinishScrolling]):
        (-[WKContentView willStartZoomOrScroll]):
        (-[WKContentView willStartUserTriggeredScroll]):
        (-[WKContentView willStartUserTriggeredZoom]):
        (-[WKContentView didZoomToScale:]):
        (-[WKContentView _didCommitLoadForMainFrame]):
        (-[WKContentView _didCommitLayerTree:WebKit::]):
        * UIProcess/ios/WKContentViewInteraction.h: Renamed from Source/WebKit2/UIProcess/ios/WKInteractionView.h.
        * UIProcess/ios/WKContentViewInteraction.mm: Renamed from Source/WebKit2/UIProcess/ios/WKInteractionView.mm.
        (-[WKContentView setupInteraction]):
        (-[WKContentView cleanupInteraction]):
        (-[WKContentView positionInformation]):
        (-[WKContentView setInputDelegate:]):
        (-[WKContentView inputDelegate]):
        (-[WKContentView isEditable]):
        (-[WKContentView canBecomeFirstResponder]):
        (-[WKContentView resignFirstResponder]):
        (-[WKContentView _webTouchEventsRecognized:]):
        (inflateQuad):
        (-[WKContentView _webTouchEvent:WebKit::preventsNativeGestures:]):
        (-[WKContentView _didGetTapHighlightForRequest:color:WebCore::quads:WebCore::topLeftRadius:WebCore::topRightRadius:WebCore::bottomLeftRadius:WebCore::bottomRightRadius:WebCore::]):
        (-[WKContentView _cancelLongPressGestureRecognizer]):
        (-[WKContentView _didScroll]):
        (-[WKContentView _requiresKeyboardResetOnReload]):
        (-[WKContentView gestureRecognizer:canPreventGestureRecognizer:]):
        (-[WKContentView gestureRecognizer:canBePreventedByGestureRecognizer:]):
        (isSamePair):
        (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]):
        (-[WKContentView _showImageSheet]):
        (-[WKContentView _showLinkSheet]):
        (-[WKContentView _showDataDetectorsSheet]):
        (-[WKContentView _actionForLongPress]):
        (-[WKContentView ensurePositionInformationIsUpToDate:]):
        (-[WKContentView _updatePositionInformation]):
        (-[WKContentView gestureRecognizerShouldBegin:]):
        (-[WKContentView _cancelInteraction]):
        (-[WKContentView hasSelectablePositionAtPoint:]):
        (-[WKContentView pointIsInAssistedNode:]):
        (-[WKContentView webSelectionRects]):
        (-[WKContentView _highlightLongPressRecognized:]):
        (-[WKContentView _longPressRecognized:]):
        (-[WKContentView _singleTapRecognized:]):
        (-[WKContentView _doubleTapRecognized:]):
        (-[WKContentView _twoFingerDoubleTapRecognized:]):
        (-[WKContentView _twoFingerPanRecognized:]):
        (-[WKContentView _attemptClickAtLocation:]):
        (-[WKContentView useSelectionAssistantWithMode:]):
        (-[WKContentView clearSelection]):
        (-[WKContentView _positionInformationDidChange:]):
        (-[WKContentView _willStartScrollingOrZooming]):
        (-[WKContentView _willStartUserTriggeredScrollingOrZooming]):
        (-[WKContentView _didEndScrollingOrZooming]):
        (-[WKContentView inputAccessoryView]):
        (-[WKContentView supportedPasteboardTypesForCurrentSelection]):
        (-[WKContentView _addShortcut:]):
        (-[WKContentView _promptForReplace:]):
        (-[WKContentView replace:]):
        (-[WKContentView canPerformAction:withSender:]):
        (-[WKContentView _resetShowingTextStyle:]):
        (-[WKContentView _performAction:]):
        (-[WKContentView copy:]):
        (-[WKContentView cut:]):
        (-[WKContentView paste:]):
        (-[WKContentView select:]):
        (-[WKContentView selectAll:]):
        (-[WKContentView toggleBoldface:]):
        (-[WKContentView toggleItalics:]):
        (-[WKContentView toggleUnderline:]):
        (-[WKContentView _showTextStyleOptions:]):
        (-[WKContentView _showDictionary:]):
        (-[WKContentView _define:]):
        (toWKGestureType):
        (toUIWKGestureType):
        (toWKSelectionTouch):
        (toUIWKSelectionTouch):
        (toWKGestureRecognizerState):
        (toUIGestureRecognizerState):
        (toUIWKSelectionFlags):
        (toWKHandlePosition):
        (selectionChangedWithGesture):
        (selectionChangedWithTouch):
        (-[WKContentView _didUpdateBlockSelectionWithTouch:WebKit::withFlags:WebKit::growThreshold:shrinkThreshold:]):
        (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:]):
        (-[WKContentView changeSelectionWithTouchAt:withSelectionTouch:baseIsStart:]):
        (-[WKContentView changeSelectionWithTouchesFrom:to:withGesture:withState:]):
        (-[WKContentView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        (-[WKContentView autocorrectionData]):
        (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
        (-[WKContentView textFirstRect]):
        (-[WKContentView textLastRect]):
        (-[WKContentView applyAutocorrection:toString:withCompletionHandler:]):
        (-[WKContentView requestAutocorrectionContextWithCompletionHandler:]):
        (-[WKContentView accessoryDone]):
        (-[WKContentView accessoryTab:]):
        (-[WKContentView accessoryAutoFill]):
        (-[WKContentView accessoryClear]):
        (-[WKContentView _updateAccessory]):
        (-[WKContentView textInRange:]):
        (-[WKContentView replaceRange:withText:]):
        (-[WKContentView selectedTextRange]):
        (-[WKContentView caretRectForPosition:]):
        (-[WKContentView selectionRectsForRange:]):
        (-[WKContentView setSelectedTextRange:]):
        (-[WKContentView hasMarkedText]):
        (-[WKContentView markedText]):
        (-[WKContentView markedTextRange]):
        (-[WKContentView markedTextStyle]):
        (-[WKContentView setMarkedTextStyle:]):
        (-[WKContentView setMarkedText:selectedRange:]):
        (-[WKContentView unmarkText]):
        (-[WKContentView beginningOfDocument]):
        (-[WKContentView endOfDocument]):
        (-[WKContentView textRangeFromPosition:toPosition:]):
        (-[WKContentView positionFromPosition:offset:]):
        (-[WKContentView positionFromPosition:inDirection:offset:]):
        (-[WKContentView comparePosition:toPosition:]):
        (-[WKContentView offsetFromPosition:toPosition:]):
        (-[WKContentView tokenizer]):
        (-[WKContentView positionWithinRange:farthestInDirection:]):
        (-[WKContentView characterRangeByExtendingPosition:inDirection:]):
        (-[WKContentView baseWritingDirectionForPosition:inDirection:]):
        (-[WKContentView setBaseWritingDirection:forRange:]):
        (-[WKContentView firstRectForRange:]):
        (-[WKContentView closestPositionToPoint:]):
        (-[WKContentView closestPositionToPoint:withinRange:]):
        (-[WKContentView characterRangeAtPoint:]):
        (-[WKContentView deleteBackward]):
        (-[WKContentView insertText:]):
        (-[WKContentView hasText]):
        (-[WKContentView textInputTraits]):
        (-[WKContentView interactionAssistant]):
        (-[WKContentView webSelectionAssistant]):
        (-[WKContentView selectionRange]):
        (-[WKContentView rectForNSRange:]):
        (-[WKContentView _markedTextNSRange]):
        (-[WKContentView selectedDOMRange]):
        (-[WKContentView setSelectedDOMRange:affinityDownstream:]):
        (-[WKContentView replaceRangeWithTextWithoutClosingTyping:replacementText:]):
        (-[WKContentView rectContainingCaretSelection]):
        (-[WKContentView requiresKeyEvents]):
        (-[WKContentView handleKeyWebEvent:]):
        (-[WKContentView _interpretKeyEvent:isCharEvent:]):
        (-[WKContentView setBottomBufferHeight:]):
        (-[WKContentView automaticallySelectedOverlay]):
        (-[WKContentView selectionGranularity]):
        (-[WKContentView insertDictationResult:withCorrectionIdentifier:]):
        (-[WKContentView metadataDictionariesForDictationResults]):
        (-[WKContentView previousUnperturbedDictationResultBoundaryFromPosition:]):
        (-[WKContentView nextUnperturbedDictationResultBoundaryFromPosition:]):
        (-[WKContentView moveBackward:]):
        (-[WKContentView moveForward:]):
        (-[WKContentView characterBeforeCaretSelection]):
        (-[WKContentView wordContainingCaretSelection]):
        (-[WKContentView wordRangeContainingCaretSelection]):
        (-[WKContentView setMarkedText:]):
        (-[WKContentView hasContent]):
        (-[WKContentView selectAll]):
        (-[WKContentView textColorForCaretSelection]):
        (-[WKContentView fontForCaretSelection]):
        (-[WKContentView hasSelection]):
        (-[WKContentView isPosition:atBoundary:inDirection:]):
        (-[WKContentView positionFromPosition:toBoundary:inDirection:]):
        (-[WKContentView isPosition:withinTextUnit:inDirection:]):
        (-[WKContentView rangeEnclosingPosition:withGranularity:inDirection:]):
        (-[WKContentView takeTraitsFrom:]):
        (-[WKContentView _startAssistingKeyboard]):
        (-[WKContentView _stopAssistingKeyboard]):
        (-[WKContentView _startAssistingNode]):
        (-[WKContentView _stopAssistingNode]):
        (-[WKContentView _selectionChanged]):
        (-[WKContentView shouldIgnoreWebTouch]):
        (-[WKContentView isAnyTouchOverActiveArea:]):
        (-[WKTextRange _isCaret]):
        (-[WKTextRange _isRanged]):
        (+[WKTextRange textRangeWithState:isRange:isEditable:startRect:endRect:selectionRects:selectedTextLength:]):
        (-[WKTextRange dealloc]):
        (-[WKTextRange description]):
        (-[WKTextRange start]):
        (-[WKTextRange end]):
        (-[WKTextRange isEmpty]):
        (-[WKTextRange isEqual:]):
        (+[WKTextPosition textPositionWithRect:]):
        (-[WKTextPosition isEqual:]):
        (-[WKTextPosition description]):
        (-[WKTextSelectionRect initWithWebRect:]):
        (-[WKTextSelectionRect dealloc]):
        (+[WKTextSelectionRect textSelectionRectsWithWebRects:]):
        (-[WKTextSelectionRect rect]):
        (-[WKTextSelectionRect writingDirection]):
        (-[WKTextSelectionRect range]):
        (-[WKTextSelectionRect containsStart]):
        (-[WKTextSelectionRect containsEnd]):
        (-[WKTextSelectionRect isVertical]):
        (+[WKAutocorrectionRects autocorrectionRectsWithRects:lastRect:]):
        (+[WKAutocorrectionContext autocorrectionContextWithData:markedText:selectedText:afterText:selectedRangeInMarkedText:]):
        (-[WKAutocorrectionContext dealloc]):
        * UIProcess/ios/WKContentViewInternal.h: Removed.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Anders Carlsson  <andersca@apple.com>

        WKProcessPool should use secondary processes + network process
        https://bugs.webkit.org/show_bug.cgi?id=129282

        Reviewed by Simon Fraser.

        * UIProcess/API/Cocoa/WKProcessPool.mm:
        (-[WKProcessPool initWithConfiguration:]):

2014-02-24  Jeremy Jones  <jeremyj@apple.com>

        WK2 AVKit fullscreen doesn't display video.
        https://bugs.webkit.org/show_bug.cgi?id=128564

        Reviewed by Simon Fraser.

        * Shared/mac/RemoteLayerTreeTransaction.h:
        Add a property to track video layer pending fullscreen.

        (WebKit::RemoteLayerTreeTransaction::isVideoLayerIDPendingFullscreen):
        (WebKit::RemoteLayerTreeTransaction::addVideoLayerIDPendingFullscreen):
        Add a property to track video layer pending fullscreen.

        * Shared/mac/RemoteLayerTreeTransaction.mm:
        (WebKit::RemoteLayerTreeTransaction::encode):
        (WebKit::RemoteLayerTreeTransaction::decode):
        Encode and decode m_videoLayerIDsPendingFullscreen.

        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::didCommitLayerTree):
        Let WebVideoFullscreenManagerProxy see the RemoteLayerTreeTransaction.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.cpp:
        (WebKit::WebVideoFullscreenManagerProxy::didCommitLayerTree):
        Look for video layer pending fullscreen on the transaction to initiate
        fullscreen.

        (WebKit::WebVideoFullscreenManagerProxy::setVideoLayerID):
        Start looking for the video layer pending fullscreen in the transaction.

        (WebKit::WebVideoFullscreenManagerProxy::enterFullscreen):
        Override to prevent fullscreen from happening before the layer
        is pending fullscreen.

        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in:
        Pass a more specific videoLayerID in SetVideoLayerID,
        i.e. WebCore::GraphicsLayer::PlatformLayerID.

        * WebProcess/WebPage/WebPage.cpp:
        (WebKit::WebPage::willCommitLayerTree):
        Move webPage specific transaction building here, including,
        giving WebVideoFullscreenManager a chance to modify the transaction.

        * WebProcess/WebPage/WebPage.h:
        Add willCommitLayerTree();

        * WebProcess/WebPage/mac/PlatformCALayerRemoteCustom.mm:
        (PlatformCALayerRemoteCustom::PlatformCALayerRemoteCustom):
        (PlatformCALayerRemoteCustom::~PlatformCALayerRemoteCustom):
        Make and break the connection from CALayer to PlatformCALayerRemoteCustom,
        the same way it is done for PlatformCALayerMac.

        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
        Move WebPage specific transaction building into WebPage::willCommitLayerTree.

        * WebProcess/ios/WebVideoFullscreenManager.cpp:
        (WebKit::WebVideoFullscreenManager::willCommitLayerTree):
        addVideoLayerIDPendingFullscreen on RemoteLayerTreeTransaction when needed.

        (WebKit::WebVideoFullscreenManager::setVideoLayer):
        Pass along the video layerID.

        * WebProcess/ios/WebVideoFullscreenManager.h:
        Add willCommitLayerTree() and remove setVideoLayerID().
        Add a member to retain the unparented PlatformCALayer.

2014-02-24  Martin Hock  <mhock@apple.com>

        Create SessionID value-style class for session IDs.
        https://bugs.webkit.org/show_bug.cgi?id=129141

        The below changes deal solely with mechanical changes to use the SessionID value class instead of uint64_t except where noted.

        Reviewed by Brady Eidson.

        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
        (WebKit::storageSession):
        (WebKit::NetworkConnectionToWebProcess::startDownload):
        (WebKit::NetworkConnectionToWebProcess::cookiesForDOM):
        (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM):
        (WebKit::NetworkConnectionToWebProcess::cookiesEnabled):
        (WebKit::NetworkConnectionToWebProcess::cookieRequestHeaderFieldValue):
        (WebKit::NetworkConnectionToWebProcess::getRawCookies):
        (WebKit::NetworkConnectionToWebProcess::deleteCookie):
        * NetworkProcess/NetworkConnectionToWebProcess.h:
        * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
        * NetworkProcess/NetworkProcess.cpp:
        (WebKit::NetworkProcess::initializeNetworkProcess):
        (WebKit::NetworkProcess::ensurePrivateBrowsingSession):
        (WebKit::NetworkProcess::destroyPrivateBrowsingSession):
        * NetworkProcess/NetworkProcess.h:
        * NetworkProcess/NetworkProcess.messages.in:
        * NetworkProcess/NetworkResourceLoader.h:
        * NetworkProcess/RemoteNetworkingContext.h:
        * NetworkProcess/mac/RemoteNetworkingContext.mm:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
        * Shared/Network/NetworkResourceLoadParameters.cpp:
        (WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters):
        * Shared/Network/NetworkResourceLoadParameters.h:
        * Shared/SessionTracker.cpp:
        (WebKit::staticSessionMap):
        (WebKit::storageSessionToID):
        (WebKit::SessionTracker::sessionMap):
        (WebKit::SessionTracker::session):
        (WebKit::SessionTracker::sessionID):
        (WebKit::SessionTracker::setSession):
        (WebKit::SessionTracker::destroySession):
        * Shared/SessionTracker.h: Move code to SessionID class.
        * Shared/WebCoreArgumentCoders.cpp: Add encode and decode for SessionID.
        (IPC::ArgumentCoder<SessionID>::encode):
        (IPC::ArgumentCoder<SessionID>::decode):
        * Shared/WebCoreArgumentCoders.h:
        * Shared/mac/CookieStorageShim.mm:
        (WebKit::webKitCookieStorageCopyRequestHeaderFieldsForURL):
        * UIProcess/APISession.cpp:
        (API::generateID):
        (API::Session::defaultSession):
        (API::Session::legacyPrivateSession):
        (API::Session::Session):
        (API::Session::isEphemeral):
        (API::Session::getID):
        * UIProcess/APISession.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::setAnyPageGroupMightHavePrivateBrowsingEnabled):
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/WebContext.h:
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::sessionID):
        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::setPrivateBrowsingEnabled):
        * WebProcess/Network/WebResourceLoadScheduler.cpp:
        (WebKit::WebResourceLoadScheduler::scheduleLoad):
        * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
        (WebKit::WebPlatformStrategies::loadResourceSynchronously):
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebKit::WebFrameNetworkingContext::storageSession):
        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:
        * WebProcess/WebPage/WebPage.cpp: Move sessionID to Page to allow WebCore to access it.
        (WebKit::WebPage::WebPage):
        (WebKit::WebPage::sessionID):
        (WebKit::WebPage::isUsingEphemeralSession):
        (WebKit::WebPage::setSessionID):
        (WebKit::WebPage::updatePreferences):
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::ensurePrivateBrowsingSession):
        (WebKit::WebProcess::destroyPrivateBrowsingSession):
        * WebProcess/WebProcess.h:
        * WebProcess/WebProcess.messages.in:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Remove PDFViewController.*, which is unused
        https://bugs.webkit.org/show_bug.cgi?id=129270

        Reviewed by Tim Horton.

        * UIProcess/mac/PDFViewController.h: Removed.
        * UIProcess/mac/PDFViewController.mm: Removed.

2014-02-24  Anders Carlsson  <andersca@apple.com>

        Rename WKProcessClass to WKProcessPool
        https://bugs.webkit.org/show_bug.cgi?id=129268

        Reviewed by Dan Bernstein.

        Stage this rename by adding back WKProcessClass and WKProcessClassConfiguration as subclasses of the renamed classes.

        * Shared/Cocoa/APIObject.mm:
        (API::Object::newObject):
        * UIProcess/API/Cocoa/WKProcessClass.h:
        * UIProcess/API/Cocoa/WKProcessClass.mm:
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.h:
        * UIProcess/API/Cocoa/WKProcessClassConfiguration.mm:
        * UIProcess/API/Cocoa/WKProcessClassConfigurationPrivate.h:
        * UIProcess/API/Cocoa/WKProcessClassPrivate.h:
        * UIProcess/API/Cocoa/WKProcessPool.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClass.h.
        * UIProcess/API/Cocoa/WKProcessPool.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClass.mm.
        (-[WKProcessPool init]):
        (-[WKProcessPool initWithConfiguration:]):
        (-[WKProcessPool dealloc]):
        (-[WKProcessPool description]):
        (-[WKProcessPool configuration]):
        (-[WKProcessPool API::]):
        (-[WKProcessPool _setAllowsSpecificHTTPSCertificate:forHost:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassConfiguration.h.
        * UIProcess/API/Cocoa/WKProcessPoolConfiguration.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassConfiguration.mm.
        (-[WKProcessPoolConfiguration _injectedBundleURL]):
        (-[WKProcessPoolConfiguration _setInjectedBundleURL:]):
        (-[WKProcessPoolConfiguration description]):
        (-[WKProcessPoolConfiguration copyWithZone:]):
        * UIProcess/API/Cocoa/WKProcessPoolConfigurationPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassConfigurationPrivate.h.
        * UIProcess/API/Cocoa/WKProcessPoolInternal.h: Renamed from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassInternal.h.
        (WebKit::wrapper):
        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassPrivate.h.
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        * UIProcess/API/Cocoa/WKWebViewConfiguration.h:
        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
        (-[WKWebViewConfiguration description]):
        (-[WKWebViewConfiguration copyWithZone:]):
        (-[WKWebViewConfiguration processPool]):
        (-[WKWebViewConfiguration setProcessPool:]):
        * UIProcess/API/Cocoa/WKWebViewConfigurationToBeRemoved.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKProcessClassPrivate.h.
        (-[WKWebViewConfiguration setProcessClass:]):
        (-[WKWebViewConfiguration processClass]):
        * UIProcess/API/mac/WKView.mm:
        * UIProcess/ios/WKContentView.mm:
        (-[WKContentView _decidePolicyForGeolocationRequestFromOrigin:frame:request:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Move non-API files out of WebKit2/UIProcess/API/mac
        https://bugs.webkit.org/show_bug.cgi?id=129267

        Reviewed by Anders Carlsson.

        * UIProcess/mac/FindIndicatorWindow.h: Renamed from Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.h.
        * UIProcess/mac/FindIndicatorWindow.mm: Renamed from Source/WebKit2/UIProcess/API/mac/FindIndicatorWindow.mm.
        * UIProcess/mac/PDFViewController.h: Renamed from Source/WebKit2/UIProcess/API/mac/PDFViewController.h.
        * UIProcess/mac/PDFViewController.mm: Renamed from Source/WebKit2/UIProcess/API/mac/PDFViewController.mm.
        * UIProcess/mac/WKPrintingView.h: Renamed from Source/WebKit2/UIProcess/API/mac/WKPrintingView.h.
        * UIProcess/mac/WKPrintingView.mm: Renamed from Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm.
        * UIProcess/mac/WKTextInputWindowController.h: Renamed from Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.h.
        * UIProcess/mac/WKTextInputWindowController.mm: Renamed from Source/WebKit2/UIProcess/API/mac/WKTextInputWindowController.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Move non-API files in the API/ios directory out to UIProcess/ios
        https://bugs.webkit.org/show_bug.cgi?id=129264

        Reviewed by Anders Carlsson.

        * UIProcess/ios/PageClientImplIOS.h: Renamed from Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.h.
        * UIProcess/ios/PageClientImplIOS.mm: Renamed from Source/WebKit2/UIProcess/API/ios/PageClientImplIOS.mm.
        * UIProcess/ios/WKActionSheet.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKActionSheet.h.
        * UIProcess/ios/WKActionSheet.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKActionSheet.mm.
        * UIProcess/ios/WKContentViewInternal.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKContentViewInternal.h.
        * UIProcess/ios/WKGeolocationProviderIOS.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKGeolocationProviderIOS.h.
        * UIProcess/ios/WKGeolocationProviderIOS.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKGeolocationProviderIOS.mm.
        * UIProcess/ios/WKInteractionView.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKInteractionView.h.
        * UIProcess/ios/WKInteractionView.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKInteractionView.mm.
        * UIProcess/ios/WKScrollView.h: Renamed from Source/WebKit2/UIProcess/API/ios/WKScrollView.h.
        * UIProcess/ios/WKScrollView.mm: Renamed from Source/WebKit2/UIProcess/API/ios/WKScrollView.mm.
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-24  Simon Fraser  <simon.fraser@apple.com>

        Rename PageClientImplIOS::m_view to m_contentView
        https://bugs.webkit.org/show_bug.cgi?id=129124

        Reviewed by Benjamin Poulain.
        
        Simple rename of m_view to m_contentView in preparation for
        also holding onto the WKView.

        * UIProcess/API/ios/PageClientImplIOS.h:
        * UIProcess/API/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::PageClientImpl):
        (WebKit::PageClientImpl::createDrawingAreaProxy):
        (WebKit::PageClientImpl::viewSize):
        (WebKit::PageClientImpl::isViewInWindow):
        (WebKit::PageClientImpl::processDidExit):
        (WebKit::PageClientImpl::didRelaunchProcess):
        (WebKit::PageClientImpl::decidePolicyForGeolocationPermissionRequest):
        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
        (WebKit::PageClientImpl::interpretKeyEvent):
        (WebKit::PageClientImpl::positionInformationDidChange):
        (WebKit::PageClientImpl::selectionDidChange):
        (WebKit::PageClientImpl::screenToRootView):
        (WebKit::PageClientImpl::rootViewToScreen):
        (WebKit::PageClientImpl::setAcceleratedCompositingRootLayer):
        (WebKit::PageClientImpl::takeViewSnapshot):
        (WebKit::PageClientImpl::didGetTapHighlightGeometries):
        (WebKit::PageClientImpl::didCommitLayerTree):
        (WebKit::PageClientImpl::startAssistingNode):
        (WebKit::PageClientImpl::stopAssistingNode):

2014-02-24  Enrique Ocaña González  <eocanha@igalia.com>

        REGRESSION(r164438): [GTK] Tests /webkit2/WebKitWebView/tls-errors-policy and /webkit2/WebKitWebContext/uri-scheme fail
        https://bugs.webkit.org/show_bug.cgi?id=129252

        Reviewed by Carlos Garcia Campos.

        * UIProcess/API/gtk/WebKitPrivate.cpp: Manage error values generated by the user application and not present in WebCore
        (toWebKitError):
        (toWebCoreError):

2014-02-24  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/16059894> Update AppleConnect sandbox profile for XPC process names.

        Patch by Ivan Krstić, reviewed and landed by me.

        * Resources/PlugInSandboxProfiles/com.apple.ist.ds.appleconnect.webplugin.sb:

2014-02-24  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Code cleanup: remove leftover ENABLE(WORKERS) macros and support.
        https://bugs.webkit.org/show_bug.cgi?id=129255

        Reviewed by Csaba Osztrogonác.

        ENABLE_WORKERS macro was removed in r159679.
        Support is now also removed from xcconfig files.

        * Configurations/FeatureDefines.xcconfig:

2014-02-24  Iago Toral Quiroga  <itoral@igalia.com>

        [GTK] Wrong active context when destroying GL objects.
        https://bugs.webkit.org/show_bug.cgi?id=129244

        Reviewed by Martin Robinson.

        * WebProcess/WebPage/gtk/LayerTreeHostGtk.cpp:
        (WebKit::LayerTreeHostGtk::invalidate): make context current before destroying GL objects.

2014-02-24  Koop Mast <kwm@FreeBSD.org>

        Remove unused error.h header.
        https://bugs.webkit.org/show_bug.cgi?id=126774

        Reviewed by Anders Carlsson.

        This header doesn't exists on FreeBSD. According to
        https://www.gnu.org/software/gnulib/manual/html_node/error_002eh.html
        the function that this header implements are not present in the file.
        So there isn't any need for this header.

        * NetworkProcess/unix/NetworkProcessMainUnix.cpp:

2014-02-24  David Kilzer  <ddkilzer@apple.com>

        Remove redundant setting in FeatureDefines.xcconfig

        * Configurations/FeatureDefines.xcconfig:

2014-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unneeded method webkitWebViewBaseRequestExitFullScreen
        https://bugs.webkit.org/show_bug.cgi?id=129245

        Reviewed by Sergio Villar Senin.

        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
        (webkitWebViewBaseKeyPressEvent): Call FullscreenManager::requestExitFullScreen() directly.
        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:

2014-02-23  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/16144508> [iOS] Some definitions of INSTALL_PATH don’t account for INSTALL_PATH_PREFIX
        https://bugs.webkit.org/show_bug.cgi?id=129241

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Define INSTALL_PATH here in terms of INSTALL_PATH_ACTUAL.
        * Configurations/BaseLegacyProcess.xcconfig: Define only INSTALL_PATH_ACTUAL.
        * Configurations/BaseTarget.xcconfig: Simplify the definition of
        NORMAL_WEBKIT2_FRAMEWORKS_DIR, now that it shouldn’t include SDKROOT for the Simulator.
        * Configurations/BaseXPCService.xcconfig: Define only INSTALL_PATH_ACTUAL.
        * Configurations/WebKit2.xcconfig: Ditto.

2014-02-23  Sam Weinig  <sam@webkit.org>

        Update FeatureDefines.xcconfig

        Rubber-stamped by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2014-02-23  Sam Weinig  <sam@webkit.org>

        [WebKit2] Add C-SPI to enable/disable telephone number detection
        https://bugs.webkit.org/show_bug.cgi?id=129239

        Reviewed by Dean Jackson.

        * UIProcess/API/C/WKPreferences.cpp:
        (WKPreferencesSetTelephoneNumberParsingEnabled):
        (WKPreferencesGetTelephoneNumberParsingEnabled):
        * UIProcess/API/C/WKPreferencesPrivate.h:

2014-02-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Change a url parameter type with URL in NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=129202

        Reviewed by Sam Weinig.

        It would be good if we use *URL* for url parameters instead of using String.

        Merge from blink. https://src.chromium.org/viewvc/blink?view=rev&revision=165458.

        * WebProcess/WebCoreSupport/WebNavigatorContentUtilsClient.h:
        (WebKit::WebNavigatorContentUtilsClient::isProtocolHandlerRegistered):
        (WebKit::WebNavigatorContentUtilsClient::unregisterProtocolHandler):

2014-02-23  Sam Weinig  <sam@webkit.org>

        Move telephone number detection behind its own ENABLE macro
        https://bugs.webkit.org/show_bug.cgi?id=129236

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_TELEPHONE_NUMBER_DETECTION.

2014-02-23  Diego Pino García  <dpino@igalia.com>

        [GTK] Fix build after Web Inspector code reorganization (r164543)
        https://bugs.webkit.org/show_bug.cgi?id=129231

        Reviewed by Dean Jackson.

        * PlatformGTK.cmake:
        Modify paths to Web Inspector code.

2014-02-22  Joseph Pecoraro  <pecoraro@apple.com>

        Remove some unreachable code (-Wunreachable-code)
        https://bugs.webkit.org/show_bug.cgi?id=129220

        Reviewed by Eric Carlson.

        * WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:
        (WebKit::toAPI):

2014-02-22  Dan Bernstein  <mitz@apple.com>

        [Cocoa] WKUIDelegate.h is a project header
        https://bugs.webkit.org/show_bug.cgi?id=129215

        Reviewed by Anders Carlsson.

        * WebKit2.xcodeproj/project.pbxproj: Make it a public header.

2014-02-22  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12500358> [Cocoa] Development variants of XPC services should not be installed in WebKit2.framework/XPCServices
        https://bugs.webkit.org/show_bug.cgi?id=129197

        Reviewed by Sam Weinig.

        * Configurations/BaseXPCService.xcconfig: Made INSTALL_PATH vary based on
        WK_XPC_SERVICE_VARIANT. For the Development variant, use an install path outside the
        framework. Note that engineering builds using the build action continue to have the
        Development variants copied into the framework by a script build phase.
        * Configurations/DatabaseService.Development.xcconfig: Set WK_XPC_SERVICE_VARIANT.
        * Configurations/DatabaseService.xcconfig: Ditto.
        * Configurations/NetworkService.Development.xcconfig: Ditto.
        * Configurations/NetworkService.xcconfig: Ditto.
        * Configurations/PluginService.32.xcconfig: Ditto.
        * Configurations/PluginService.64.xcconfig: Ditto.
        * Configurations/PluginService.Development.xcconfig: Ditto.
        * Configurations/WebContentService.Development.xcconfig: Ditto.
        * Configurations/WebContentService.xcconfig: Ditto.

2014-02-21  Brent Fulgham  <bfulgham@apple.com>

        Extend media support for WebVTT sources
        https://bugs.webkit.org/show_bug.cgi?id=129156

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Add new feature define for AVF_CAPTIONS

2014-02-21  Enrica Casucci  <enrica@apple.com>

        [iOS WebKit2] Keyboard appears every time a link is tapped after searching Google
        <rdar://problem/16072563>.

        Reviewed by Benjamin Poulain.

        We need to stop assisting the node if we have
        navigated to a different page.

        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView _didCommitLoadForMainFrame]):

2014-02-21  Dan Bernstein  <mitz@apple.com>

        Made WKWebView implement all WKContentViewDelegate methods.

        Reviewed by Anders Carlsson.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView takeViewSnapshotForContentView:]): Moved from WKViewIOS.mm.
        * UIProcess/API/ios/WKContentView.h: Made all protocol methods required.
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]): Removed code
        to set self as the delegate on the content view.

2014-02-21  Sam Weinig  <sam@webkit.org>

        <rdar://problem/16073882> Please add _AbandonCoalition key to plugin XPC service Info.plist

        Reviewed by Anders Carlsson.

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

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

        [Mac] Cache callbacks for cache partitioning may be passed null
        https://bugs.webkit.org/show_bug.cgi?id=129175

        Reviewed by Brady Eidson.

        * WebProcess/ResourceCache/cf/WebResourceCacheManagerCFNet.cpp:
        (WebKit::WebResourceCacheManager::cfURLCacheHostNamesWithCallback):

2014-02-21  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Update the visible content rects on zoom
        https://bugs.webkit.org/show_bug.cgi?id=129174

        Reviewed by Simon Fraser.

        Generalize _updateVisibleContentRects to also act during the zoom and not only at the end.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewDidZoom:]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView scrollViewDidZoom:]):

2014-02-21  Benjamin Poulain  <benjamin@webkit.org>

        jsDocumentPrototypeFunctionGetElementById should not create an AtomicString for the function argument
        https://bugs.webkit.org/show_bug.cgi?id=128893

        Reviewed by Darin Adler.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::pageNumberForElementById): Remove the explicit conversion to use the right overload.

2014-02-21  Enrica Casucci  <enrica@apple.com>

        Support WebSelections in WK2 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=127015
        <rdar://problem/15211964>

        Reviewed by Benjamin Poulain.

        This is the remaining work on block selections for iOS in WK2.
        Once a block selection has been created with a long press gesture
        on a selectable area, we can interact with it by touching the four
        handles at the top, right, bottom and left side of the selection box.
        Expanding or shrinking a block selection requires finding the next/previous
        block in the direction of the movement, depending on the handle we
        are interacting with.
        Every time a new block is selected, we compute the thresholds required
        to trigger another block change. The thresholds are sent back to the
        UIProcess that will use this information to decide when to activate
        the new selection, either bigger or smaller.
        This patch also fixes a bug in selectWithTwoTouches where the points
        were not mapped to the active frame.

        * Shared/ios/WKGestureTypes.h:
        * UIProcess/API/ios/PageClientImplIOS.h:
        * UIProcess/API/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::didUpdateBlockSelectionWithTouches):
        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView _didUpdateBlockSelectionWithTouches:withFlags:growThreshold:shrinkThreshold:]):
        * UIProcess/API/ios/WKContentViewInternal.h:
        * UIProcess/API/ios/WKInteractionView.h:
        * UIProcess/API/ios/WKInteractionView.mm:
        (-[WKInteractionView hasSelectablePositionAtPoint:]):
        (-[WKInteractionView clearSelection]):
        (toWKHandlePosition):
        (-[WKInteractionView _didUpdateBlockSelectionWithTouches:WebKit::withFlags:WebKit::growThreshold:shrinkThreshold:]):
        (-[WKInteractionView changeBlockSelectionWithTouchAt:withSelectionTouch:forHandle:]):
        * UIProcess/PageClient.h:
        * UIProcess/WebPageProxy.h:
        * UIProcess/WebPageProxy.messages.in:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::updateBlockSelectionWithTouches):
        (WebKit::WebPageProxy::didUpdateBlockSelectionWithTouches):
        * WebProcess/WebPage/WebPage.cpp:
        * WebProcess/WebPage/WebPage.h:
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:
        (WebKit::WebPage::rangeForWebSelectionAtPosition):
        (WebKit::WebPage::rangeForBlockAtPoint):
        (WebKit::WebPage::selectWithGesture):
        (WebKit::distanceBetweenRectsForPosition):
        (WebKit::rectsEssentiallyTheSame):
        (WebKit::containsRange):
        (WebKit::unionDOMRanges):
        (WebKit::computeEdgeCenter):
        (WebKit::WebPage::expandedRangeFromHandle):
        (WebKit::WebPage::contractedRangeFromHandle):
        (WebKit::WebPage::computeExpandAndShrinkThresholdsForHandle):
        (WebKit::shouldExpand):
        (WebKit::WebPage::changeBlockSelection):
        (WebKit::WebPage::updateBlockSelectionWithTouches):
        (WebKit::WebPage::clearSelection):
        (WebKit::WebPage::selectWithTwoTouches):
        (WebKit::WebPage::getPositionInformation):

2014-02-21  Anders Carlsson  <andersca@apple.com>

        Make sure to invoke the completion handler for JS alerts
        https://bugs.webkit.org/show_bug.cgi?id=129158

        Reviewed by Alexey Proskuryakov.

        * UIProcess/API/C/WKPage.cpp:
        (WKPageSetPageUIClient):

2014-02-20  Zalan Bujtas  <zalan@apple.com>

        Remove redundant deviceScaleFactor() functions and make callers use Document::deviceScaleFactor() when accessible.
        https://bugs.webkit.org/show_bug.cgi?id=129137

        Reviewed by Simon Fraser.

        No change in behavior.

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

2014-02-20  Benjamin Poulain  <bpoulain@apple.com>

        Add a missing piece of r164469

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView scrollViewWillBeginDragging:]):
        I forgot to duplicate the change from WKViewIOS in r164469.

2014-02-20  Benjamin Poulain  <bpoulain@apple.com>

        WKInteractionView always blocks the main thread when sending touch events
        https://bugs.webkit.org/show_bug.cgi?id=129059

        Reviewed by Enrica Casucci.

        Add the asynchronous dispatching to WebKit2.

        * Shared/NativeWebTouchEvent.h:
        (WebKit::NativeWebTouchEvent::uniqueId):
        * Shared/ios/NativeWebTouchEventIOS.mm:
        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
        * UIProcess/API/ios/PageClientImplIOS.mm:
        (WebKit::PageClientImpl::doneWithTouchEvent):
        * UIProcess/API/ios/WKContentView.h:
        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView willStartUserTriggeredScroll]):
        (-[WKContentView willStartUserTriggeredZoom]):
        (-[WKContentView _webTouchEvent:WebKit::preventsNativeGestures:]):
        * UIProcess/API/ios/WKContentViewInternal.h:
        * UIProcess/API/ios/WKInteractionView.h:
        * UIProcess/API/ios/WKInteractionView.mm:
        (-[WKInteractionView _webTouchEventsRecognized:]):
        (-[WKInteractionView _webTouchEvent:WebKit::preventsNativeGestures:]):
        (-[WKInteractionView _willStartUserTriggeredScrollingOrZooming]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView scrollViewWillBeginDragging:]):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-20  Benjamin Poulain  <bpoulain@apple.com>

        Start fixing the view states driven by the WKScrollView
        https://bugs.webkit.org/show_bug.cgi?id=129140

        Reviewed by Tim Horton and Simon Fraser.

        WKScrollView creates a "window" over WKContentView with an area that is exposed,
        an area that is unobcured and with a certain scale.

        Instead of having 3 loosely related paths for updating WKContentView
        when the content "window" change, everything is consolidated behind the
        single API -[WKContentView didUpdateVisibleRect:unobscuredRect:scale:].

        This patch only fixes the content updates from the UI process side to keep things simple.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView _didFinishScrolling]):
        (-[WKWebView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKWebView scrollViewDidEndDecelerating:]):
        (-[WKWebView scrollViewDidScrollToTop:]):
        (-[WKWebView scrollViewDidScroll:]):
        (-[WKWebView scrollViewDidEndZooming:withView:atScale:]):
        (-[WKWebView _frameOrBoundsChanged]):
        (-[WKWebView _updateContentWindow]):
        (-[WKWebView _setObscuredInsets:]):
        * UIProcess/API/ios/WKContentView.h:
        * UIProcess/API/ios/WKContentView.mm:
        (-[WKContentView didUpdateVisibleRect:unobscuredRect:scale:]):
        (-[WKContentView _updateFixedPositionRect]):
        (-[WKContentView didFinishScrolling]):
        (-[WKContentView didZoomToScale:]):
        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView contentView:didCommitLayerTree:]):
        (-[WKView _didFinishScrolling]):
        (-[WKView scrollViewDidEndDragging:willDecelerate:]):
        (-[WKView scrollViewDidEndDecelerating:]):
        (-[WKView scrollViewDidScrollToTop:]):
        (-[WKView scrollViewDidScroll:]):
        (-[WKView scrollViewDidEndZooming:withView:atScale:]):
        Scrolling is modified to take into account the view position and the obcured content.
        Instead of driving the scrolling position from the UIScrollView delegate callbacks,
        we use changes in unobscured rect to find changes in "content visible scroll position".

        WebPageProxy::didFinishScrolling() is removed. All the scrollOffset updates now go through
        the ScrollingCoordinator.

        (-[WKView _frameOrBoundsChanged]):
        (-[WKView _updateContentWindow]):
        (-[WKView _setObscuredInsets:]):
        * UIProcess/WebPageProxy.h:
        * UIProcess/ios/WebPageProxyIOS.mm:
        (WebKit::WebPageProxy::unobscuredContentRect):
        (WebKit::WebPageProxy::setUnobscuredContentRect):
        * WebProcess/WebPage/WebPage.messages.in:
        * WebProcess/WebPage/ios/WebPageIOS.mm:

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

        Fix a build warning by moving some WKWebView methods from the private category to WKWebView itself.

        Reviewed by Anders Carlsson.

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

2014-02-20  Enrica Casucci  <enrica@apple.com>

        ASSERT on touches callbacks after r164409 on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=129135

        Reviewed by Alexey Proskuryakov.

        The change used incorrecly true and false in TouchesCallbacks and
        ImageCallback. It also reintroduced isMainThread() which doesn't work
        for iOS.

        * UIProcess/GenericCallback.h:
        (WebKit::CallbackBase::generateCallbackID):
        (WebKit::ImageCallback::performCallbackWithReturnValue):
        (WebKit::ImageCallback::invalidate):
        * UIProcess/WebPageProxy.h:
        (WebKit::TouchesCallback::performCallbackWithReturnValue):
        (WebKit::TouchesCallback::invalidate):

2014-02-20  Anders Carlsson  <andersca@apple.com>

        We need something like WKPageUIClient in the Obj-C API
        https://bugs.webkit.org/show_bug.cgi?id=129123
        <rdar://problem/15338439>

        Reviewed by Sam Weinig.

        * UIProcess/API/APIUIClient.h:
        * UIProcess/API/Cocoa/WKUIDelegate.h: Added.
        * UIProcess/API/Cocoa/WKWebView.h:
        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView initWithFrame:configuration:]):
        (-[WKWebView UIDelegate]):
        (-[WKWebView setUIDelegate:]):
        * UIProcess/Cocoa/UIClient.h: Added.
        * UIProcess/Cocoa/UIClient.mm: Added.
        (WebKit::UIClient::UIClient):
        (WebKit::UIClient::~UIClient):
        (WebKit::UIClient::delegate):
        (WebKit::UIClient::setDelegate):
        (WebKit::UIClient::runJavaScriptAlert):
        (WebKit::UIClient::runJavaScriptConfirm):
        (WebKit::UIClient::runJavaScriptPrompt):
        * UIProcess/WebPageProxy.h:
        (WebKit::WebPageProxy::uiClient):
        * WebKit2.xcodeproj/project.pbxproj:

2014-02-20  Brady Eidson  <beidson@apple.com>

        Add very basic image control rendering
        https://bugs.webkit.org/show_bug.cgi?id=129080

        Reviewed by Tim Horton.

        * WebProcess/InjectedBundle/InjectedBundle.cpp:
        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Expose the 
          imageControlsEnabled setting to WKTR.

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

        Add magnification and swiping properties to WKWebView
        https://bugs.webkit.org/show_bug.cgi?id=129117

        Reviewed by Dan Bernstein.

        * UIProcess/API/Cocoa/WKViewPrivate.h:
        Move allowsBackForwardNavigationGestures out of a Mac-only block.

        * UIProcess/API/Cocoa/WKWebView.h:
        Add allowsBackForwardNavigationGestures to WKWebView for both platforms.
        Add magnification properties to WKWebView for Mac.

        * UIProcess/API/Cocoa/WKWebView.mm:
        (-[WKWebView contentView:didCommitLayerTree:WebKit::]):
        (-[WKWebView setAllowsBackForwardNavigationGestures:]):
        (-[WKWebView allowsBackForwardNavigationGestures]):
        (-[WKWebView setAllowsMagnification:]):
        (-[WKWebView allowsMagnification]):
        (-[WKWebView setMagnification:]):
        (-[WKWebView magnification]):
        (-[WKWebView setMagnification:centeredAtPoint:]):
        For iOS, copy implementations from WKViewIOS.
        For Mac, forward to the inner WKView.

        * UIProcess/API/ios/WKViewIOS.mm:
        (-[WKView setAllowsBackForwardNavigationGestures:]):
        Fix the logic to tear down the ViewGestureController.

        * UIProcess/API/mac/WKView.mm:
        (-[WKView setMagnification:centeredAtPoint:]):
        (-[WKView setMagnification:]):
        (-[WKView magnification]):
        Use CG types for API.

== Rolled over to ChangeLog-2014-02-20 ==
