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

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

        Reviewed begrudgingly by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::detachedFromParent3):
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):

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

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

        Reviewed by Anders Carlsson.

        Add a WebKit preference key, WebKitAudioPlaybackRequiresUserGesture, and a matching WebPreference
        property, and transfer those preferences to WebCore's settings when they change.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences audioPlaybackRequiresUserGesture]):
        (-[WebPreferences setAudioPlaybackRequiresUserGesture:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

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

        Reviewed by Tim Horton.

        * WebView/WebHTMLView.mm:
        (toAction):
        (toTag):
        Add conversion functions.

        (-[WebMenuTarget forwardContextMenuAction:]):
        Use toAction.

        (createMenuItem):
        Use toTag.

        (setMenuItemTarget): Deleted.
        (setMenuTargets): Deleted.
        (-[WebHTMLView menuForEvent:]):
        Don't call setMenuTargets, that's already done when we create the menu items.

        * WebView/WebUIDelegatePrivate.h:
        Add missing menu item tags. This does break ABI, but the menu item tags were already out of sync
        so it's very likely that nobody is relying on this.

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

        Fix build.

        * WebView/WebHTMLView.mm:
        (fixMenusReceivedFromOldClients):

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

        Remove a couple of unused menu item tag enums
        https://bugs.webkit.org/show_bug.cgi?id=151220

        Reviewed by Sam Weinig.

        Also, move the old internal tags away from the SPI header.

        * WebView/WebHTMLView.mm:
        (fixMenusReceivedFromOldClients):
        * WebView/WebUIDelegatePrivate.h:

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

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

        Reviewed by Joseph Pecoraro.

        * WebView/WebHTMLView.mm:
        (-[WebMenuTarget forwardContextMenuAction:]):

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

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

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuItemSelected): Deleted.

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

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

        Reviewed by Tim Horton.

        * WebView/WebHTMLView.mm:
        (createMenuItem):
        (customMenuFromDefaultItems):

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

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

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

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

        Get rid of -[WebMenuTarget validateMenuItem:]
        https://bugs.webkit.org/show_bug.cgi?id=151172

        Reviewed by Beth Dakin.

        We don't need the menu items to be validated since we handle enabling/disabling them ourselves (as well as setting their checked state).

        * WebView/WebHTMLView.mm:
        (-[WebMenuTarget validateMenuItem:]): Deleted.

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

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

        Reviewed by Chris Dumez.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidFailLoading):
        (WebFrameLoaderClient::dispatchDidDispatchOnloadEvents):
        (WebFrameLoaderClient::dispatchDidHandleOnloadEvents): Deleted.

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

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

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::shareMenuItem): Deleted.

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

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

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLView.mm:

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

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

        Reviewed by Tim Horton.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setMockMediaPlaybackTargetPickerEnabled): New.
        (WebChromeClient::setMockMediaPlaybackTargetPickerState): Ditto.

        * WebView/WebMediaPlaybackTargetPicker.h:
        * WebView/WebMediaPlaybackTargetPicker.mm:
        (WebMediaPlaybackTargetPicker::setMockMediaPlaybackTargetPickerEnabled): New.
        (WebMediaPlaybackTargetPicker::setMockMediaPlaybackTargetPickerState): Ditto.

        * WebView/WebView.mm:
        (-[WebView _setMockMediaPlaybackTargetPickerEnabled:]): New.
        (-[WebView _setMockMediaPlaybackTargetPickerName:state:]): Ditto.
        * WebView/WebViewInternal.h:

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

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

        Reviewed by Darin Adler.

        Since the -webkit-color-correction CSS property was removed in r188202, and ColorSpaceDeviceRGB
        and ColorSpaceSRGB are functionally equivalent, we can remove all the ColorSpace arguments passed
        to drawing functions, and remove RenderStyle::colorSpace(), which was hardcoded to return ColorSpaceSRGB.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        * WebInspector/WebNodeHighlightView.mm:
        (-[WebNodeHighlightView _layoutForNodeHighlight:parent:]):
        (-[WebNodeHighlightView _layoutForRectsHighlight:parent:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _bodyBackgroundColor]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView drawRect:]):
        * WebView/WebIndicateLayer.mm:

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

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

        Reviewed by Benjamin Poulain.

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

        * Configurations/FeatureDefines.xcconfig:

2015-11-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WK1] Null dereference loading Blink layout test editing/input/text-input-controller-no-editable-no-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=149484
        <rdar://problem/22811338>

        Reviewed by Darin Adler.

        firstRectForCharacterRange(): don't fall over in an editable-less frame.

        * WebView/WebFrame.mm:
        (-[WebFrame _convertToDOMRange:]):

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

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

        Reviewed by Dan Bernstein.

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

        * Configurations/Base.xcconfig:

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

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Used deviceClass() and Settings::defaultMinimumZoomFontSize() instead of WKGetDeviceClass() and WKGetMinimumZoomFontSize().
        * WebView/WebView.mm:
        (shouldAllowPictureInPictureMediaPlayback): Used dyld_get_program_sdk_version() instead of iosExecutableWasLinkedOnOrAfterVersion().
        (-[WebView _updateScreenScaleFromWindow]): Used screenScaleFactor() instead of WKGetScreenScaleFactor().

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Used deviceClass() and Settings::defaultMinimumZoomFontSize() instead of WKGetDeviceClass() and WKGetMinimumZoomFontSize().
        * WebView/WebView.mm:
        (shouldAllowPictureInPictureMediaPlayback): Used dyld_get_program_sdk_version() instead of iosExecutableWasLinkedOnOrAfterVersion().
        (-[WebView _updateScreenScaleFromWindow]): Used screenScaleFactor() instead of WKGetScreenScaleFactor().

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

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

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugger.mm:
        (toWebFrame):

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

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

        Reviewed by Geoffrey Garen.

        Added ENABLE_ES6_GENERATORS flag.

        * Configurations/FeatureDefines.xcconfig:

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

        Fixed the build.

        * Plugins/WebPluginController.mm:
        (WebKit_TSUpdateCheck_alertDidEnd_returnCode_contextInfo_):
        (WebKit_NSAlert_beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_):

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

        Remove a never used SPI delegate method
        https://bugs.webkit.org/show_bug.cgi?id=150680

        Reviewed by Beth Dakin.

        The webView:contextMenuItemSelected:forElement: method was added 9 years ago, seemingly for feature parity with the Windows port.
        The delegate method will never be called unless a menu item has the internal WebKit action/target pair, and a tag that 
        is set to >= ContextMenuItemBaseApplicationTag. Because of this, we can safely remove it.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:willPopupMenu:]):
        (-[WebDefaultUIDelegate webView:didDrawRect:]):
        (-[WebDefaultUIDelegate webView:didScrollDocumentInFrameView:]):
        (-[WebDefaultUIDelegate webView:contextMenuItemSelected:forElement:]): Deleted.
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuItemSelected): Deleted.
        * WebView/WebUIDelegatePrivate.h:

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

        WebKit, not WebCore, should do context menu conversion
        https://bugs.webkit.org/show_bug.cgi?id=150640

        Reviewed by Tim Horton.

        * WebView/WebHTMLView.mm:
        (createShareMenuItem):
        (createMenuItem):
        (createMenuItems):
        (customMenuFromDefaultItems):

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

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

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems): Deleted.

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

        Invoke the context menu delegate callback right before we return the menu
        https://bugs.webkit.org/show_bug.cgi?id=150521

        Reviewed by Tim Horton.

        Move the getCustomMenuFromDefaultItems to WebHTMLView wholesale. This will allow us to get rid of the ContextMenuClient function from WebCore.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        (isPreVersion3Client): Deleted.
        (isPreInspectElementTagClient): Deleted.
        (fixMenusToSendToOldClients): Deleted.
        (fixMenusReceivedFromOldClients): Deleted.
        * WebView/WebHTMLView.mm:
        (isPreVersion3Client):
        (isPreInspectElementTagClient):
        (fixMenusToSendToOldClients):
        (fixMenusReceivedFromOldClients):
        (customMenuFromDefaultItems):
        (-[WebHTMLView menuForEvent:]):

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

        More context menu simplification
        https://bugs.webkit.org/show_bug.cgi?id=150519

        Reviewed by Tim Horton.

        There's no need to convert the menu items back to ContextMenuItems just so we can check whether its
        represented object is the sharing service picker. Also, move the check to the second loop.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView menuForEvent:]):

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

        Simplify the WebKitLegacy menu conversion code
        https://bugs.webkit.org/show_bug.cgi?id=150509

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusToSendToOldClients):
        (fixMenusReceivedFromOldClients):
        (WebContextMenuClient::getCustomMenuFromDefaultItems):

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

        Don't override already existing represented objects on menu items
        https://bugs.webkit.org/show_bug.cgi?id=150508

        Reviewed by Tim Horton.

        This fixes a crash/exception when a client implements webView:contextMenuItemsForElement:defaultMenuItems: and
        the default menu has a share menu item.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):

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

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

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (shouldTryAppLink):
        Update the policy for following universal links to only take host into consideration.

2015-10-22  Gordon Sheridan  <gordon_sheridan@apple.com>

        Fix build for clang-700.0.59.5 by replacing deprecated calls to convert points between screen and window coordinates for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=150379

        Reviewed by Andy Estes.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView characterIndexForPoint:]):
        Convert point to rect, and replace call to deprecated convertScreenToBase: with convertRectFromScreen:.

        (-[WebHTMLView firstRectForCharacterRange:]):
        Replace call to deprecated convertBaseToScreen: with convertRectToScreen:.

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

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

        Reviewed by Tim Horton.

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

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

        NetworkProcess: DNS prefetch happens in the Web Process
        https://bugs.webkit.org/show_bug.cgi?id=147824

        Reviewed by Chris Dumez.

        Implement FrameLoaderClient::prefetchDNS().

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

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

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

        Broke iOS 9 build (Requested by ap on #webkit).

        Reverted changeset:

        "Fix build for clang-700.0.59.5 by replacing deprecated calls
        to convertScreenToBase: with convertRectFromScreen:."
        https://bugs.webkit.org/show_bug.cgi?id=150379
        http://trac.webkit.org/changeset/191370

2015-10-20  Gordon Sheridan  <gordon_sheridan@apple.com>

        Fix build for clang-700.0.59.5 by replacing deprecated calls to convertScreenToBase: with convertRectFromScreen:.
        https://bugs.webkit.org/show_bug.cgi?id=150379

        Reviewed by Simon Fraser.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView characterIndexForPoint:]):
        Convert point to rect, and call convertRectFromScreen:.

        (-[WebHTMLView firstRectForCharacterRange:]):
        Replace convertBaseToScreen: with convertRectToScreen:.

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

        Try to fix the build by disabling MAC_GESTURE_EVENTS on 10.9 and 10.10

        * Configurations/FeatureDefines.xcconfig:

2015-10-20  Yoav Weiss  <yoav@yoav.ws>

        Rename the PICTURE_SIZES flag to CURRENTSRC
        https://bugs.webkit.org/show_bug.cgi?id=150275

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

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

        Try to fix the iOS build

        * Configurations/FeatureDefines.xcconfig:

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

        Add magnify and rotate gesture event support for Mac
        https://bugs.webkit.org/show_bug.cgi?id=150179
        <rdar://problem/8036240>

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        New feature flag.

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

        Build fix after r191260

        Unreviewed.

        * WebView/WebView.mm:
        (+[WebView initialize]):

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

        Stop honoring the user default "WebKitKerningAndLigaturesEnabledByDefault"
        https://bugs.webkit.org/show_bug.cgi?id=150287

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (+[WebView initialize]): Deleted.

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

        Unreviewed, rolling out r191250 and r191253.
        https://bugs.webkit.org/show_bug.cgi?id=150296

        Broke all the tests on Windows (Requested by ap on #webkit).

        Reverted changesets:

        "Stop honoring the user default
        "WebKitKerningAndLigaturesEnabledByDefault""
        https://bugs.webkit.org/show_bug.cgi?id=150287
        http://trac.webkit.org/changeset/191250

        "Build fix after r191250"
        http://trac.webkit.org/changeset/191253

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

        Build fix after r191250

        Unreviewed.

        * WebView/WebView.mm:
        (+[WebView initialize]):

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

        Stop honoring the user default "WebKitKerningAndLigaturesEnabledByDefault"
        https://bugs.webkit.org/show_bug.cgi?id=150287

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (+[WebView initialize]): Deleted.

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

        WebEditingDelegate should be a formal protocol
        https://bugs.webkit.org/show_bug.cgi?id=150254
        <rdar://problem/23149847>

        Reviewed by Dan Bernstein.

        * WebView/WebEditingDelegate.h:
        Move all the delegate methods inside the protocol declaration. Also make the header self-contained.

        * WebView/WebView.h:
        Change the type of the editing delegate and make it assign.

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

        Migrate to CGContextSetBaseCTM() and CGContextResetClip() from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=150155

        Reviewed by Tim Horton.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebView/WebView.mm:
        (-[WebView _setBaseCTM:forContext:]):

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

        [Cocoa] Stop using WKSetNSURLConnectionDefersCallbacks
        https://bugs.webkit.org/show_bug.cgi?id=150189

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Removed initialization.

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

        Augment <input type=search>’s recent search history with the time each entry was added,
        in order to allow time-based clearing of search history.
        https://bugs.webkit.org/show_bug.cgi?id=148388.

        Reviewed by Darin Adler.

        Replace Vector<String> with Vector<RecentSearch>, where RecentSearch is a struct
        that consists search string and time, for recent searches in order to store additional time information.

        All these new RecentSearches are stored in a plist in which the structure looks like:
        Root {
            "items": {
                autosave name: {
                    "searches": [
                        { "searchString": searchString, "date": date },
                        ...
                    ]
                }
            }
        }

        * WebCoreSupport/SearchPopupMenuMac.h:
        * WebCoreSupport/SearchPopupMenuMac.mm:
        (SearchPopupMenuMac::saveRecentSearches): Call saveRecentSearches in WebCore::SearchPopupMenuCocoa.
        (SearchPopupMenuMac::loadRecentSearches): Call loadRecentSearches in WebCore::SearchPopupMenuCocoa.
        (autosaveKey): Deleted.

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

        Split TypesettingFeatures into kerning and ligatures bools
        https://bugs.webkit.org/show_bug.cgi?id=150074

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (+[WebView initialize]):

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

        Avoid useless copies in range-loops that are using 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=150091

        Reviewed by Sam Weinig.

        Avoid useless copies in range-loops that are using 'auto'. Also use
        'auto*' instead of 'auto' when range values are pointers for clarity.

        * WebView/WebFrame.mm:
        (-[WebFrame getDictationResultRanges:andMetadatas:]):

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

        Don't allow plug-ins to override image types for <embed> elements
        https://bugs.webkit.org/show_bug.cgi?id=149979

        Reviewed by Tim Horton.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::objectContentType):

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

        [iOS] Remove unnecessary iOS version checks
        https://bugs.webkit.org/show_bug.cgi?id=150002

        Reviewed by Alexey Proskuryakov.

        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (-[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (+[WebPluginController addPlugInView:]):
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]): Deleted.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (pluginView):
        * WebView/WebPreferences.mm:
        (-[WebPreferences isDNSPrefetchingEnabled]):
        (-[WebPreferences setWebInspectorServerEnabled:]): Deleted.
        (-[WebPreferences _setAllowCompositingLayerVisualDegradation:]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (shouldAllowPictureInPictureMediaPlayback):

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

        [iOS] Remove project support for iOS 8
        https://bugs.webkit.org/show_bug.cgi?id=149993

        Reviewed by Alexey Proskuryakov.

        * Configurations/WebKitLegacy.xcconfig:

2015-10-06  Daniel Bates  <dbates@webkit.org>

        Enable XSLT when building WebKit for iOS using the public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=149827

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

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

        Report error when main resource is blocked by content blocker
        https://bugs.webkit.org/show_bug.cgi?id=149719
        rdar://problem/21970595

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::blockedError):
        (WebFrameLoaderClient::blockedByContentBlockerError):
        (WebFrameLoaderClient::cannotShowURLError):
        Add blockedByContentBlockerError so WebFrameLoaderClient is not an abstract class,
        but it should be unused because content blockers are not enabled on WK1.

2015-10-05  Daniel Bates  <dabates@apple.com>

        DumpRenderTree built with public iOS SDK crashes under -[WebPreferences(WebPrivate) _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]
        https://bugs.webkit.org/show_bug.cgi?id=149766

        Reviewed by Alexey Proskuryakov.

        Assert that we have a non-null pointer to a cookie storage.

        * WebView/WebPreferences.mm:
        (+[WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]):

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

        Remove unused HistoryItem::targetItem()
        <https://webkit.org/b/149803>

        Reviewed by Anders Carlsson.

        Remove the only (unused) client of HistoryItem::targetItem().

        * History/WebHistoryItem.mm:
        * History/WebHistoryItemPrivate.h:

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

        Remove unused HistoryItem::parent
        <https://webkit.org/b/149803>

        Reviewed by Anders Carlsson.

        Remove the only (unused) client of HistoryItem's with-parent constructor.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initWithURL:target:parent:title:]): Deleted.
        * History/WebHistoryItemInternal.h:

2015-09-30  Timothy Horton  <timothy_horton@apple.com>

        Compute document marker rects at use time instead of paint time
        https://bugs.webkit.org/show_bug.cgi?id=149643

        Reviewed by Darin Adler.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView rectsForTextMatches]):

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

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        Pass a the frame as a reference instead of using pointers.

        * Misc/WebCoreStatistics.mm:
        (-[WebFrame numberOfPagesWithPageWidth:pageHeight:]):
        (-[WebFrame printToCGContext:pageWidth:pageHeight:]):

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

        Clean up user media request internal API
        https://bugs.webkit.org/show_bug.cgi?id=149527

        Reviewed by Tim Horton.

        * WebCoreSupport/WebUserMediaClient.mm:
        (WebUserMediaClient::cancelRequest): Put UserMediaRequestsMap in a local instead or calling
          userMediaRequestsMap() three times.
        (-[WebUserMediaPolicyListener allow]): Get rid of unneeded local variables.
        (-[WebUserMediaPolicyListener allowDeviceWithVideoUID]): Deleted, unused.

2015-09-22  Andy Estes  <aestes@apple.com>

        Disable QuickLook on tvOS
        https://bugs.webkit.org/show_bug.cgi?id=149492
        <rdar://problem/22741586>

        Reviewed by Dan Bernstein.

        We can't use USE(QUICK_LOOK) in a Private header, and postprocess-headers.sh doesn't know how to strip things
        that aren't feature flags. So, if QuickLook is disabled, we'll just always define WebQuickLookFileNameKey and
        WebQuickLookUTIKey, and we'll also define -quickLookContentForURL: but have it return nil.

        * WebView/WebView.mm:
        (-[WebView quickLookContentForURL:]):

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

        Make it more obvious when using an unaccelerated image buffer, and fix a few callers who do
        https://bugs.webkit.org/show_bug.cgi?id=149428

        Reviewed by Simon Fraser and Darin Adler.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::imageForCurrentSharingServicePickerItem):

2015-09-21  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r182648): UIWebView does not set location.hash synchronously
        https://bugs.webkit.org/show_bug.cgi?id=149415
        <rdar://problem/22169467>

        Reviewed by Darin Adler.

        The problem was that the delegate in UI thread became asynchronous due to calling
        into LaunchServices.

        * WebCoreSupport/WebFrameLoaderClient.mm: (shouldTryAppLink): Don't attempt app
        links for same domain navigations. This check is part of substantially more complicated
        logic in WebKit2 that I don't understand, but that should be enough to demonstrate
        that this fix is an improvement at least.

2015-09-20  Youenn Fablet  <youenn.fablet@crf.canon.fr>

        Remove XHR_TIMEOUT compilation guard
        https://bugs.webkit.org/show_bug.cgi?id=149260

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2015-09-18  Commit Queue  <commit-queue@webkit.org>

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

        Broke run-webkit-tests --pixel (Requested by ap on #webkit).

        Reverted changeset:

        "printing does not use minimum page zoom factor"
        https://bugs.webkit.org/show_bug.cgi?id=108507
        http://trac.webkit.org/changeset/189908

2015-09-17  Brian Burg  <bburg@apple.com>

        ASSERT(!m_frontendRouter->hasLocalFrontend()) when running Web Inspector tests
        https://bugs.webkit.org/show_bug.cgi?id=149006

        Reviewed by Joseph Pecoraro.

        WK1 WebInspectorClient was connecting to the wrong controllers. Fix this, and
        remove extra code paths for closing the frontend.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView]):

            Disconnect the FrontendClient from the frontend page's inspector controller.
            Do this teardown before releasing the frontend, otherwise we can't use it.

        (WebInspectorClient::inspectedPageDestroyed): Deleted.
        (WebInspectorClient::closeLocalFrontend): Deleted.
        (WebInspectorFrontendClient::disconnectFromBackend): Deleted.
        * WebInspector/WebInspector.mm:
        (-[WebInspector inspectedWebViewClosed]):

            Make sure to close ourself if the inspected page closes.

        (-[WebInspector close:]):

            Go through the frontend instead of InspectorController.

        * WebInspector/WebInspectorFrontend.h:
        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend close]):

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

        printing does not use minimum page zoom factor
        https://bugs.webkit.org/show_bug.cgi?id=108507

        Reviewed by Darin Adler.

        Pass a the frame as a reference instead of using pointers.

        * Misc/WebCoreStatistics.mm:
        (-[WebFrame numberOfPagesWithPageWidth:pageHeight:]):
        (-[WebFrame printToCGContext:pageWidth:pageHeight:]):

2015-09-16  Brady Eidson  <beidson@apple.com>

        Have window.indexedDB.deleteDatabase return an IDBOpenDBRequest.
        https://bugs.webkit.org/show_bug.cgi?id=149229

        Reviewed by Alex Christensen.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Enable IDB in WK1.

2015-09-15  Ryosuke Niwa  <rniwa@webkit.org>

        Add ShadowRoot interface and Element.prototype.attachShadow
        https://bugs.webkit.org/show_bug.cgi?id=149187

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-09-14  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Chris Dumez.

        * WebView/WebPDFDocumentExtras.mm:
        (appendValuesInPDFNameSubtreeToVector):
        * WebView/WebPDFView.mm:
        Removed cmake include quirks that are not needed when we include things correctly from Quartz.framework/Frameworks.

2015-09-12  Brian Burg  <bburg@apple.com>

        Web Inspector: disambiguate inspected/frontend controllers and pages in backend code
        https://bugs.webkit.org/show_bug.cgi?id=149071

        Reviewed by Joseph Pecoraro.

        Be consistent about prefixing pages, inspector controllers, and window controllers
        with either "frontend" or "inspected", as appropriate. This change makes obvious some bugs
        in the frontend connection code, which are tracked by https://webkit.org/b/149006.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient): Renamed.
        (WebInspectorClient::inspectedPageDestroyed): Renamed.
        (WebInspectorClient::openLocalFrontend): Renamed.
        (WebInspectorClient::closeLocalFrontend): Renamed.
        (WebInspectorClient::didSetSearchingForNode):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        (WebInspectorFrontendClient::attachAvailabilityChanged):
        (WebInspectorFrontendClient::canAttach):
        (WebInspectorFrontendClient::frontendLoaded):
        (WebInspectorFrontendClient::startWindowDrag):
        (WebInspectorFrontendClient::bringToFront):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::detachWindow):
        (WebInspectorFrontendClient::setAttachedWindowHeight):
        (WebInspectorFrontendClient::setToolbarHeight):
        (WebInspectorFrontendClient::updateWindowTitle):
        (WebInspectorFrontendClient::save):
        (WebInspectorFrontendClient::append):
        (-[WebInspectorWindowController init]):
        (-[WebInspectorWindowController initWithInspectedWebView:isUnderTest:]):
        (-[WebInspectorWindowController dealloc]):
        (-[WebInspectorWindowController frontendWebView]):
        (-[WebInspectorWindowController close]):
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController setAttachedWindowHeight:]):
        (-[WebInspectorWindowController destroyInspectorView]):
        (-[WebInspectorWindowController webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        (WebInspectorClient::inspectorDestroyed): Deleted.
        (WebInspectorClient::openInspectorFrontend): Deleted.
        (WebInspectorClient::closeInspectorFrontend): Deleted.
        (-[WebInspectorWindowController webView]): Deleted.
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector initWithInspectedWebView:]): Renamed.
        (-[WebInspector inspectedWebViewClosed]): Renamed.
        (-[WebInspector showWindow]):
        (-[WebInspector close:]):
        (-[WebInspector evaluateInFrontend:script:]):
        (-[WebInspector releaseFrontend]):
        (-[WebInspector initWithWebView:]): Deleted.
        (-[WebInspector webViewClosed]): Deleted.
        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView inspector]):

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

        Node.appendChild(null) / replaceChild(null, null) / removeChild(null) / insertBefore(null, ref) should throw a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=148971
        <rdar://problem/22560883>
        <rdar://problem/22559225>

        Reviewed by Ryosuke Niwa.

        ContainerNode::appendChild() now takes a Ref<Node>&& parameter so we
        need to update the call site.

        * WebView/WebFrame.mm:
        (-[WebFrame _documentFragmentWithNodesAsParagraphs:]):

2015-09-07  Andy Estes  <aestes@apple.com>

        [Mac] DebugRelease builds should link against libWebKitSystemInterfaceElCapitan.a on 10.11
        https://bugs.webkit.org/show_bug.cgi?id=148946
        <rdar://problem/22603981>

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: agents should send messages through FrontendRouter instead of FrontendChannel
        https://bugs.webkit.org/show_bug.cgi?id=148492

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.h: Clean up the forward declarations, don't use InspectorForwarding.h.
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):

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

        Remove unnecessary compiler guards from mm files
        https://bugs.webkit.org/show_bug.cgi?id=148797

        Reviewed by Dan Bernstein.

        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebNetscapePluginPackage.mm:

2015-09-04  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        Remove the notifyInspectorController flag from closeWindow. Since InspectorClients
        must now manually disconnect their FrontendChannel(s), we should always
        perform the teardown that was guarded by this flag.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::bringFrontendToFront): Add a missing assertion.
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView]): Always clear the frontend client.
        (-[WebInspectorWindowController destroyInspectorView:]): Renamed to above.

2015-09-03  Commit Queue  <commit-queue@webkit.org>

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

        Caused tons of crashes (Requested by cdumez on #webkit).

        Reverted changeset:

        "Web Inspector: InspectorController should support multiple
        frontend channels"
        https://bugs.webkit.org/show_bug.cgi?id=148538
        http://trac.webkit.org/changeset/189338

2015-09-03  Brian Burg  <bburg@apple.com>

        Web Inspector: InspectorController should support multiple frontend channels
        https://bugs.webkit.org/show_bug.cgi?id=148538

        Reviewed by Joseph Pecoraro.

        Remove the notifyInspectorController flag from closeWindow. Since InspectorClients
        must now manually disconnect their FrontendChannel(s), we should always
        perform the teardown that was guarded by this flag.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::bringFrontendToFront): Add a missing assertion.
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView]): Always clear the frontend client.
        (-[WebInspectorWindowController destroyInspectorView:]): Renamed to above.

2015-08-26  Andy Estes  <aestes@apple.com>

        [Content Filtering] Determine navigation and content policy before continuing to filter a load
        https://bugs.webkit.org/show_bug.cgi?id=148506

        Reviewed by Brady Eidson.

        Deleted parts of r188486 and r188851.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):

2015-08-31  Chris Dumez  <cdumez@apple.com>

        Range.detach() / NodeIterator.detach() should be no-ops as per the latest DOM specification
        https://bugs.webkit.org/show_bug.cgi?id=148454

        Reviewed by Ryosuke Niwa.

        Update Range API call sites to reflect changes.

        * WebView/WebImmediateActionController.mm:
        (dictionaryPopupInfoForRange):

2015-08-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Migrate GraphicsContexts from pointers to references
        https://bugs.webkit.org/show_bug.cgi?id=148561

        Reviewed by Tim Horton.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::imageForCurrentSharingServicePickerItem):
        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]):

2015-08-28  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Restructure WebMediaSessionManager for testing
        https://bugs.webkit.org/show_bug.cgi?id=148593

        Reviewed by Jer Noble.

        * WebView/WebMediaPlaybackTargetPicker.mm:
        (WebMediaPlaybackTargetPicker::addPlaybackTargetPickerClient): Call WebMediaSessionManager::singleton,
          not WebMediaSessionManagerMac::singleton.
        (WebMediaPlaybackTargetPicker::removePlaybackTargetPickerClient): Ditto.
        (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): Ditto.
        (WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange): Ditto.
        (WebMediaPlaybackTargetPicker::setPlaybackTarget): Ditto.
        (WebMediaPlaybackTargetPicker::invalidate): Ditto.

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Add WebKit/WebKit2 settings to control automatic data loading
        https://bugs.webkit.org/show_bug.cgi?id=148579

        Reviewed by Anders Carlsson.

        Add a WebPreference to allow clients to control whether media is allowed to load automatically.
        Remove the (now unnecessary) WebFrame property to do the same.

        * WebView/WebFrame.mm:
        (-[WebFrame mediaDataLoadsAutomatically]): Deleted.
        (-[WebFrame setMediaDataLoadsAutomatically:]): Deleted.
        * WebView/WebFramePrivate.h:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences mediaDataLoadsAutomatically]):
        (-[WebPreferences setMediaDataLoadsAutomatically:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-08-28  Beth Dakin  <bdakin@apple.com>

        Crash in WK1 when clicking on a PDF inside an iframe
        https://bugs.webkit.org/show_bug.cgi?id=148585
        -and corresponding-
        rdar://problem/22165194

        Reviewed by Tim Horton.

        Only handle WebHTMLViews.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):

2015-08-28  Jer Noble  <jer.noble@apple.com>

        [iOS] Make the AllowsInlineMediaPlayback preference work in WebKit / WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=147512

        Reviewed by Anders Carlsson.

        Add a new preference, inlineMediaPlaybackRequiresPlaysInlineAttribute, which defaults to
        NO on iPad and YES on iPhone and iPod.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Default the value of WebKitAllowsInlineMediaPlaybackPreferenceKey to
        YES on iPad and NO on iPhone and iPod.
        (-[WebPreferences inlineMediaPlaybackRequiresPlaysInlineAttribute]):
        (-[WebPreferences setInlineMediaPlaybackRequiresPlaysInlineAttribute:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-08-28  Timothy Horton  <timothy_horton@apple.com>

        [Mac] Right-clicking on GIFs spins the UI process for a while
        https://bugs.webkit.org/show_bug.cgi?id=148566
        <rdar://problem/22460854>

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::shareMenuItem):
        Make an NSImage directly from the hit image if possible.

2015-08-27  Timothy Horton  <timothy_horton@apple.com>

        Factor out Lookup invocation
        https://bugs.webkit.org/show_bug.cgi?id=148509

        Reviewed by Anders Carlsson.

        * WebView/DictionaryPopupInfo.h: Removed.
        Move to WebCore.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        DictionaryPopupInfo keeps a TextIndicatorData, not a TextIndicator.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _animationControllerForDataDetectedLink]):
        (dictionaryPopupInfoForRange):
        (-[WebImmediateActionController _animationControllerForText]):
        * WebView/WebView.mm:
        (-[WebView _prepareForDictionaryLookup]):
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        (-[WebView _setTextIndicator:withLifetime:]):
        (-[WebView _showDictionaryLookupPopup:]):
        * WebView/WebViewInternal.h:
        Move a bunch of code to WebCore.
        Factor some that has to stay out into _prepareForDictionaryLookup.

2015-08-27  Brian Burg  <bburg@apple.com>

        Web Inspector: FrontendChannel should know its own connection type
        https://bugs.webkit.org/show_bug.cgi?id=148482

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.h: add connectionType().

2015-08-26  Beth Dakin  <bdakin@apple.com>

        REGRESSION: Safari navigates after a cancelled force click
        https://bugs.webkit.org/show_bug.cgi?id=148491
        -and corresponding-
        rdar://problem/22394323

        Reviewed by Tim Horton.

        Use the current stage to determine which type of cancel this is.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):

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

        Layout Test platform/mac/fast/events/content-inset-hit-testing-in-frame.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=148409

        Reviewed by Beth Dakin.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setContentInsets:]):
        Explicitly force our NSScrollView to lay out after updating
        content insets. We depend on this happening synchronously (specifically,
        we need our frame/bounds change callbacks to fire), because the layout
        which will happen subsequently needs up-to-date information in order to
        correctly a) enable scrollbars and then b) update the scroll position.

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

        [Content Filtering] REGRESSION (r182356): Provisional URL is incorrect in didReceiveServerRedirectForProvisionalLoadForFrame when Content Filtering is enabled
        https://bugs.webkit.org/show_bug.cgi?id=147872
        rdar://problem/22044000

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad): Set provisionalURL using the URL argument.

2015-08-23  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, rolling back in r188803.

        "Debugger's VM should never be null"
        https://bugs.webkit.org/show_bug.cgi?id=148341
        http://trac.webkit.org/changeset/188803

        * WebView/WebScriptDebugger.mm:
        (toWebFrame):
        (WebScriptDebugger::WebScriptDebugger):

2015-08-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r188792 and r188803.
        https://bugs.webkit.org/show_bug.cgi?id=148347

        broke lots of tests, ggaren is going to investigate and reland
        (Requested by thorton on #webkit).

        Reverted changesets:

        "Unify code paths for manually deleting all code"
        https://bugs.webkit.org/show_bug.cgi?id=148280
        http://trac.webkit.org/changeset/188792

        "Debugger's VM should never be null"
        https://bugs.webkit.org/show_bug.cgi?id=148341
        http://trac.webkit.org/changeset/188803

2015-08-21  Chris Dumez  <cdumez@apple.com>

        document.getElementsByTagName should return an HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=110611

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _documentFragmentWithMarkupString:baseURLString:]):
        Use .ptr() as createFragmentFromMarkup() now returns a
        Ref<> instead of a RefPtr<>.

2015-08-21  Anders Carlsson  <andersca@apple.com>

        Get rid of uses of the old callOnMainThread function that takes a function ptr + context
        https://bugs.webkit.org/show_bug.cgi?id=148324

        Reviewed by Tim Horton.

        * Storage/WebDatabaseManagerClient.mm:
        (DidModifyOriginData::dispatchToMainThread):
        (DidModifyOriginData::dispatchDidModifyOriginOnMainThread): Deleted.
        * Storage/WebStorageTrackerClient.h:
        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::dispatchDidModifyOrigin):
        (WebStorageTrackerClient::dispatchDidModifyOriginOnMainThread): Deleted.

2015-08-19  Eric Carlson  <eric.carlson@apple.com>

        Remove ENABLE_WEBVTT_REGIONS
        https://bugs.webkit.org/show_bug.cgi?id=148184

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_WEBVTT_REGIONS.

2015-08-17  Filip Pizlo  <fpizlo@apple.com>

        Replace all remaining uses of WTF::Mutex with WTF::Lock
        https://bugs.webkit.org/show_bug.cgi?id=148089

        Reviewed by Geoffrey Garen.

        * Storage/WebDatabaseManager.mm:
        (transactionBackgroundTaskIdentifierLock):
        (+[WebDatabaseManager startBackgroundTask]):
        (+[WebDatabaseManager endBackgroundTask]):
        * WebView/WebView.mm:
        (-[WebView _synchronizeCustomFixedPositionLayoutRect]):
        (-[WebView _setCustomFixedPositionLayoutRectInWebThread:synchronize:]):
        (-[WebView _setCustomFixedPositionLayoutRect:]):
        (-[WebView _fetchCustomFixedPositionLayoutRect:]):
        * WebView/WebViewData.h:

2015-08-17  Jeff Miller  <jeffm@apple.com>

        Add a method to WebInspector to indicate whether the inspector is open
        https://bugs.webkit.org/show_bug.cgi?id=148087

        Reviewed by Joseph Pecoraro.

        * WebInspector/WebInspector.h:
        Added open property.

        * WebInspector/WebInspector.mm:
        (-[WebInspector isOpen]):
        Added, returns YES if we have a frontend.

2015-08-13  Andy Estes  <aestes@apple.com>

        [Cocoa] Downloads do not start if policy decision is made asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=147985

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload): Started a new download if the main resource loader is not calling didReceiveResponse.

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

        Performing a Lookup on wrapped text puts the popover arrow in the wrong place (off to the right)
        https://bugs.webkit.org/show_bug.cgi?id=148012
        <rdar://problem/19238094>

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        (-[WebView _showDictionaryLookupPopup:]):
        Adopt the new SPI, handing it the first text rect, instead of having it
        guess where to put the popover.
        Also, null-check the TextIndicator.

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

        Refactor and improve TextIndicator to prepare for tests
        https://bugs.webkit.org/show_bug.cgi?id=147622

        Reviewed by Simon Fraser.

        * WebView/WebFrame.mm:
        (-[WebFrame _rectsForRange:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView quickLookWithEvent:]):
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController webView:didHandleScrollWheel:]):
        (-[WebImmediateActionController _cancelImmediateAction]):
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WebImmediateActionController _defaultAnimationController]):
        (-[WebImmediateActionController menuItemDidClose:]):
        (-[WebImmediateActionController _animationControllerForDataDetectedText]):
        (-[WebImmediateActionController _animationControllerForDataDetectedLink]):
        (dictionaryPopupInfoForRange):
        * WebView/WebView.mm:
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        (-[WebView _setTextIndicator:]):
        (-[WebView _setTextIndicator:withLifetime:]):
        (-[WebView _clearTextIndicatorWithAnimation:]):
        (-[WebView _showDictionaryLookupPopup:]):
        (-[WebView _dictionaryLookupPopoverWillClose:]):
        * WebView/WebViewInternal.h:
        Adopt TextIndicatorOptions.
        Adjust to Range method renames.

2015-08-13  Geoffrey Garen  <ggaren@apple.com>

        Standardize on the phrase "delete code"
        https://bugs.webkit.org/show_bug.cgi?id=147984

        Reviewed by Mark Lam.

        * WebView/WebView.mm:
        (+[WebView discardAllCompiledCode]):
        (+[WebView isCharacterSmartReplaceExempt:isPreviousCharacter:]):

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

        Use WTF::Optional in WindowFeatures
        https://bugs.webkit.org/show_bug.cgi?id=147956

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):

2015-08-13  Matthew Daiter  <mdaiter@apple.com>

        Linking device query ability from WebKit2 to clients
        https://bugs.webkit.org/show_bug.cgi?id=147263
        <rdar://problem/21983345>

        Reviewed by Jer Noble.

        * WebCoreSupport/WebUserMediaClient.mm:
        (-[WebUserMediaPolicyListener allow]):
        (-[WebUserMediaPolicyListener allowDeviceWithVideoUID:andAudioUID:]):


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

        Align WebKit1's PageCache size with WebKit2's
        https://bugs.webkit.org/show_bug.cgi?id=147831

        Reviewed by Sam Weinig.

        Align WebKit1's PageCache size with WebKit2's for consistency. Also, we
        have data showing that keeping more than 3 pages in the PageCache is
        not really useful.

        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

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

        Crashes when calling swizzled setNeedsDisplayInRect: on heartbeat thread
        https://bugs.webkit.org/show_bug.cgi?id=147746
        rdar://problem/18698271

        Reviewed by Dan Bernstein.

        Back off if someone is calling our swizzled setNeedsDisplayInRect on a non-main thread.

        * WebView/WebHTMLView.mm:
        (setNeedsDisplayInRect):

2015-08-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out http://trac.webkit.org/changeset/187972.

        * Storage/WebDatabaseManager.mm:
        (transactionBackgroundTaskIdentifierLock):
        (+[WebDatabaseManager startBackgroundTask]):
        (+[WebDatabaseManager endBackgroundTask]):
        * WebView/WebView.mm:
        (-[WebView _synchronizeCustomFixedPositionLayoutRect]):
        (-[WebView _setCustomFixedPositionLayoutRectInWebThread:synchronize:]):
        (-[WebView _setCustomFixedPositionLayoutRect:]):
        (-[WebView _fetchCustomFixedPositionLayoutRect:]):
        * WebView/WebViewData.h:

2015-08-04  Filip Pizlo  <fpizlo@apple.com>

        Rename Mutex to DeprecatedMutex
        https://bugs.webkit.org/show_bug.cgi?id=147675

        Reviewed by Geoffrey Garen.

        * Storage/WebDatabaseManager.mm:
        (transactionBackgroundTaskIdentifierLock):
        (+[WebDatabaseManager startBackgroundTask]):
        (+[WebDatabaseManager endBackgroundTask]):
        * WebView/WebView.mm:
        (-[WebView _synchronizeCustomFixedPositionLayoutRect]):
        (-[WebView _setCustomFixedPositionLayoutRectInWebThread:synchronize:]):
        (-[WebView _setCustomFixedPositionLayoutRect:]):
        (-[WebView _fetchCustomFixedPositionLayoutRect:]):
        * WebView/WebViewData.h:

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

        Remove database thread pause code
        https://bugs.webkit.org/show_bug.cgi?id=147669

        Reviewed by Daniel Bates.

        * Storage/WebDatabaseManager.mm:
        (WebKitSetWebDatabasePaused): Deleted.
        * Storage/WebDatabaseManagerInternal.h:

2015-08-04  Simon Fraser  <simon.fraser@apple.com>

        Fix the build.

        * Plugins/WebNetscapePluginStream.h:

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

        Get rid of ReasonForCallingAllowPlugins since it's not used anywhere
        https://bugs.webkit.org/show_bug.cgi?id=147648

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):
        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):

2015-08-04  Alexey Proskuryakov  <ap@apple.com>

        Implement NPAPI redirect handling
        https://bugs.webkit.org/show_bug.cgi?id=138675
        rdar://problem/15779101

        Patch by Jeffrey Pfau, updated and tweaked by me.

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/HostedNetscapePluginStream.h:
        (WebKit::HostedNetscapePluginStream::streamID):
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::didFinishLoading):
        (WebKit::HostedNetscapePluginStream::willSendRequest):
        (WebKit::HostedNetscapePluginStream::didReceiveResponse):
        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::stop):
        (WebNetscapePluginStream::willSendRequest):
        (WebNetscapePluginStream::didReceiveResponse):

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Unreviewed post-review feedback on r187797

        The correct terminology is "registered" instead of "activated."

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]):

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up casts between NSFont*s and CTFontRefs
        https://bugs.webkit.org/show_bug.cgi?id=147618

        Reviewed by Mitz Pettel

        For toll free bridged types, it makes more sense to do a C-style cast, than jump
        through hoops for older compilers.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]):

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the Yosemite build after r187797

        Unreviewed.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]):

2015-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r184899): Crash when focusing an input element styled with a web font
        https://bugs.webkit.org/show_bug.cgi?id=147616
        <rdar://problem/21838271>

        Reviewed by Dean Jackson.

        NSFontManager can't handle web fonts. We used to pass null to NSFontManager in this case,
        but r184899 changed that.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]):

2015-07-31  Chris Dumez  <cdumez@apple.com>

        Drop dummy Timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=147516

        Reviewed by Alexey Proskuryakov.

        Drop dummy Timer callbacks in the code base. A lot of Timer callbacks
        do nothing else beside calling a particular method. In such case, we
        can use the called method as Timer callback instead.

        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (WebNetscapePluginStream::deliverDataTimerFired): Deleted.

2015-07-31  Brady Eidson  <beidson@apple.com>

        REGRESSION (r174791): Returning a zombie NSImage from sharingService:transitionImageForShareItem:contentRect:
        <rdar://problem/22060183> and https://bugs.webkit.org/show_bug.cgi?id=147497

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::imageForCurrentSharingServicePickerItem): Don't return what is basically a temporary NSImage.
          Instead do a [[retain] autorelease] on it while still valid.

2015-07-29  Dean Jackson  <dino@apple.com>

        Don't use (Details) when exposing SPI
        https://bugs.webkit.org/show_bug.cgi?id=147426
        <rdar://problem/22062407>

        Reviewed by Dan Bernstein.

        If we are declaring the interface without any implementation,
        we should use class extensions.

        * WebView/WebFrameView.mm:
        * WebView/WebPDFView.mm:

2015-07-29  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement basic types for ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=146926

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Enabled INTL.

2015-07-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Add ENABLE_ES6_MODULES compile time flag with the default value "false"
        https://bugs.webkit.org/show_bug.cgi?id=147350

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2015-07-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove runtime flags for symbols
        https://bugs.webkit.org/show_bug.cgi?id=147246

        Reviewed by Alex Christensen.

        * WebView/WebPreferencesPrivate.h:

2015-07-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        Object.getOwnPropertySymbols on large list takes very long
        https://bugs.webkit.org/show_bug.cgi?id=146137

        Reviewed by Mark Lam.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):

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

        Remove compile and runtime flags for promises.
        https://bugs.webkit.org/show_bug.cgi?id=147244

        Reviewed by Yusuke Suzuki.

        * Configurations/FeatureDefines.xcconfig:
        * WebView/WebPreferencesPrivate.h:

2015-07-22  Sukolsak Sakshuwong  <sukolsak@gmail.com>

        Add ENABLE_WEBASSEMBLY feature flag for WebAssembly
        https://bugs.webkit.org/show_bug.cgi?id=147212

        Reviewed by Filip Pizlo.

        * Configurations/FeatureDefines.xcconfig:

2015-07-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Mac] "Open Image In New Window" context menu item does nothing on an image
        https://bugs.webkit.org/show_bug.cgi?id=147175

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController webView:contextMenuItemsForElement:defaultMenuItems:]):
        Remove default context menus that won't work in the inspector page.

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

        Add a logging channel for Layout, remove the LiveConnect channel
        https://bugs.webkit.org/show_bug.cgi?id=147170

        Reviewed by Zalan Bujtas.

        Add a layout logging channel to WebCore, and remove the LiveConnect channel.

        * Misc/WebKitLogging.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]): Deleted.

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

        Fix WebPreferences infinite recursion introduced in r186232.
        <rdar://problem/9091261> and https://bugs.webkit.org/show_bug.cgi?id=147149

        Reviewed by Tim Horton.

        * WebView/WebPreferences.mm:
        (-[WebPreferences metaRefreshEnabled]):

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

        Reduce PassRefPtr in WebKit2 - 3
        https://bugs.webkit.org/show_bug.cgi?id=146995

        Reviewed by Daniel Bates.

        To remove PassRefPtr, this patch reduces use of PassRefPtr in WebKit2.
        Because some uses depend on WebCore, WebCore, WK1 ports are modified as well.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createDocumentLoader):

2015-07-17  Andy Estes  <aestes@apple.com>

        [iOS] Further tighten the sandbox around pages fetched with Content-Disposition: attachment
        https://bugs.webkit.org/show_bug.cgi?id=147044
        rdar://problem/21567820

        Reviewed by Brady Eidson.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Enabled Content-Disposition: attachment sandbox on iOS.

2015-07-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Mac] Save dialog not working when inspector is docked
        https://bugs.webkit.org/show_bug.cgi?id=146991

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::save):
        (-[WebInspectorWindowController webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        When the window is nil (docked) use a non-window version of running the dialog.

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

        [iOS] Expose contentsSizeRespectingOverflow() via WebView so UIWebView can use it
        https://bugs.webkit.org/show_bug.cgi?id=146924
        WebKit part of rdar://problem/21802456

        Reviewed by Tim Horton.

        Expose the FrameView's contentsSizeRespectingOverflow() via WebView, for use
        by UIKit.

        * WebView/WebView.mm:
        (-[WebView _contentsSizeRespectingOverflow]):
        * WebView/WebViewPrivate.h:

2015-07-14  Anders Carlsson  <andersca@apple.com>

        Remove wkPopupMenu from WebCoreSystemInterface; it's not called from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=146945

        Reviewed by Tim Horton.

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::show):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.

2015-07-11  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Inspector should be able to be docked to the bottom of a narrow window
        https://bugs.webkit.org/show_bug.cgi?id=146871

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.mm:

2015-07-07  Brady Eidson  <beidson@apple.com>

        HTTP Auth cached after disabling private browsing/reset.
        <rdar://problem/8293055> and https://bugs.webkit.org/show_bug.cgi?id=146654

        Reviewed by Tim Horton.

        * Misc/WebCache.h:
        * Misc/WebCache.mm:
        (+[WebCache clearCachedCredentials]): Clear the global CredentialStorage as well as the
          storages belonging to each main frame of each WebView. This method is for DRT.
        
        * Misc/WebDownload.mm:
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]):
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebKit::getAuthenticationInfo):
        
        * WebView/WebView.mm:
        (-[WebView _clearCredentials]): Clear the storage belonging to the current networking session
          of the main frame of this WebView.
        * WebView/WebViewInternal.h:

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

        Drop RefPtr::clear() method
        https://bugs.webkit.org/show_bug.cgi?id=146556

        Reviewed by Brady Eidson.

        Drop RefPtr::clear() method in favor of "= nullptr;" pattern.

2015-07-03  Dan Bernstein  <mitz@apple.com>

        [Xcode] Update some build settings as recommended by Xcode 7
        https://bugs.webkit.org/show_bug.cgi?id=146597

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_UNREACHABLE_CODE,
        GCC_WARN_UNDECLARED_SELECTOR and GCC_NO_COMMON_BLOCKS. Removed GCC_MODEL_TUNING.

2015-07-02  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        Rubber-stamped by Brady Eidson.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        Http, not HTTP, for settings generator reasons.

2015-07-02  Brady Eidson  <beidson@apple.com>

        Add preference to disable all http-equiv.
        <rdar://problem/9091261> and https://bugs.webkit.org/show_bug.cgi?id=146553

        Reviewed by Sam Weinig.
        
        * WebView/WebPreferenceKeysPrivate.h:
        
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setMetaRefreshEnabled:]): Still expose this SPI, but have it affect
          the "httpEquivEnabled" setting.
        (-[WebPreferences metaRefreshEnabled]): Ditto.
        (-[WebPreferences setHTTPEquivEnabled:]):
        (-[WebPreferences httpEquivEnabled]):
        * WebView/WebPreferencesPrivate.h:
        
        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (-[WebView _preferencesChanged:]):

2015-07-02  Timothy Horton  <timothy_horton@apple.com>

        iOS WebKitLegacy should match WebKit2's viewport behavior
        https://bugs.webkit.org/show_bug.cgi?id=146540
        <rdar://problem/20574017>

        Reviewed by Dan Bernstein.

        A number of changes have been made to WebKit2's viewport behavior
        to make it possible to scale "responsive" sites that misbehave (lay out
        in a non-responsive way).

        * History/WebHistoryItem.mm:
        * History/WebHistoryItemPrivate.h:
        Add the plumbing required to implement these new behaviors in WebKit1.

2015-07-01  Dean Jackson  <dino@apple.com>

        Disable the experimental WebGL2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=146526
        <rdar://problem/21641235>

        Reviewed by Myles Maxfield.

        Add (and disable) an ENABLE_WEBGL2 flag.

        * Configurations/FeatureDefines.xcconfig:

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

        Fix the iOS build.

        * WebCoreSupport/WebUserMediaClient.mm:
        (-[WebUserMediaPolicyListener denyOnlyThisRequest]): Remove ASSERT_NOT_REACHED, 
        because it caused the compiler to warn about noreturn.

2015-07-01  Matthew Daiter  <mdaiter@apple.com>

        Enable MEDIA_STREAM flag
        https://bugs.webkit.org/show_bug.cgi?id=145947
        <rdar://problem/21365829>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig: Added MEDIA_STREAM flag
        * WebCoreSupport/WebUserMediaClient.h: Changed signatures
        * WebCoreSupport/WebUserMediaClient.mm: Changed signatures
        (WebUserMediaClient::requestPermission):
        (WebUserMediaClient::cancelRequest):
        (-[WebUserMediaPolicyListener denyOnlyThisRequest]):
        (-[WebUserMediaPolicyListener shouldClearCache]):

2015-07-01  Brady Eidson  <beidson@apple.com>

        REGRESSION (185319): Reproducible crash in WebHistoryItem launching FluidApp.
        <rdar://problem/21598293> and https://bugs.webkit.org/show_bug.cgi?id=146494

        Reviewed by Darin Adler.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]): Don’t reference members of a Vector
          that don’t exist.

2015-06-30  Andy VanWagoner  <thetalecrafter@gmail.com>

        Implement ECMAScript Internationalization API
        https://bugs.webkit.org/show_bug.cgi?id=90906

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: add ENABLE_INTL flag

2015-06-30  Simon Fraser  <simon.fraser@apple.com>

        Crash under _layoutForNodeHighlight: when inspecting espn.com
        https://bugs.webkit.org/show_bug.cgi?id=146422

        Reviewed by Joseph Pecoraro.

        When inspecting espn.com, MobileSafari sometimes crashes, because
        highlight.quads is empty. I was not able to quickly determine why.

        Fix by bailing in this case.

        * WebInspector/WebNodeHighlightView.mm:
        (-[WebNodeHighlightView _layoutForNodeHighlight:parent:]):

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

        Remove the WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS ifdefs now that this is always true
        https://bugs.webkit.org/show_bug.cgi?id=146462

        Reviewed by Dan Bernstein.

        * Misc/WebDownload.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebPolicyDelegate.h:
        * WebView/WebResourceLoadDelegate.h:
        * WebView/WebUIDelegate.h:
        * WebView/WebView.h:
        * postprocess-headers.sh:

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

        Get rid of unused WKSI functions
        https://bugs.webkit.org/show_bug.cgi?id=146443

        Reviewed by Tim Horton.

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

2015-06-29  Dean Jackson  <dino@apple.com>

        Temporarily disable PICTURE_SIZES
        https://bugs.webkit.org/show_bug.cgi?id=146435
        <rdar://problem/21087013>

        Reviewed by Tim Horton.

        Temporarily disable PICTURE_SIZES because it causes problems with out
        of date <picture> polyfills.

        * Configurations/FeatureDefines.xcconfig:

2015-06-27  Ryosuke Niwa  <rniwa@webkit.org>

        Font panel doesn't get updated when bolding text via cmd+b in Mail on OS X
        https://bugs.webkit.org/show_bug.cgi?id=146379

        Reviewed by Darin Adler.

        Update the font panel when newly added EditorClient::didApplyStyle is called. Also set the font attributes
        in _updateFontPanel so that underline and strike through states will be reflected.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldApplyStyle):
        (updateFontPanelIfNeeded): Extracted from respondToChangedContents.
        (WebEditorClient::didApplyStyle): Added.
        (WebEditorClient::respondToChangedContents):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]): Sets font attributes as well as font.

2015-06-29  Dean Jackson  <dino@apple.com>

        Setting to enable/disable media controls sizing on page zoom
        https://bugs.webkit.org/show_bug.cgi?id=146423
        <rdar://problem/18379634>

        Reviewed by Eric Carlson.

        Add a new setting "MediaControlsScaleWithPageZoom" that can disable
        the behaviour we currently implement on iOS, where the media controls
        attempt to remain at a fixed size independent of page zoom.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize to false on iOS, true otherwise.
        (-[WebPreferences mediaControlsScaleWithPageZoom]):
        (-[WebPreferences setMediaControlsScaleWithPageZoom:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead of DISPATCH_SOURCE_TYPE_MEMORYSTATUS
        https://bugs.webkit.org/show_bug.cgi?id=146413

        Reviewed by Andreas Kling.

        Replace SPI with API.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted.
        * WebView/WebView.mm:
        (+[WebView registerForMemoryNotifications]):

2015-06-28  Darin Adler  <darin@apple.com>

        [Mac] Remove redundant call to colorUsingColorSpaceName:
        https://bugs.webkit.org/show_bug.cgi?id=146397

        Reviewed by Alexey Proskuryakov.

        * WebView/WebHTMLView.mm:
        (extractUnderlines): Remove call to the colorUsingColorSpaceName: method,
        since colorFromNSColor already calls it. No need to do it twice.

2015-06-26  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [Win] Implement WebViewGroup to support WebView::addxxxToGroup().
        https://bugs.webkit.org/show_bug.cgi?id=145908

        Reviewed by Brent Fulgham.

        Make WebViewGroup class sharing on Mac and Win port.

        * WebCoreSupport/WebViewGroup.h: Removed.
        * WebCoreSupport/WebViewGroup.mm: Removed.

2015-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Support for OS X Full Screen Mode
        https://bugs.webkit.org/show_bug.cgi?id=123510

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::didResizeMainFrame):
        (WebInspectorClient::windowFullScreenDidChange):
        (WebInspectorClient::canAttach):
        (WebInspectorFrontendClient::canAttach):
        (-[WebInspectorWindowController showWindow:]):
        Consolidate canAttach logic into canAttach functions.

        (-[WebInspectorWindowController window:]):
        Share the same full screen behavior as WebKit2.

        (-[WebInspectorWindowController windowDidEnterFullScreen:]):
        (-[WebInspectorWindowController windowDidExitFullScreen:]):
        Attach availability may have changed.

2015-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Web Inspector: Window dragging on toolbar should behave more like native window dragging
        https://bugs.webkit.org/show_bug.cgi?id=146324

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::startWindowDrag):
        Start performing a window drag.

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

        Remove windowResizerRect code, nobody is using it anymore
        https://bugs.webkit.org/show_bug.cgi?id=146265

        Reviewed by Beth Dakin.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::windowResizerRect): Deleted.

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

        [WK1] WebAllowDenyPolicyListener.denyOnlyThisRequest() should not start a new permission request
        https://bugs.webkit.org/show_bug.cgi?id=146228
        <rdar://problem/15179262>

        Reviewed by Daniel Bates.

        Call the new Geolocation::resetIsAllowed() API after denying the
        current request, instead of calling
        Geolocation::resetAllGeolocationPermission(). In addition to resetting
        m_allowGeolocation to Unknown, the latter would also start a new
        permission request. However, for
        WebAllowDenyPolicyListener.denyOnlyThisRequest(), we really only want
        to deny the current request and then reset m_allowGeolocation to
        Unknown so that permission is requested again later if the app requests
        a position again.

        The previous implementation meant that if the client application keeps
        calling WebAllowDenyPolicyListener.denyOnlyThisRequest(), we would end
        up in an infinite loop (requesting for permission), even though the
        application did not make any new geolocation requests.

        * WebCoreSupport/WebGeolocationClient.mm:
        (-[WebGeolocationPolicyListener denyOnlyThisRequest]):

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

        Delegates should be formal protocols
        https://bugs.webkit.org/show_bug.cgi?id=146222
        rdar://problem/17380856

        Reviewed by Dan Bernstein.

        Flip the switch on OS X and make delegates formal protocols.

        * postprocess-headers.sh:

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

        Deselection of text causes a noticeable jump on force touch machines
        https://bugs.webkit.org/show_bug.cgi?id=146173
        <rdar://problem/20992842>

        Reviewed by Sam Weinig.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _animationControllerForText]):
        Get rid of TextIndicatorPresentationTransition::Crossfade.

2015-06-19  Brent Fulgham  <bfulgham@apple.com>

        All calls of ImageBuffer::create should null check the return value
        https://bugs.webkit.org/show_bug.cgi?id=22132

        Reviewed by Zalan Bujtas.

        ImageBuffer::create returns nullptr for a number of reasons, and should be
        expected to do so. We missed this check in a few places, resulting in
        crashes on some systems. Likewise, ImageBuffer::copyImage may return nullptr
        in normal use and should be checked.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::imageForCurrentSharingServicePickerItem): Add nullptr check
        for copyImage.

2015-06-18  Jon Lee  <jonlee@apple.com>

        Update AVKit usage of pip
        https://bugs.webkit.org/show_bug.cgi?id=146095
        <rdar://problem/21386853>

        Reviewed by Eric Carlson.

        - Rename preference key
        - Rename shouldAllowAlternateFullscreen to shouldAllowPictureInPictureMediaPlayback

        * WebCoreSupport/WebSystemInterface.mm:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences allowsAlternateFullscreen]): Call allowsPictureInPictureMediaPlayback.
        (-[WebPreferences setAllowsAlternateFullscreen:]):
        (-[WebPreferences allowsPictureInPictureMediaPlayback]): Added.
        (-[WebPreferences setAllowsPictureInPictureMediaPlayback:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:

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

        Remove shouldInterruptJavaScript
        https://bugs.webkit.org/show_bug.cgi?id=146118

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldInterruptJavaScript): Deleted.
        * WebView/WebUIDelegatePrivate.h:

2015-06-17  Alex Christensen  <achristensen@webkit.org>

        [Content Extensions] Log blocked loads to the WebInspector console
        https://bugs.webkit.org/show_bug.cgi?id=146089

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageSource):
        Added content blocker message source.

2015-06-17  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19034131> Cleaned up the WebDownload.h framework header.

        Reviewed by Anders Carlsson.

        * Misc/WebDownload.h: Changed to use USE_APPLE_INTERNAL_SDK instead of __has_include.
        * postprocess-headers.sh: Define USE_APPLE_INTERNAL_SDK when postprocessing framework
        headers.

2015-06-17  Commit Queue  <commit-queue@webkit.org>

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

        Caused many crashes on Windows (Requested by ap on #webkit).

        Reverted changeset:

        "[Win] Implement WebViewGroup to support
        WebView::addxxxToGroup()."
        https://bugs.webkit.org/show_bug.cgi?id=145908
        http://trac.webkit.org/changeset/185636

2015-06-16  Hyungwook Lee  <hyungwook.lee@navercorp.com>

        [Win] Implement WebViewGroup to support WebView::addxxxToGroup().
        https://bugs.webkit.org/show_bug.cgi?id=145908

        Reviewed by Brent Fulgham.

        Make WebViewGroup class sharing on Mac and Win port.

        * WebCoreSupport/WebViewGroup.h: Removed.
        * WebCoreSupport/WebViewGroup.mm: Removed.

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

        [WK2] API::Navigation objects are leaked on history navigation to HistoryItems in PageCache
        https://bugs.webkit.org/show_bug.cgi?id=145948

        Reviewed by Darin Adler.

        Add empty implementation for new
        FrameLoaderClient::updatedCachedDocumentLoader().

        * WebCoreSupport/WebFrameLoaderClient.h:

2015-06-11  Mark Lam  <mark.lam@apple.com>

        WebCore::reportException() needs to be able to accept a raw thrown value in addition to Exception objects.
        https://bugs.webkit.org/show_bug.cgi?id=145872

        Reviewed by Michael Saboff.

        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]):
        - Don't assume we have an Exception object.  Let WebCore::reportException() take
          care of it.

2015-06-11  Jon Lee  <jonlee@apple.com>

        Update media controls JS and CSS to use picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=145827
        <rdar://problem/21311576>

        Reviewed by Dean Jackson.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Deleted GetMediaUIImageData.

2015-06-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Meta refresh preference is not respected on fast path WebView
        initialization

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

        Reviewed by Brady Eidson.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        Set the WebCore setting from the WebPreferences preference.

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

        Remove more unused SPI methods
        https://bugs.webkit.org/show_bug.cgi?id=145804

        Reviewed by Simon Fraser.

        * Misc/WebNSURLRequestExtras.h:
        * Misc/WebNSURLRequestExtras.m:
        (-[NSURLRequest _web_HTTPReferrer]): Deleted.
        (-[NSURLRequest _web_HTTPContentType]): Deleted.
        (-[NSURLRequest _web_isConditionalRequest]): Deleted.

2015-06-08  Dan Bernstein  <mitz@apple.com>

        Removed WebDragSourceActionAttachment from the WebDragSourceAction enum.

        Rubber-stamped by Anders Carlsson.

        * WebView/WebUIDelegate.h: Removed the value. It was added in r181760 and never used.

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

        Access GCController instance via GCController::singleton() instead of a free function
        https://bugs.webkit.org/show_bug.cgi?id=145776

        Reviewed by Darin Adler.

        Access GCController instance via GCController::singleton() instead of a
        free function as per coding style and for consistency with other
        singleton classes in the codebase.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics garbageCollectJavaScriptObjects]):
        (+[WebCoreStatistics garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging:]):
        (+[WebCoreStatistics setJavaScriptGarbageCollectorTimerEnabled:]):
        * WebView/WebView.mm:
        (+[WebView garbageCollectNow]):
        (+[WebView discardAllCompiledCode]):
        (-[WebView _close]):

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

        Remove more unused Objective-C methods
        https://bugs.webkit.org/show_bug.cgi?id=145761

        Reviewed by Geoffrey Garen.

        * Misc/WebNSImageExtras.h:
        * Misc/WebNSImageExtras.m:
        (-[NSImage _web_saveAndOpen]): Deleted.
        * Misc/WebNSViewExtras.h:
        * Misc/WebNSViewExtras.m:
        (-[NSView _web_DragImageForElement:rect:event:pasteboard:source:offset:]): Deleted.
        (-[NSView _web_convertRect:toView:]): Deleted.

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

        Try to fix the Mavericks build.

        * WebView/WebPDFView.mm:
        (removeUselessMenuItemSeparators):

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

        Remove WebNSArrayExtras
        https://bugs.webkit.org/show_bug.cgi?id=145747

        Reviewed by Darin Adler.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * Misc/WebNSArrayExtras.h: Removed.
        * Misc/WebNSArrayExtras.m: Removed.
        (-[NSArray _webkit_numberAtIndex:]): Deleted.
        (-[NSArray _webkit_stringAtIndex:]): Deleted.
        (-[NSMutableArray _webkit_removeUselessMenuItemSeparators]): Deleted.
        * WebView/WebPDFView.mm:
        (removeUselessMenuItemSeparators):
        (-[WebPDFView _menuItemsFromPDFKitForEvent:]):

2015-06-08  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

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

        Remove WebKitSystemBits
        https://bugs.webkit.org/show_bug.cgi?id=145746

        Reviewed by Dan Bernstein.

        Fold WebVolumeFreeSize into its only caller and get rid of WebKitSystemBits.

        * Misc/WebKitSystemBits.h: Removed.
        * Misc/WebKitSystemBits.m: Removed.
        * WebView/WebPreferences.mm:
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

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

        Remove another SPI method that hasn't been used since Tiger
        https://bugs.webkit.org/show_bug.cgi?id=145745

        Reviewed by Dan Bernstein.

        * WebView/WebView.mm:
        (-[WebView handleAuthenticationForResource:challenge:fromDataSource:]): Deleted.
        * WebView/WebViewPrivate.h:

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

        Remove another unused SPI method
        https://bugs.webkit.org/show_bug.cgi?id=145743

        Reviewed by Dan Bernstein.

        * WebView/WebView.mm:
        (+[WebView _pointingHandCursor]): Deleted.
        * WebView/WebViewPrivate.h:

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

        Remove unused SPI
        https://bugs.webkit.org/show_bug.cgi?id=145742

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::clearPrivateBrowsingSessionCookieStorage): Deleted.
        * WebView/WebView.mm:
        (+[WebView _clearPrivateBrowsingSessionCookieStorage]): Deleted.
        * WebView/WebViewPrivate.h:

2015-06-06  Dan Bernstein  <mitz@apple.com>

        Restored binary compatibility with shipping Safari.

        Suggested by Anders Carlsson.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _webkit_fixedCarbonPOSIXPath]): Added an implementation that returns self, so
        that Safari doesn’t crash when trying to call this method.

2015-06-06  Dan Bernstein  <mitz@apple.com>

        Fixed the build.

        * Plugins/WebBasePluginPackage.mm:

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

        Remove support from getting plug-in information from Carbon resources
        https://bugs.webkit.org/show_bug.cgi?id=145730

        Reviewed by Dan Bernstein.

        No current plug-in versions use this feature, and both Chrome and Mozilla for
        Mac stopped looking at Carbon resources years ago.

        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.mm:
        (+[NSString _web_encodingForResource:]): Deleted.
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _initWithPath:]):
        (-[WebNetscapePluginPackage stringForStringListID:andIndex:]): Deleted.
        (-[WebNetscapePluginPackage getPluginInfoFromResources]): Deleted.

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

        Remove now unused category methods
        https://bugs.webkit.org/show_bug.cgi?id=145729

        Reviewed by Dan Bernstein.

        * Configurations/WebKitLegacy.xcconfig:
        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _webkit_fixedCarbonPOSIXPath]): Deleted.
        * Misc/WebNSFileManagerExtras.h:
        * Misc/WebNSFileManagerExtras.mm:
        (-[NSFileManager _webkit_startupVolumeName]): Deleted.

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

        Fix build.

        * WebKit.mac.exp:

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

        Stop using _webkit_fixedCarbonPOSIXPath in plug-in code
        https://bugs.webkit.org/show_bug.cgi?id=145728

        Reviewed by Dan Bernstein.

        This code was put in place to support old plug-ins that would pass Carbon paths to NPAPI functions.
        WebKit2 never supported this and we've never had any problems so let's just get rid of it.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _postURL:target:len:buf:file:notifyData:sendNotification:allowHeaders:]):

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

        Remove SPI that's no longer used
        https://bugs.webkit.org/show_bug.cgi?id=145727

        Reviewed by Dan Bernstein.

        * Plugins/WebPluginsPrivate.h: Removed.
        * Plugins/WebPluginsPrivate.m: Removed.

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

        Only allow plug-ins to create custom MIME property lists on older versions of OS X
        https://bugs.webkit.org/show_bug.cgi?id=145726

        Reviewed by Dan Bernstein.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):

2015-06-05  Mark Lam  <mark.lam@apple.com>

        finally blocks should not set the exception stack trace when re-throwing the exception.
        https://bugs.webkit.org/show_bug.cgi?id=145525

        Reviewed by Geoffrey Garen.

        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]):
        (WebKitInitializeApplicationCachePathIfNecessary):
        - Changed to use the new Exception object.

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

        Define WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS on iOS
        https://bugs.webkit.org/show_bug.cgi?id=145615
        Part of rdar://problem/17380856.

        Reviewed by Dan Bernstein.

        * postprocess-headers.sh:

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

        WebKit policy delegate should suggest if a navigation should be allowed to open URLs externally.
        rdar://problem/21025301 and https://bugs.webkit.org/show_bug.cgi?id=145280

        Reviewed by Alex Christensen.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController webPlugInContainerLoadRequest:inFrame:]):
        
        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

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

        WAKScrollView.h cannot be imported standalone
        https://bugs.webkit.org/show_bug.cgi?id=145529

        Reviewed by Dan Bernstein.

        Don't migrate WAKScrollView.h, it's not used outside of WebKit.

        * MigrateHeaders.make:

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

        Make the header replace rule more restrictive and get rid of a special case
        https://bugs.webkit.org/show_bug.cgi?id=145486

        Reviewed by Ryosuke Niwa.

        We used to not run the header migration script on WAKScrollView.h since we had a rule that would transform
        "<WebCore" to "<WebKitLegacy" to convert header #imports. However, WAKScrollView.h contains "WAKView <WebCoreFrameScrollView>" 
        which would get transformed to "WAKView <WebKitLegacyFrameScrollView>".
        
        Instead, check for the trailing slash as well and stop special-casing WAKScrollView.h.

        * MigrateHeaders.make:

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

        Get rid of WAKViewPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=145482
        rdar://problem/21162149

        Reviewed by Dan Bernstein.

        Remove WAKViewPrivate.h imports.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        * MigrateHeaders.make:
        * Misc/WebKitNSStringExtras.mm:
        * Misc/WebNSViewExtras.m:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebFrame.mm:
        * WebView/WebFrameView.mm:
        * WebView/WebHTMLView.mm:

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

        WebResourceLoadDelegatePrivate.h cannot be imported standalone (missing WebNSInteger type)
        https://bugs.webkit.org/show_bug.cgi?id=145476
        rdar://problem/21162400

        Reviewed by Dan Bernstein.

        Change WebNSInteger to NSInteger.

        * WebView/WebResourceLoadDelegatePrivate.h:

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

        WebKit.framework installs or references Mac-only headers on iOS
        https://bugs.webkit.org/show_bug.cgi?id=145471
        rdar://problem/21161459

        Reviewed by Dan Bernstein.

        * History/WebURLsWithTitles.h:
        Add an #if !TARGET_OS_IPHONE guard around the entire header.

        * MigrateHeaders.make:
        Don't migrate the NPAPI headers on iOS.

2015-05-28  Matt Rajca  <mrajca@apple.com>

        Add ENABLE_MEDIA_SESSION feature flag (which is off by default).
        https://bugs.webkit.org/show_bug.cgi?id=145415

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2015-05-28  Jon Lee  <jonlee@apple.com>

        Build fix after r184946.

        * WebView/WebPreferences.mm:
        (-[WebPreferences allowsAirPlayForMediaPlayback]):
        (-[WebPreferences setAllowsAirPlayForMediaPlayback:]):

2015-05-19  Jon Honeycutt  <jhoneycutt@apple.com>

        [iOS] When viewing an MJPEG stream as the main resource, only the first
        frame paints

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.h:

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didReplaceMultipartContent):
        Call the FrameView's didReplaceMultipartContent().

2015-05-22  Jon Lee  <jonlee@apple.com>

        Fix macros for wireless playback
        https://bugs.webkit.org/show_bug.cgi?id=145239
        rdar://problem/21049541

        Reviewed by Anders Carlsson.

        Encompass the logic within ENABLE(WIRELESS_TARGET_PLAYBACK). Update property name.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Wrap in ENABLE.
        (-[WebPreferences allowsAirPlayForMediaPlayback]): Ditto.
        (-[WebPreferences setAllowsAirPlayForMediaPlayback:]): Ditto.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Ditto.

2015-05-27  Dean Jackson  <dino@apple.com>

        img.currentSrc problem in strict mode with old picturefill
        https://bugs.webkit.org/show_bug.cgi?id=144095
        <rdar://problem/21087013>

        Reviewed by Simon Fraser.

        Add a PICTURE_SIZES flag.

        * Configurations/FeatureDefines.xcconfig:

2015-05-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/21104551> Update build settings

        Reviewed by Anders Carlsson.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2015-05-25  Dan Bernstein  <mitz@apple.com>

        ASSERT_MAIN_THREAD and DOM_ASSERT_MAIN_THREAD are unnecessary no-ops
        https://bugs.webkit.org/show_bug.cgi?id=145372

        Reviewed by Sam Weinig.

        * Carbon/CarbonWindowAdapter.mm:
        (-[CarbonWindowAdapter finalize]): Removed use of ASSERT_MAIN_THREAD.

        * Configurations/Base.xcconfig: Removed DISABLE_THREAD_CHECK from DEBUG_DEFINES.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem URLString]): Removed use of ASSERT_MAIN_THREAD.
        (-[WebHistoryItem originalURLString]): Ditto.
        (-[WebHistoryItem title]): Ditto.
        (-[WebHistoryItem lastVisitedTimeInterval]): Ditto.
        (-[WebHistoryItem isEqual:]): Ditto.
        (-[WebHistoryItem description]): Ditto.
        (-[WebHistoryItem initFromDictionaryRepresentation:]): Ditto.
        (-[WebHistoryItem scrollPoint]): Ditto.

        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary finalize]): Ditto.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase iconForURL:withSize:cache:]): Ditto.
        (-[WebIconDatabase iconURLForURL:]): Ditto.
        (-[WebIconDatabase defaultIconWithSize:]): Ditto.
        (-[WebIconDatabase retainIconForURL:]): Ditto.
        (-[WebIconDatabase releaseIconForURL:]): Ditto.
        (+[WebIconDatabase delayDatabaseCleanup]): Ditto.
        (+[WebIconDatabase allowDatabaseCleanup]): Ditto.
        (-[WebIconDatabase removeAllIcons]): Ditto.
        (-[WebIconDatabase _iconForFileURL:withSize:]): Ditto.
        (webGetNSImage): Ditto.

        * Misc/WebKitLogging.h: Removed definition of ASSERT_MAIN_THREAD.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView finalize]): Removed use of ASSERT_MAIN_THREAD.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage finalize]): Ditto.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView finalize]): Ditto.

        * WebCoreSupport/WebEditorClient.mm:
        (-[WebUndoStep finalize]): Ditto.

        * WebView/WebDataSource.mm:
        (-[WebDataSource finalize]): Ditto.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate finalize]): Ditto.
        (-[WebHTMLView finalize]): Ditto.
        (-[WebHTMLView drawRect:]): Ditto.

        * WebView/WebViewData.mm:
        (-[WebViewPrivate finalize]): Ditto.

2015-05-23  Dan Bernstein  <mitz@apple.com>

        Remove unused definitions of WEBKIT_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=145345

        Reviewed by Sam Weinig.

        * Configurations/WebKitLegacy.xcconfig: Also changed to use $(inherited).

2015-05-24  Jeremy Jones  <jeremyj@apple.com>

        Register media MIME types as supported by HTML view in WebKit1.
        https://bugs.webkit.org/show_bug.cgi?id=145356

        Reviewed by Eric Carlson.

        WebDataSource and WebFrame view knew about suppotedImageMIMETypes and supportedNonImageMIMETypes,
        but not a third category supportedMediaMIMETypes. These are now included along-side 
        supportedNonImageMIMETypes.

        * WebView/WebDataSource.mm:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]): use supportedMediaMIMETypes.
        * WebView/WebFrameView.mm:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]): use supportedMediaMIMETypes.
        * WebView/WebHTMLRepresentation.h: declare -supportedMediaMIMETypes
        * WebView/WebHTMLRepresentation.mm:
        (+[WebHTMLRepresentation supportedMIMETypes]): include supportedMediaMIMETypes
        (+[WebHTMLRepresentation supportedMediaMIMETypes]): added
        * WebView/WebHTMLView.mm:
        (+[WebHTMLView supportedMediaMIMETypes]): added
        * WebView/WebHTMLViewPrivate.h: declare -supportedMediaMIMETypes

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackAllowsInline
        https://bugs.webkit.org/show_bug.cgi?id=145315

        Reviewed by Eric Carlson.

        Our API uses allowsInlineMediaPlayback. Our symbols should reflect the same.

        * WebView/WebPreferenceKeysPrivate.h: Update the name of the key, but not its
        value, for backwards compatibility.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Update the symbol.
        (-[WebPreferences mediaPlaybackAllowsInline]): Ditto. This setting will not
        be renamed in a future patch.
        (-[WebPreferences setMediaPlaybackAllowsInline:]): Ditto.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Update the call to settings.

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackAllowsAirPlay
        https://bugs.webkit.org/show_bug.cgi?id=145316

        Reviewed by Eric Carlson.

        In preparation for an API rename, update internal symbols from mediaPlaybackAllowsAirPlay
        to allowsAirPlayForMediaPlayback.

        * WebView/WebPreferenceKeysPrivate.h: Update the name but keep its value, for backwards
        compatibility.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Update to reference the new key name.
        (-[WebPreferences mediaPlaybackAllowsAirPlay]): Ditto. This API will not change in a future
        patch.
        (-[WebPreferences setMediaPlaybackAllowsAirPlay:]): Ditto.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Update the call to settings.

2015-05-22  Jon Lee  <jonlee@apple.com>

        Rename MediaPlaybackRequiresUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=145314

        Reviewed by Anders Carlsson.

        In preparation for an API rename, update internal symbols from mediaPlaybackRequiresUserGesture
        to requiresUserGestureForMediaPlayback.

        No changes are being made to the API in this patch.

        * WebView/WebPreferenceKeysPrivate.h: Update the name of the key, but not its value, for backwards
        compatibility.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Update the symbol.
        (-[WebPreferences mediaPlaybackRequiresUserGesture]): Ditto. This setting will not be renamed
        in a future patch.
        (-[WebPreferences setMediaPlaybackRequiresUserGesture:]): Ditto.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Update the call to settings.

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

        Remove action menu support
        https://bugs.webkit.org/show_bug.cgi?id=145305
        <rdar://problem/21070771>

        Reviewed by Anders Carlsson.

        * Configurations/WebKitLegacy.xcconfig:
        * WebView/WebActionMenuController.h: Removed.
        * WebView/WebActionMenuController.mm: Removed.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView otherMouseDown:]):
        (-[WebHTMLView scrollWheel:scrollWheel:]): Deleted.
        (-[WebHTMLView mouseDown:mouseDown:]): Deleted.
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Deleted.
        (-[WebView _close]): Deleted.
        (-[WebView prepareForMenu:withEvent:]): Deleted.
        (-[WebView willOpenMenu:withEvent:]): Deleted.
        (-[WebView didCloseMenu:withEvent:]): Deleted.
        (-[WebView _actionMenuController]): Deleted.
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]): Deleted.
        * WebView/WebViewInternal.h:
        Remove everything, except some enums that clients still refer to.

2015-05-22  Brady Eidson  <beidson@apple.com>

        Rework how the ResourceRequest user initiated property key is used.
        Followup to https://bugs.webkit.org/show_bug.cgi?id=145281

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebSystemInterface.mm:
        (WKResourceRequestIsUserInitiatedKey): Deleted.
        (InitWebCoreSystemInterface): Deleted.

2015-05-21  Brady Eidson  <beidson@apple.com>

        Add an "initiated by user gesture" flag to ResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=145281

        Reviewed by Alex Christensen.

        * WebCoreSupport/WebSystemInterface.mm:
        (WKResourceRequestIsUserInitiatedKey):
        (InitWebCoreSystemInterface):

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

        Fix build.

        * WebView/WebViewInternal.h:

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

        Unreviewed build fix; LocalizedStrings.h is in WebCore.

        * WebView/WebActionMenuController.mm:

2015-05-20  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; WebActionMenuController.mm should directly include LocalizedStrings.h

        * WebView/WebActionMenuController.mm:

2015-05-19  Jer Noble  <jer.noble@apple.com>

        Touching HTMLMediaElement.h or MediaPlayer.h causes a world rebuild.
        https://bugs.webkit.org/show_bug.cgi?id=145193

        Reviewed by Eric Carlson.

        Use HTMLMediaElementEnums instead of HTMLMediaElement.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::enterVideoFullscreenForVideoElement): HTMLMediaElement -> HTMLMediaElementEnums.
        * WebView/WebView.mm:
        (-[WebView _enterVideoFullscreenForVideoElement:mode:]): Ditto.
        * WebView/WebViewInternal.h:

2015-05-19  Michael Saboff  <msaboff@apple.com>

        REGRESSION(183787): JIT is enabled for all builds
        https://bugs.webkit.org/show_bug.cgi?id=145179

        Reviewed by Geoffrey Garen.

        Eliminated the setting of ENABLE_JIT, as wtf/Platform.h has appropriate logic to
        set it depending on OS and CPU type.

        * Configurations/FeatureDefines.xcconfig:

2015-05-19  Brady Eidson  <beidson@apple.com>

        X-Frame-Options headers not respected when loading from application cache.
        <rdar://problem/14877623> and https://bugs.webkit.org/show_bug.cgi?id=131800

        Reviewed by Alexey Proskuryakov.

        * WebView/WebFrame.mm:
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2015-05-18  Skachkov Alexandr  <gskachkov@gmail.com>

        [ES6] Arrow function syntax. Feature flag for arrow function
        https://bugs.webkit.org/show_bug.cgi?id=145108

        Reviewed by Ryosuke Niwa.

        Added feature flag ENABLE_ES6_ARROWFUNCTION_SYNTAX for arrow function

        * Configurations/FeatureDefines.xcconfig:

2015-05-15  Jeremy Jones  <jeremyj@apple.com>

        Limit alternate fullscreen with linked on or after.
        https://bugs.webkit.org/show_bug.cgi?id=144894

        Reviewed by Dean Jackson.

        * WebView/WebView.mm:
        (shouldAllowAlternateFullscreen): Added.
        (-[WebView _preferencesChanged:]):

2015-05-12  Simon Fraser  <simon.fraser@apple.com>

        Turn antialiased font dilation off by default
        https://bugs.webkit.org/show_bug.cgi?id=144940
        rdar://problem/20923031

        Reviewed by Sam Weinig.
        
        Turn antialised font dilation off by default.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

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

        [iOS] Close all open databases in expiration handler of process assertion
        https://bugs.webkit.org/show_bug.cgi?id=144661
        <rdar://problem/20845052>

        Reviewed by Darin Adler.

        For Legacy WebKit, close all open databases when the process assertion expiration
        handler is called.

        * Storage/WebDatabaseManager.mm:
        (+[WebDatabaseManager startBackgroundTask]): Call DatabaseTracker::tracker().closeAllDatabases()
        in the expiration handler to close all open databases. As a side effect of closing
        a database all in-progress database transactions are interrupted.

2015-05-10  Sungmann Cho  <sungmann.cho@navercorp.com>

        Get rid of the public item accessors in BackForwardClient
        https://bugs.webkit.org/show_bug.cgi?id=144827

        Reviewed by Darin Adler.

        Remove backItem(), currentItem(), and forwardItem() from BackForwardClient.
        We can still use these functionalities through BackForwardController.

        No new tests, no behavior change.

        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):

2015-05-09  Yoav Weiss  <yoav@yoav.ws>

        Remove the PICTURE_SIZES build flag
        https://bugs.webkit.org/show_bug.cgi?id=144679

        Reviewed by Benjamin Poulain.

        Removed the PICTURE_SIZES build time flag.

        * Configurations/FeatureDefines.xcconfig:

2015-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove convenience constructors for TextRun
        https://bugs.webkit.org/show_bug.cgi?id=144752

        These convenience constructors are unnecessary. Moving the code that makes the StringView
        back to the call site will also help us make things more elegant in future refactoring.

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):

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

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

        ASan detected use-after free (Requested by ap on #webkit).

        Reverted changeset:

        "Remove convenience constructors for TextRun"
        https://bugs.webkit.org/show_bug.cgi?id=144752
        http://trac.webkit.org/changeset/183996

2015-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove convenience constructors for TextRun
        https://bugs.webkit.org/show_bug.cgi?id=144752

        These convenience constructors are unnecessary. Moving the code that makes the StringView
        back to the call site will also help us make things more elegant in future refactoring.

        Reviewed by Darin Adler.

        No new tests because there is no behavior change.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):

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

        Build fixes.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_writeFileWrapperAsRTFDAttachment:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _writeSelectionWithPasteboardTypes:toPasteboard:cachedAttributedString:]):
        (-[WebHTMLView _selectionStartFontAttributesAsRTF]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView writeSelectionWithPasteboardTypes:toPasteboard:]):
        Pass empty arrays and dictionaries instead of nil.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Use the regular init method.

2015-05-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Fix iPhone 6 iOS simulator Build.
        following http://trac.webkit.org/changeset/183954.

        Reviewed by Daniel Bates.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView pressureChangeWithEvent:]):

2015-05-07  Timothy Horton  <timothy_horton@apple.com>

        Occasional null deref in WebImmediateActionController
        https://bugs.webkit.org/show_bug.cgi?id=144772
        <rdar://problem/20811128>

        Reviewed by Beth Dakin.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _defaultAnimationController]):
        (-[WebImmediateActionController _animationControllerForDataDetectedText]):
        (-[WebImmediateActionController _animationControllerForDataDetectedLink]):
        Null-check TextIndicators before dereferencing.

2015-05-07  Beth Dakin  <bdakin@apple.com>

        New force-related DOM events should fire in WK1 views
        https://bugs.webkit.org/show_bug.cgi?id=144663
        -and corresponding-
        rdar://problem/20281886

        Reviewed by Sam Weinig.

        Pass the lastPressureEvent to WebCore.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateMouseoverWithEvent:]):
        (-[WebHTMLView rightMouseUp:]):
        (-[WebHTMLView menuForEvent:]):
        (-[WebHTMLView acceptsFirstMouse:]):
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]):
        (-[WebHTMLView mouseDown:mouseDown:]):
        (-[WebHTMLView mouseDragged:]):
        (-[WebHTMLView mouseUp:mouseUp:]):

        New NSRespnder method for pressure changes.
        (-[WebHTMLView pressureChangeWithEvent:]):

        New BOOL _contentPreventsDefault tracks whether the HitTestResult prevented the 
        default action. Get rid of willHandleMouseDown; now that the gesture recognizer 
        sets delaysPrimaryMouseButtonEvents to NO, we don’t need this.
        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _clearImmediateActionState]):

        Set all of the immediateActionStages on EventHandler. This is critical to keep 
        link navigation happening at the right time now that 
        delaysPrimaryMouseButtonEvents is set to NO.
        (-[WebImmediateActionController performHitTestAtPoint:]):
        (-[WebImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):

        Use a dummy animation controller if the content prevents default.
        (-[WebImmediateActionController _defaultAnimationController]):
        (-[WebImmediateActionController _updateImmediateActionItem]):
        (-[WebImmediateActionController webView:willHandleMouseDown:]): Deleted.

        Set delaysPrimaryMouseButtonEvents to NO so that we get existing mouse events when 
        we expect to.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

        Cache the most recent pressure event so that we can send it to WebCore for all of 
        the mouse events.
        (-[WebView _pressureEvent]):
        (-[WebView _setPressureEvent:]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):
        * WebView/WebViewInternal.h:

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

        Revert "Introducing the Platform Abstraction Layer (PAL)"
        https://bugs.webkit.org/show_bug.cgi?id=144751

        Unreviewed.

        PAL should be a new target inside WebCore, rather than a top-level folder.

        * Configurations/FeatureDefines.xcconfig: Updated

2015-05-07  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19317140> [Xcode] Remove usage of AspenFamily.xcconfig in Source/
        https://bugs.webkit.org/show_bug.cgi?id=144727

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Don’t include AspenFamily.xcconfig.
        * Configurations/WebKitLegacy.xcconfig: Define INSTALL_PATH in terms of
        INSTALL_PATH_PREFIX and INSTALL_PATH_ACTUAL, and define INSTALL_PATH_PREFIX for the iOS 8.x
        Simulator.

2015-04-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Introducing the Platform Abstraction Layer (PAL)
        https://bugs.webkit.org/show_bug.cgi?id=143358

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Updated

2015-05-06  Antti Koivisto  <antti@apple.com>

        REGRESSION (r183467): Unable to start downloads in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=144533

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchWillSendRequest):

            Use updateFromDelegatePreservingOldProperties (like WK2) instead of doing the same thing manually.

2015-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Toggling underline on font panel removes strike through
        https://bugs.webkit.org/show_bug.cgi?id=144670
        <rdar://problem/3790443>

        Reviewed by Darin Adler.

        Use setStrikeThroughChange and setUnderlineChange added in r183770 to toggle underline and strike through.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _applyEditingStyleToSelection:withUndoAction:]):
        (-[WebHTMLView _styleForAttributeChange:]):
        (-[WebHTMLView changeAttributes:]):

2015-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Toggling underline or strike through affects each other
        https://bugs.webkit.org/show_bug.cgi?id=27818

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _setTypingStyle:withUndoAction:]):

2015-05-01  Martin Robinson  <mrobinson@igalia.com>

        USE(...) macro should expect unprefixed variables
        https://bugs.webkit.org/show_bug.cgi?id=144454

        Reviewed by Daniel Bates.

        * Misc/WebDownload.h: Replace all occurrences WTF_USE with USE.

2015-05-01  Brady Eidson  <beidson@apple.com>

        Add API to disable meta refreshes.
        <rdar://problem/20333198> and https://bugs.webkit.org/show_bug.cgi?id=144269

        Reviewed by Alexey Proskuryakov.

        Add a preference to enable/disable meta refreshes, enabled by default.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setMetaRefreshEnabled:]):
        (-[WebPreferences metaRefreshEnabled]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-04-30  Jon Davis  <jond@apple.com>

        Web Inspector: console should show an icon for console.info() messages
        https://bugs.webkit.org/show_bug.cgi?id=18530

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageLevel):
        * WebView/WebUIDelegatePrivate.h:

2015-04-29  Myles C. Maxfield  <mmaxfield@apple.com>

        [OS X] Use CTFontCreateForCSS instead of doing font search ourselves
        https://bugs.webkit.org/show_bug.cgi?id=132159

        Reviewed by Darin Adler.

        Add SPI to set the font whitelist.

        * WebView/WebView.mm:
        (+[WebView _setFontWhitelist:]):
        * WebView/WebViewPrivate.h:

2015-04-28  Timothy Horton  <timothy_horton@apple.com>

        [TextIndicator] Yellow highlight takes too long to fade out on scroll
        https://bugs.webkit.org/show_bug.cgi?id=144358
        <rdar://problem/19451011>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _showTextIndicator]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView quickLookWithEvent:]):
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _defaultAnimationController]):
        (-[WebImmediateActionController _animationControllerForDataDetectedText]):
        (-[WebImmediateActionController _animationControllerForDataDetectedLink]):
        Pull _clearTextIndicatorWithAnimation out, make it avoid using a dismissal animation
        if we're called from didHandleScrollWheel.

        * WebView/WebView.mm:
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        (-[WebView _setTextIndicator:]):
        (-[WebView _setTextIndicator:withLifetime:]):
        (-[WebView _clearTextIndicator]):
        (-[WebView _showDictionaryLookupPopup:]):
        (-[WebView _dictionaryLookupPopoverWillClose:]):
        (-[WebView _setTextIndicator:fadeOut:]): Deleted.
        * WebView/WebViewInternal.h:
        Make _setTextIndicator take a reference.
        Add a variant of _setTextIndicator that takes a Lifetime.
        Make _clearTextIndicatorWithAnimation take a DismissalAnimation.

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        Define ENABLE_JIT, enabled by default, instead of ENABLE_LLINT_C_LOOP, disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2015-04-28  Commit Queue  <commit-queue@webkit.org>

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

        It broke cloop test bots (Requested by mcatanzaro on #webkit).

        Reverted changeset:

        "Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT"
        https://bugs.webkit.org/show_bug.cgi?id=144304
        http://trac.webkit.org/changeset/183514

2015-04-28  Michael Catanzaro  <mcatanzaro@igalia.com>

        Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
        https://bugs.webkit.org/show_bug.cgi?id=144304

        Reviewed by Geoffrey Garen.

        Define ENABLE_JIT, enabled by default, instead of ENABLE_LLINT_C_LOOP, disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2015-04-28  Joseph Pecoraro  <pecoraro@apple.com>

        Fix common typo "targetting" => "targeting"
        https://bugs.webkit.org/show_bug.cgi?id=144349

        Reviewed by Daniel Bates.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        * WebView/WebPolicyDelegate.h:

2015-04-28  Brady Eidson  <beidson@apple.com>

        Consolidate most "frame load" arguments into FrameLoadRequest.
        https://bugs.webkit.org/show_bug.cgi?id=144276

        Reviewed by Alexey Proskuryakov.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2015-04-27  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/20721931> REGRESSION (r178753): All legacy framework headers are missing availability annotations
        https://bugs.webkit.org/show_bug.cgi?id=144311

        Reviewed by Adele Peterson.

        * postprocess-headers.sh: Changed “macsox” to “macosx”.

2015-04-27  Brady Eidson  <beidson@apple.com>

        Make 'enum NavigationType' be an enum class
        https://bugs.webkit.org/show_bug.cgi?id=144270

        Reviewed by Alex Christensen.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary):

2015-04-27  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r182879): Images and video can no longer be downloaded
        https://bugs.webkit.org/show_bug.cgi?id=144267
        <rdar://problem/20702844>

        Reviewed by Simon Fraser.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _createActionMenuItemForTag:]): Check for
        "!WebCore::protocolIs(..., "file")" for image and media downloads.

2015-04-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [ES6] Implement ES6 template literals
        https://bugs.webkit.org/show_bug.cgi?id=142691

        Reviewed by Darin Adler.

        Add ENABLE_ES6_TEMPLATE_LITERAL_SYNTAX compile time flag.

        * Configurations/FeatureDefines.xcconfig:

2015-04-26  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType,
        postTextStateChangeNotification and postTextReplacementNotification to give assistive
        tech apps more reliable context for responding to changes in web content. Also implement
        a mechanism to post value changes in password form fields in coalesced ticks to thwart
        analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent,
        and an overload of postTextReplacementNotification to give assistive tech apps more
        reliable context for responding to changes in web content selection. Also block posting
        selection changes on password fields.

        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction):

2015-04-24  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Remove native window dock controls
        https://bugs.webkit.org/show_bug.cgi?id=144184

        Reviewed by Joseph Pecoraro.

        * Resources/Dock.pdf: Removed.
        * Resources/DockLegacy.pdf: Removed.
        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]):
        (-[WebInspectorWindowController setDockingUnavailable:]):

2015-04-25  Martin Robinson  <mrobinson@igalia.com>

        Rename ENABLE_3D_RENDERING to ENABLE_3D_TRANSFORMS
        https://bugs.webkit.org/show_bug.cgi?id=144182

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Replace all instances of 3D_RENDERING with 3D_TRANSFORMS.

2015-04-24  Commit Queue  <commit-queue@webkit.org>

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

        Broke 32-bit build and a test. (Requested by ap on #webkit).

        Reverted changeset:

        "AX: richer text change notifications (142719)"
        https://bugs.webkit.org/show_bug.cgi?id=142719
        http://trac.webkit.org/changeset/183266

2015-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Start cleaning up FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=144133

        Reviewed by Enrica Casucci.

        Receive casts which have been hoisted from the deleted FontPlatformData constructor.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]): Receive cast which has
        been hoisted from the deleted FontPlatformData constructor.
        (-[NSString _web_widthWithFont:]): Ditto.
        * Misc/WebStringTruncator.mm:
        (fontFromNSFont): Ditto.

2015-04-24  Doug Russell  <d_russell@apple.com>

        AX: richer text change notifications (142719)
        https://bugs.webkit.org/show_bug.cgi?id=142719

        Reviewed by Darin Adler.

        Richer accessibility value change notifications. Introduce AXTextEditType, postTextStateChangeNotification and postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content. Also implement a mechanism to post value changes in password form fields in coalesced ticks to thwart analyzing the cadence of changes.

        Richer accessibility selection change notifications. Introduce AXTextStateChangeIntent, and an overload of postTextReplacementNotification to give assistive tech apps more reliable context for responding to changes in web content selection. Also block posting selection changes on password fields.

        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction):

2015-04-23  Jer Noble  <jer.noble@apple.com>

        [Mac] Disable QTKit by default on future OS X.
        https://bugs.webkit.org/show_bug.cgi?id=144082

        Reviewed by Darin Adler.

        Default WebKitQTKitEnabledPreferenceKey to NO.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

2015-04-23  Andreas Kling  <akling@apple.com>

        There should only be one way to get the system memory size.
        <https://webkit.org/b/144081>

        Reviewed by Antti Koivisto.

        * Misc/WebKitSystemBits.h:
        * Misc/WebKitSystemBits.m:
        (WebMemorySize): Deleted.
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):
        (roundUpToPowerOf2): Deleted.

2015-04-22  Darin Adler  <darin@apple.com>

        Remove OwnPtr and PassOwnPtr use from WebKit/cf, WebKit/mac, and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=143943

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/ProxyInstance.h: Removed unneeded include.
        * Plugins/WebBaseNetscapePluginView.h: Ditto.

        * Plugins/WebNetscapePluginEventHandler.h: Use unique_ptr instead of
        PassOwnPtr for the create function. Also tweaked formatting and removed
        unneeded forward declaration of CGRect.
        * Plugins/WebNetscapePluginEventHandler.mm:
        (WebNetscapePluginEventHandler::create): Changed to use unique_ptr and
        make_unique.

        * Plugins/WebNetscapePluginView.h: Use unique_ptr instead of OwnPtr for
        the _eventHandler field.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView destroyPlugin]): Changed code to work with unique_ptr.

        * WebCoreSupport/WebUserMediaClient.mm: Removed unneeded include.

        * WebView/WebDeviceOrientationProviderMock.mm: Changed to use make_unique.
        * WebView/WebDeviceOrientationProviderMockInternal.h: Changed to use unique_ptr.

        * WebView/WebFrame.mm:
        (vectorForDictationPhrasesArray): Changed to return Vector<Vector<String>> and
        not a PassOwnPtr. Also rewrote to be much simpler, although there is still a
        pre-existing problem here where this could put empty vectors into the result,
        and I'm pretty sure the client never expects any of the Vector<String> to be empty.
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        Rewrote logic to involve WebCore types a bit less; old code was round tripping
        things through WebCore::URL for no obvious reason.

        * WebView/WebFrameInternal.h: Changed vectorForDictationPhrasesArray to return
        a Vector<Vector<String>> and not a PassOwnPtr.

        * WebView/WebFullScreenController.h: Removed unneeded include.

        * WebView/WebViewData.h: Changed m_alternativeTextUIController to be a
        m_alternativeTextUIController.
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Use make_unique to initialize m_alternativeTextUIController.

2015-04-22  Brent Fulgham  <bfulgham@apple.com>

        VisibleSelection should only accept Range by reference
        https://bugs.webkit.org/show_bug.cgi?id=144047

        Reviewed by Tim Horton.

        Update all uses of VisibleSelection to pass a Range reference instead
        of a Range pointer.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::imageForCurrentSharingServicePickerItem):
        * WebView/WebFrame.mm:
        (-[WebFrame _selectNSRange:]):

2015-04-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Device picker menu is positioned incorrectly in WK1
        https://bugs.webkit.org/show_bug.cgi?id=144049
        <rdar://problem/20493101>

        Reviewed by Dean Jackson.

        * WebView/WebView.mm:
        (-[WebView _showPlaybackTargetPicker:location:hasVideo:]): Mouse location is already in
            window coordinates so don't call convertRect:toView:nil.

2015-04-21  Brent Fulgham  <bfulgham@apple.com>

        Extend action menus to support PDF
        https://bugs.webkit.org/show_bug.cgi?id=143895
        <rdar://problem/19003333>

        Reviewed by Tim Horton.

        Prevent a crash when someone attempts to invoke an action menu on a PDF hosted
        in a WK1 view.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController performHitTestAtPoint:]): Handle WebPDFView as well as
        the WebHTMLView case.
        * WebView/WebDocument.h:
        * WebView/WebHTMLView.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frame]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebPDFView.h:
        * WebView/WebPDFView.mm:
        (-[WebPDFView _frame]): Added.

2015-04-22  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed post-review clean up after r183096.

        * WebView/WebMediaPlaybackTargetPicker.h:

2015-04-21  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Use one playback target for all web processes
        https://bugs.webkit.org/show_bug.cgi?id=144009

        Reviewed by Tim Horton.

        Update to use WebMediaSessionManager for playback target management.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::addPlaybackTargetPickerClient):
        (WebChromeClient::removePlaybackTargetPickerClient):
        (WebChromeClient::showPlaybackTargetPicker):
        (WebChromeClient::playbackTargetPickerClientStateDidChange):
        (WebChromeClient::startingMonitoringPlaybackTargets): Deleted.
        (WebChromeClient::stopMonitoringPlaybackTargets): Deleted.
        * WebView/WebMediaPlaybackTargetPicker.h:
        * WebView/WebMediaPlaybackTargetPicker.mm:
        (WebMediaPlaybackTargetPicker::addPlaybackTargetPickerClient):
        (WebMediaPlaybackTargetPicker::removePlaybackTargetPickerClient):
        (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker):
        (WebMediaPlaybackTargetPicker::playbackTargetPickerClientStateDidChange):
        (WebMediaPlaybackTargetPicker::setPlaybackTarget):
        (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange):
        (WebMediaPlaybackTargetPicker::setShouldPlayToPlaybackTarget):
        (WebMediaPlaybackTargetPicker::invalidate):
        (WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): Deleted.
        (WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): Deleted.
        (WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): Deleted.
        (WebMediaPlaybackTargetPicker::targetPicker): Deleted.
        * WebView/WebView.mm:
        (-[WebView _addPlaybackTargetPickerClient:]):
        (-[WebView _removePlaybackTargetPickerClient:]):
        (-[WebView _showPlaybackTargetPicker:location:hasVideo:]):
        (-[WebView _playbackTargetPickerClientStateDidChange:state:]):
        (-[WebView _showPlaybackTargetPicker:hasVideo:]): Deleted.
        (-[WebView _startingMonitoringPlaybackTargets]): Deleted.
        (-[WebView _stopMonitoringPlaybackTargets]): Deleted.
        * WebView/WebViewInternal.h:

2015-04-20  Alexey Proskuryakov  <ap@apple.com>

        Disable mixed content blocking for existing WebKit1 clients
        https://bugs.webkit.org/show_bug.cgi?id=143955
        rdar://problem/20177186

        Reviewed by Oliver Hunt.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (shouldAllowInsecureContent):
        (-[WebView _preferencesChanged:]):

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

        Implement immediate action support for tel: and mailto: URLs
        https://bugs.webkit.org/show_bug.cgi?id=143916
        <rdar://problem/19721711>

        Reviewed by Darin Adler.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _defaultAnimationController]):
        (-[WebImmediateActionController _animationControllerForDataDetectedText]):
        (-[WebImmediateActionController _animationControllerForDataDetectedLink]):
        (-[WebImmediateActionController _menuItemForDataDetectedText]): Deleted.
        * WebView/WebUIDelegatePrivate.h:
        Add _animationControllerForDataDetectedLink and use it when
        building immediate actions for tel: and mailto: links.

2015-04-17  Daniel Bates  <dabates@apple.com>

        REGRESSION: SVG does not support link dragging
        https://bugs.webkit.org/show_bug.cgi?id=141597

        Reviewed by Darin Adler.

        Write -[WebElementDictionary _isLiveLink] in terms of WebCore::isDraggableLink().

        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary _isLiveLink]):

2015-04-16  Sam Weinig  <sam@webkit.org>

        Expose JavaScriptMarkupEnabled preference for WebKit1
        <rdar://problem/19939450>
        https://bugs.webkit.org/show_bug.cgi?id=143855

        Reviewed by Dan Bernstein.

        * WebView/WebPreferenceKeysPrivate.h:
        Add new key, WebKitJavaScriptMarkupEnabledPreferenceKey

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        Initialize WebKitJavaScriptMarkupEnabledPreferenceKey to YES.

        (-[WebPreferences isJavaScriptMarkupEnabled]):
        (-[WebPreferences setJavaScriptMarkupEnabled:]):
        Implement getter/setter.

        * WebView/WebPreferencesPrivate.h:
        Add new property, javaScriptMarkupEnabled.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Map the new preference to WebCore's scriptMarkupEnabled setting.

2015-04-15  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Disable "Save to Downloads" option for local files
        https://bugs.webkit.org/show_bug.cgi?id=143794

        Reviewed by Tim Horton.

        Disable the Image and Media download options if the download
        target is a local file. We can only download web resources;
        anything else is actually a no-op.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForImage]):
        (-[WebActionMenuController _defaultMenuItemsForVideo]):

2015-04-15  Alex Christensen  <achristensen@webkit.org>

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

        Reviewed by Csaba Osztrogonác.

        * WebView/WebPDFDocumentExtras.mm:
        * WebView/WebPDFView.mm:

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] ChromeClient::exitVideoFullscreen() should take a pointer to a HTMLVideoElement.
        https://bugs.webkit.org/show_bug.cgi?id=143674

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::enterVideoFullscreenForVideoElement): Takes a reference.
        (WebChromeClient::exitVideoFullscreenForVideoElement): Renamed from exitVideoFullscreen().
        (WebChromeClient::exitVideoFullscreen): Deleted.

2015-04-14  Simon Fraser  <simon.fraser@apple.com>

        Re-enable custom dilation for antialiased fonts
        https://bugs.webkit.org/show_bug.cgi?id=143738

        Reviewed by Tim Horton.
        
        Enabling custom dilation for antialised fonts broke layout tests, so re-land it,
        but disable in WebKitTestRunner and DumpRenderTree. The latter requires adding
        a private WebKit pref. This pref defaults to YES, enabling the feature by default
        in WK1 as we do for WK2.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setAntialiasedFontDilationEnabled:]):
        (-[WebPreferences antialiasedFontDilationEnabled]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-04-13  Brady Eidson  <beidson@apple.com>

        Share sheets from Share menus appear outside the browser window.
        <rdar://problem/20455592> and https://bugs.webkit.org/show_bug.cgi?id=143620

        Reviewed by Darin Adler.

        Refactor existing Sharing Service Picker code to also be used for the Share menu NSMenuItem.

        * Misc/WebSharingServicePickerController.h:
        (WebSharingServicePickerClient::webView):
        * Misc/WebSharingServicePickerController.mm:
        (WebSharingServicePickerClient::WebSharingServicePickerClient):
        (WebSharingServicePickerClient::sharingServicePickerWillBeDestroyed):
        (WebSharingServicePickerClient::pageForSharingServicePicker):
        (WebSharingServicePickerClient::windowForSharingServicePicker):
        (WebSharingServicePickerClient::screenRectForCurrentSharingServicePickerItem):
        (WebSharingServicePickerClient::imageForCurrentSharingServicePickerItem):
        (-[WebSharingServicePickerController initWithItems:includeEditorServices:client:style:]):
        (-[WebSharingServicePickerController initWithSharingServicePicker:client:]):
        (-[WebSharingServicePickerController sharingService:didShareItems:]):

        * WebCoreSupport/WebContextMenuClient.h:
        (WebContextMenuClient::webView): Deleted.
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::WebContextMenuClient):
        (WebContextMenuClient::pageForSharingServicePicker): Deleted.
        (WebContextMenuClient::windowForSharingServicePicker): Deleted.

        * WebCoreSupport/WebSelectionServiceController.h:
        * WebCoreSupport/WebSelectionServiceController.mm:
        (WebSelectionServiceController::WebSelectionServiceController):
        (WebSelectionServiceController::handleSelectionServiceClick):
        (WebSelectionServiceController::pageForSharingServicePicker): Deleted.
        (WebSelectionServiceController::windowForSharingServicePicker): Deleted.
        (WebSelectionServiceController::screenRectForCurrentSharingServicePickerItem): Deleted.
        (WebSelectionServiceController::imageForCurrentSharingServicePickerItem): Deleted.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView menuForEvent:]):
        * WebView/WebViewData.h:

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

        Add force property to MouseEvents
        https://bugs.webkit.org/show_bug.cgi?id=143569
        -and corresponding-
        rdar://problem/20472954

        Reviewed by Darin Adler.

        PlatformMouseEvent and MouseEvent now take force parameters.
        * WebView/WebFrame.mm:
        (-[WebFrame _dragSourceEndedAt:operation:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2015-04-12  Darin Adler  <darin@apple.com>

        [Cocoa] Localizable strings are inconsistent and need to be regenerated
        https://bugs.webkit.org/show_bug.cgi?id=143661
        rdar://problem/19634388

        Reviewed by Dan Bernstein.

        * Misc/WebLocalizableStrings.mm:
        (LoadWebLocalizedStringsTimerCallback): Moved the comment, useful for programmers but
        not for localization, into a C++ source code comment, and made the localizer comment
        consistent with the place this localizable string is used for actual localization.
        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction): Changed the localizer comments for Delete and Dictation
        to match the ones in WebKit2; no need to specify that these are iOS only, and if we do
        want to specify that, we should not be using the term PLATFORM(IOS) since there is no
        reason for us to expect localizers to understand that terminology. Also added a comment
        about the fact that we have two copies of all the localizable strings.

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

        [ES6] Enable Symbol in web pages
        https://bugs.webkit.org/show_bug.cgi?id=143375

        Reviewed by Ryosuke Niwa.

        * WebView/WebPreferencesPrivate.h:

2015-04-08  Sam Weinig  <sam@webkit.org>

        Allow LaunchServices to handle URLs on link navigations
        <rdar://problem/19446826>
        https://bugs.webkit.org/show_bug.cgi?id=143544

        Reviewed by Anders Carlsson.

        * Configurations/WebKitLegacy.xcconfig:
        Link MobileCoreServices.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (shouldTryAppLink):
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebFrameLoaderClient::setUpPolicyListener):
        Only let LaunchServices have a crack at the URL if the navigation is:
            1) a main frame navigation
            2) a result of a user gesture

2015-04-10  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * Misc/WebNSURLExtras.mm: (-[NSString _webkit_unescapedQueryValue]): Ignore a deprecation.

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

        [Mac] Refactor MediaPlaybackTarget
        https://bugs.webkit.org/show_bug.cgi?id=143571

        Reviewed by Jer Noble.

        * WebView/WebMediaPlaybackTargetPicker.h:
        * WebView/WebMediaPlaybackTargetPicker.mm:
        (WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): Take a Ref<MediaPlaybackTarget>&&.

2015-04-09  Andy Estes  <aestes@apple.com>

        [Cocoa] Add a HAVE(AVKIT) and use it
        https://bugs.webkit.org/show_bug.cgi?id=143593

        Reviewed by David Kilzer.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Only set WebKitAVKitEnabled to YES if HAVE(AVKIT).
        (-[WebPreferences setAVKitEnabled:]): Only set value for WebKitAVKitEnabled if HAVE(AVKIT).
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Only called Settings::setAVKitEnabled() if HAVE(AVKIT).

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

        [WK2][iOS] editorState() should not cause a synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=142536
        <rdar://problem/20041506>

        Reviewed by Enrica Casucci.

        Provide implementation for EditorClient::didChangeSelectionAndUpdateLayout().

        * WebCoreSupport/WebEditorClient.h:

2015-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Mac] WebKit is not honoring OS preferences for secondary click behaviors
        https://bugs.webkit.org/show_bug.cgi?id=143452
        <rdar://problem/20437483>

        Reviewed by Tim Horton.

        We were improperly intercepting contextual menu clicks and passing them through
        the mouseDown handler, rather than processing via NSView's menu handling code.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView otherMouseDown:]): Treat context menu events the same as the action
        menu case, and pass it to AppKit for normal menu processing. 

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

        Expose the "Share" menu for links, images, and media.
        <rdar://problem/20435340> and https://bugs.webkit.org/show_bug.cgi?id=143502

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::shareMenuItem): 

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

        Move some ApplicationCache static member functions to ApplicationCacheStorage
        https://bugs.webkit.org/show_bug.cgi?id=143524

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache diskUsageForOrigin:]):
        (+[WebApplicationCache deleteAllApplicationCaches]):
        (+[WebApplicationCache deleteCacheForOrigin:]):

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

        Rename ActiveDOMObject::canSuspend() to canSuspendForPageCache() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=143513

        Reviewed by Andreas Kling.

        Update ScriptExecutionContext::canSuspendActiveDOMObjects() to
        canSuspendActiveDOMObjectsForPageCache() as the method was renamed.

        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):

2015-04-07  Anders Carlsson  <andersca@apple.com>

        Get rid of uses of ApplicationCacheStorage::singleton() from WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=143504

        Reviewed by Sam Weinig.

        Add a webApplicationCacheStorage() function and use it throughout WebKitLegacy.
        In the future, webApplicationCacheStorage will return a custom singleton, but for now
        it just returns ApplicationCacheStorage::singleton().

        * Misc/WebCache.mm:
        (+[WebCache empty]):
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache maximumSize]):
        (+[WebApplicationCache setMaximumSize:]):
        (+[WebApplicationCache defaultOriginQuota]):
        (+[WebApplicationCache setDefaultOriginQuota:]):
        (+[WebApplicationCache originsWithCache]):
        (webApplicationCacheStorage):
        * WebCoreSupport/WebApplicationCacheInternal.h: Added.
        * WebCoreSupport/WebApplicationCacheQuotaManager.mm:
        (-[WebApplicationCacheQuotaManager usage]):
        (-[WebApplicationCacheQuotaManager quota]):
        (-[WebApplicationCacheQuotaManager setQuota:]):
        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):

2015-04-07  Brady Eidson  <beidson@apple.com>

        ContextMenuItem refactoring
        https://bugs.webkit.org/show_bug.cgi?id=143485

        Reviewed by Beth Dakin.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuItemSelected):

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

        Bing video search result pages are not PageCacheable
        https://bugs.webkit.org/show_bug.cgi?id=143463
        <rdar://problem/20440916>

        Reviewed by Alexey Proskuryakov.

        Fix the iOS / WK1 build by using MemoryCache::resourceForRequest()
        instead of resourceForUrl().

        * Misc/WebCache.mm:
        (+[WebCache imageForURL:]):

2015-04-05  Simon Fraser  <simon.fraser@apple.com>

        Remove "go ahead and" from comments
        https://bugs.webkit.org/show_bug.cgi?id=143421

        Reviewed by Darin Adler, Benjamin Poulain.

        Remove the phrase "go ahead and" from comments where it doesn't add
        anything (which is almost all of them).

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView updateScrollers]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView insertText:]):

2015-04-02  Brady Eidson  <beidson@apple.com>

        Unreviewed: Reland change after rollout.

        Expose the "Share" menu for text selections on platforms where it's available.
        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

        * WebView/WebImmediateActionController.mm: Update for required #include

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

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

        Broke GTK and EFL builds. (Requested by bfulgham on #webkit).

        Reverted changeset:

        "Expose the "Share" menu for text selections on platforms
        where it's available."
        https://bugs.webkit.org/show_bug.cgi?id=143318
        http://trac.webkit.org/changeset/182293

2015-04-02  Brady Eidson  <beidson@apple.com>

        Expose the "Share" menu for text selections on platforms where it's available.
        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

        Reviewed by Sam Weinig.

        * WebView/WebImmediateActionController.mm: Update for required #include

2015-04-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up EnumerationMode to easily extend
        https://bugs.webkit.org/show_bug.cgi?id=143276

        Reviewed by Geoffrey Garen.

        Use default EnumerationMode().

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):

2015-03-31  Simon Fraser  <simon.fraser@apple.com>

        Remove scrolling tree dependency on wheel event handler counts, and use fast scrolling even when there are wheel handlers
        https://bugs.webkit.org/show_bug.cgi?id=143288

        Reviewed by Beth Dakin.

        Remove the wheel event counting that Document does, and passes into the scrolling tree.
        The ScrollingTree now just uses the non-fast scrollable region to determine when to
        fast scroll on pages with wheel event handlers.

        * WebCoreSupport/WebChromeClient.h:

2015-03-31  Timothy Horton  <timothy_horton@apple.com>

        TextIndicator for <span> inside an <a> only highlights the <span>, should highlight the whole <a>
        https://bugs.webkit.org/show_bug.cgi?id=143287
        <rdar://problem/20318342>

        Reviewed by Beth Dakin.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _defaultAnimationController]):
        Instead of just highlighting the hit element, highlight the whole
        element that the link URL comes from.

2015-03-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up Identifier factories to clarify the meaning of StringImpl*
        https://bugs.webkit.org/show_bug.cgi?id=143146

        Reviewed by Filip Pizlo.

        Just change to Identifier::fromString.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (identifierFromIdentifierRep):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::getPropertyNames):

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

        Remove an unused SPI method from WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=143185

        Reviewed by Sam Weinig.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _transferApplicationCache:]): Deleted.
        * WebView/WebDataSourcePrivate.h:

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

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

        Reviewed by Chris Dumez.

        * WebCoreSupport/WebFrameLoaderClient.h:

2015-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        Cursor doesn't change back to pointer when leaving Mail
        https://bugs.webkit.org/show_bug.cgi?id=132038

        Reviewed by Anders Carlsson.

        Fixed the bug by adding a cursor rect and making the primary tracking area update the cursor so that
        AppKit will reset the cursor as it leaves the WebView.

        We use nil cursor here since we manually update the cursor by calling [NSCursor set].

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView setDataSource:]): Use NSTrackingCursorUpdate option in creating the primary tracking area.

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

        Fix designated initializer violations
        https://bugs.webkit.org/show_bug.cgi?id=143016
        rdar://problem/20268858

        Reviewed by Dan Bernstein.

        Move -[WebBackForwardList initWithBackForwardList:] to the implementation instead of a category since
        nobody calls it outside of WebBackForwardList.mm.

        * History/WebBackForwardList.mm:
        * History/WebBackForwardListInternal.h:

2015-03-23  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (Yosemite): WKView visibility notifications are messed up
        https://bugs.webkit.org/show_bug.cgi?id=142945

        Reviewed by Tim Horton.

        As these notifications cannot be used by NSView subclasses, create a separate
        object for observing them.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        (-[WebView viewWillMoveToWindow:]): Make sure that observers are removed even
        if -[WebView close] is called manually.
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebWindowVisibilityObserver initWithView:]):
        (-[WebWindowVisibilityObserver startObserving:]):
        (-[WebWindowVisibilityObserver stopObserving:]):
        (-[WebWindowVisibilityObserver _windowVisibilityChanged:]):

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

        Add a share item to the link action menu
        https://bugs.webkit.org/show_bug.cgi?id=142961
        <rdar://problem/19198374>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForImage]):
        (-[WebActionMenuController _defaultMenuItemsForVideo]):
        (-[WebActionMenuController _createActionMenuItemForTag:]):
        (-[WebActionMenuController _createShareActionMenuItemForTag:withItems:]):
        Adopt -[NSMenuItem standardShareMenuItemWithItems].
        All of the null-checking is unnecessary as it's impossible to enter
        these functions with a null image/etc.
        Also, remove a duplicate isDownloadableMedia check for the 'save to downloads' item.

        (-[WebActionMenuController _defaultMenuItemsForLink]):
        * WebView/WebUIDelegatePrivate.h:
        Add a 'Share' item to the link menu.

2015-03-22  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * WebView/WebView.mm: (-[WebView _showPlaybackTargetPicker:hasVideo:]):

2015-03-22  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable WIRELESS_PLAYBACK_TARGET for WK1
        https://bugs.webkit.org/show_bug.cgi?id=142940

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::showPlaybackTargetPicker): New.
        (WebChromeClient::startingMonitoringPlaybackTargets): New.
        (WebChromeClient::stopMonitoringPlaybackTargets): New.

        * WebView/WebView.mm:
        (-[WebView _close]): Invalidate and free the target picker.
        (-[WebView _devicePicker]): New.
        (-[WebView _showPlaybackTargetPicker:hasVideo:]): New.
        (-[WebView _startingMonitoringPlaybackTargets]): New.
        (-[WebView _stopMonitoringPlaybackTargets]): New.

        * WebView/WebMediaPlaybackTargetPicker.h:
        * WebView/WebMediaPlaybackTargetPicker.mm:
        (WebMediaPlaybackTargetPicker::create): New.
        (WebMediaPlaybackTargetPicker::WebMediaPlaybackTargetPicker): New.
        (WebMediaPlaybackTargetPicker::showPlaybackTargetPicker): New.
        (WebMediaPlaybackTargetPicker::startingMonitoringPlaybackTargets): New.
        (WebMediaPlaybackTargetPicker::stopMonitoringPlaybackTargets): New.
        (WebMediaPlaybackTargetPicker::didChoosePlaybackTarget): New.
        (WebMediaPlaybackTargetPicker::externalOutputDeviceAvailableDidChange): New.
        (WebMediaPlaybackTargetPicker::invalidate): New.
        (WebMediaPlaybackTargetPicker::targetPicker): New.

        * WebView/WebViewData.h:
        (WebMediaPlaybackTargetPicker::~WebMediaPlaybackTargetPicker):
        * WebView/WebViewData.mm:
        * WebView/WebViewInternal.h:

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

        [Content Filtering] Add tests for unblock requests
        https://bugs.webkit.org/show_bug.cgi?id=142900

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad): This now happens in PolicyChecker.
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto.
        * WebView/WebFrame.mm:
        (-[WebFrame _contentFilterDidHandleNavigationAction:]): Deleted.
        * WebView/WebFrameInternal.h: Removed contentFilterUnblockHandler from WebFramePrivate.

2015-03-19  Enrica Casucci  <enrica@apple.com>

        <attachment> should put URLs on the pasteboard so that Finder can accept drops.
        https://bugs.webkit.org/show_bug.cgi?id=142801
        rdar://problem/19982527

        Reviewed by Tim Horton.

        This patch adds all the necessary support to write attachment elements into
        the pasteboard, including the promised type in WK1.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::declareAndWriteAttachment):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
        * WebView/WebUIDelegate.h:

2015-03-19  Chris Dumez  <cdumez@apple.com>

        Clean up DOMTimer related settings
        https://bugs.webkit.org/show_bug.cgi?id=142837

        Reviewed by Darin Adler.

        Stop setting the DOMTimers' default minimum interval to 4ms as this
        is now the default.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2015-03-17  Conrad Shultz  <conrad_shultz@apple.com>

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

        Reviewed by Mark Rowe.

        Fixing the deprecations is tracked by: <rdar://problem/20201450>

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::populate):

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

        Cannot invoke action menus anymore
        https://bugs.webkit.org/show_bug.cgi?id=142797
        <rdar://problem/20032670>

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView otherMouseDown:]):
        Need a respondsToSelector check.

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

        Fix the iOS build

        * WebView/WebHTMLView.mm:

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

        Cannot invoke action menus anymore
        https://bugs.webkit.org/show_bug.cgi?id=142797
        <rdar://problem/20032670>

        Reviewed by Beth Dakin.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView otherMouseDown:]):
        Don't override otherMouseDown: if the event would make an action menu.

2015-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Enable ES6 classes by default
        https://bugs.webkit.org/show_bug.cgi?id=142774

        Reviewed by Gavin Barraclough.

        * Configurations/FeatureDefines.xcconfig:

2015-03-16  Brent Fulgham  <bfulgham@apple.com>

        WebKit1 Clients Are Not Reliably Repainted
        https://bugs.webkit.org/show_bug.cgi?id=142750
        <rdar://problem/20042453>

        Reviewed by Simon Fraser.

        Check with the FrameView to see if we are in an immediately paintable state. If we are not,
        mark the view as dirty once the _immediateScrollToPoint operation is complete so that the
        region will be painted properly.

        * WebView/WebClipView.mm:
        (-[WebClipView _immediateScrollToPoint:]): 

2015-03-16  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them
        from the page). As part of this:

        1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying
           set of plug-ins.

        2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper
           down the stack.

        3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce
           a concrete implementation thereof in WebPlatformStrategies in WebKit2.

        4) Add messaging infrastructure to allow clients to set and clear plug-in policies.

        While currently only used in a very limited manner, the new declarative plug-in policies are written generically
        so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        Set new members in PluginInfo.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        Set new members in PluginInfo.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getWebVisiblePluginInfo):
        Override to wrap getPluginInfo().
        (WebPlatformStrategies::setPluginLoadClientPolicy):
        Override to do nothing.
        (WebPlatformStrategies::clearPluginClientPolicies):
        Ditto.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        Update to reflect function rename.

2015-03-14  Dean Jackson  <dino@apple.com>

        Feature flag for Animations Level 2
        https://bugs.webkit.org/show_bug.cgi?id=142699
        <rdar://problem/20165097>

        Reviewed by Brent Fulgham.

        Add ENABLE_CSS_ANIMATIONS_LEVEL_2 and a runtime flag animationTriggersEnabled.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Caused use-after-free on many tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "Allow clients to selectively disable plug-ins"
        https://bugs.webkit.org/show_bug.cgi?id=142506
        http://trac.webkit.org/changeset/181483

2015-03-13  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Enable WIRELESS_PLAYBACK_TARGET
        https://bugs.webkit.org/show_bug.cgi?id=142635

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2015-03-10  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        Add new functionality allow clients to declaratively disable individual plug-ins (in a manner that conceals them
        from the page). As part of this:

        1) Introduce the concept of web-visible plug-ins and related concepts, as distinct from the real underlying
           set of plug-ins.

        2) Where applicable, plumb additional information about plug-ins (specifically, bundle identification) deeper
           down the stack.

        3) Add generic functionality to PluginStrategy to support filtering plug-ins for visibility and introduce
           a concrete implementation thereof in WebPlatformStrategies in WebKit2.

        4) Add messaging infrastructure to allow clients to set and clear plug-in policies.

        While currently only used in a very limited manner, the new declarative plug-in policies are written generically
        so that they could be easily used in the future to reduce synchronous messaging to the client when loading plug-ins.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        Set new members in PluginInfo.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        Set new members in PluginInfo.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getWebVisiblePluginInfo):
        Override to wrap getPluginInfo().
        (WebPlatformStrategies::setPluginLoadClientPolicy):
        Override to do nothing.
        (WebPlatformStrategies::clearPluginClientPolicies):
        Ditto.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        Update to reflect function rename.

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

        Allow adding a button in input elements for auto fill related functionality
        <rdar://problem/19782066>
        https://bugs.webkit.org/show_bug.cgi?id=142564

        Reviewed by Anders Carlsson.

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setAutofilled:]):
        Update for consistent spelling of AutoFill.

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

        Fix the build

        * History/WebHistory.mm:
        (-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):

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

        Fix the Mac build with a newer compiler

        * Plugins/WebPluginController.mm:
        (WebKit_TSUpdateCheck_alertDidEnd_returnCode_contextInfo_):
        (WebKit_NSAlert_beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_):

2015-03-09  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build when compiling with dead code stripping disabled
        <http://webkit.org/b/142467>

        Reviewed by Simon Fraser.

        * Configurations/WebKitLegacy.xcconfig:
        (EXCLUDED_SOURCE_FILE_NAMES[sdk=iphone*]): Disable mig code
        generation and compilation for out-of-process plugin support.
        This was never used on iOS.

2015-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] SVG fonts are garbled
        https://bugs.webkit.org/show_bug.cgi?id=142377

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2015-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Hide Promise with runtime flags under Cocoa JSContext API
        https://bugs.webkit.org/show_bug.cgi?id=141965

        Reviewed by Filip Pizlo.

        Add new JSC runtime flag, PromiseDisabled.

        * WebView/WebPreferencesPrivate.h:

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

        [Content Filtering] Separate unblock handling into its own class
        https://bugs.webkit.org/show_bug.cgi?id=142251

        Reviewed by Andreas Kling.
        
        Adopted ContentFilterUnblockHandler.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        * WebView/WebFrame.mm:
        (-[WebFrame _contentFilterDidHandleNavigationAction:]):
        * WebView/WebFrameInternal.h:

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

        Access ApplicationCacheStorage global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=142239

        Reviewed by Anders Carlsson.

        Access ApplicationCacheStorage global instance via singleton() static
        member function as per WebKit coding style.

2015-03-02  Jer Noble  <jer.noble@apple.com>

        [WK1][WK2][Mac] Fullscreen animation is incorrect when page is scaled.
        https://bugs.webkit.org/show_bug.cgi?id=142121

        Reviewed by Simon Fraser.

        Fullscreening a page with a non-1 scale would result in that scale being applied to the
        fullscreen content, breaking fullscreen mode. Set the page scale to 1 when entering
        fullscreen and reset it to the original value when exiting fullscreen.

        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullScreen:]): Set the page scale to 1.
        (-[WebFullScreenController finishedExitFullScreenAnimation:]): Reset the page
                scale to the original value.
        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:withKeyboard:]): Drive-by fix. Check the
                WebView's own preferences to see if fullscreen mode is enabled, rather than
                the global object's.

2015-03-01  Chris Dumez  <cdumez@apple.com>

        Make NotificationCenter / Notification suspendable
        https://bugs.webkit.org/show_bug.cgi?id=142117
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Provide implementation for NotificationClient::hasPendingPermissionRequests().
        The implementation is very simplistic. it will only return false if no
        request for permission for ever made. This is because there is currently no
        easy way to figure out if a permission request is pending or not.

        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::requestPermission):
        (WebNotificationClient::hasPendingPermissionRequests):

2015-02-28  Simon Fraser  <simon.fraser@apple.com>

        Viewport units should not dirty style just before we do layout
        https://bugs.webkit.org/show_bug.cgi?id=141682

        Reviewed by Zalan Bujtas.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _frameSizeChanged]):

2015-02-26  Chris Dumez  <cdumez@apple.com>

        Rename DatabaseManager::manager() to DatabaseManager::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=142054

        Reviewed by Ryosuke Niwa.

        Rename DatabaseManager::manager() to DatabaseManager::singleton() as
        per coding style and use WTF::NeverDestroyed.

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager init]):
        (-[WebDatabaseManager origins]):
        (-[WebDatabaseManager databasesWithOrigin:]):
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]):
        (-[WebDatabaseManager deleteAllDatabases]):
        (-[WebDatabaseManager deleteOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        * Storage/WebDatabaseQuotaManager.mm:
        (-[WebDatabaseQuotaManager usage]):
        (-[WebDatabaseQuotaManager quota]):
        (-[WebDatabaseQuotaManager setQuota:]):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-02-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Parsing support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=141939

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Lots of new test failures (Requested by smfr on #webkit).

        Reverted changeset:

        "Parsing support for -webkit-trailing-word"
        https://bugs.webkit.org/show_bug.cgi?id=141939
        http://trac.webkit.org/changeset/180599

2015-02-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] [iOS] Parsing support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=141939

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2015-02-24  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Brent Fulgham.

        Introduce SymbolEnabled and drop javaScriptExperimentsEnabled.
        Private API, javaScriptExperimentsEnabled is dropped.

        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        (-[NSMutableDictionary _webkit_setUnsignedInt:forKey:]):
        * WebKit.order:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences _setUnsignedIntValue:forKey:]):
        (-[WebPreferences javaScriptRuntimeFlags]):
        (-[WebPreferences setJavaScriptRuntimeFlags:]):
        (-[WebPreferences setJavaScriptExperimentsEnabled:]): Deleted.
        (-[WebPreferences javaScriptExperimentsEnabled]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Unreviewed, rolling out r180547 and r180550.
        https://bugs.webkit.org/show_bug.cgi?id=141957

        Broke 10 Windows tests. (Requested by bfulgham_ on #webkit).

        Reverted changesets:

        "REGRESSION(r179429): Can't type comments in Facebook"
        https://bugs.webkit.org/show_bug.cgi?id=141859
        http://trac.webkit.org/changeset/180547

        "Constructor returning null should construct an object instead
        of null"
        https://bugs.webkit.org/show_bug.cgi?id=141640
        http://trac.webkit.org/changeset/180550

2015-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Disable font loading events until our implementation gets updated to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=141938

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2015-02-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Geoffrey Garen.

        Introduce SymbolEnabled and drop javaScriptExperimentsEnabled.
        Private API, javaScriptExperimentsEnabled is dropped.

        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        (-[NSMutableDictionary _webkit_setUnsignedInt:forKey:]):
        * WebKit.order:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences _setUnsignedIntValue:forKey:]):
        (-[WebPreferences javaScriptRuntimeFlags]):
        (-[WebPreferences setJavaScriptRuntimeFlags:]):
        (-[WebPreferences setJavaScriptExperimentsEnabled:]): Deleted.
        (-[WebPreferences javaScriptExperimentsEnabled]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-02-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] cleanup AirPlay code
        https://bugs.webkit.org/show_bug.cgi?id=141811

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig: IOS_AIRPLAY -> WIRELESS_PLAYBACK_TARGET.

2015-02-18  Timothy Horton  <timothy_horton@apple.com>

        Adopt WebCore::IOSurface in ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=141751

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Remove old WKSI IOSurface-related functions.

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

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

        Caused >50 crashed LayoutTests (Requested by jernoble on
        #webkit).

        Reverted changeset:

        "Page::userContentController() should return a reference, not
        a pointer"
        https://bugs.webkit.org/show_bug.cgi?id=141764
        http://trac.webkit.org/changeset/180286

2015-02-18  Brady Eidson  <beidson@apple.com>

        Page::userContentController() should return a reference, not a pointer
        https://bugs.webkit.org/show_bug.cgi?id=141764

        Reviewed by Jer Noble.

        * WebView/WebView.mm:
        (-[WebView setGroupName:]):

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

        Access FontCache global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141726

        Reviewed by Daniel Bates.

        Access FontCache global instance via singleton() static member function,
        as per coding style.

2015-02-17  Chris Dumez  <cdumez@apple.com>

        Access MemoryPressureHandler global instance via a singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141691

        Reviewed by Andreas Kling.

        Access MemoryPressureHandler global instance via a singleton() static
        member function.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (+[WebView registerForMemoryNotifications]):
        (+[WebView _isUnderMemoryPressure]):
        (+[WebView _clearMemoryPressure]):
        (+[WebView _shouldWaitForMemoryClearMessage]):
        (WebInstallMemoryPressureHandler):

2015-02-15  Sam Weinig  <sam@webkit.org>

        Add experimental <attachment> element support
        https://bugs.webkit.org/show_bug.cgi?id=141626

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2015-02-14  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Possible DDActionContext leaks, RetainPtr cleanup
        https://bugs.webkit.org/show_bug.cgi?id=141613

        Reviewed by Tim Horton.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient):
        Avoid unnecessary retain/autorelease by adopting.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForDataDetectableLink]):
        Adopt the allocated object.

2015-02-09  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove some unnecessary Inspector prefixes from class names in Inspector namespace
        https://bugs.webkit.org/show_bug.cgi?id=141372

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView:]):

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

        rel="noreferrer" should make window.opener null
        https://bugs.webkit.org/show_bug.cgi?id=141579

        Reviewed by Darin Adler.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Updated for a new WebCore
        function signature. There is no rel="noreferrer" in PDF, so we can just always allow.

2015-02-05  Youenn Fablet  <youenn.fablet@crf.canon.fr> and Xabier Rodriguez Calvar <calvaris@igalia.com>

        [Streams API] Implement a barebone ReadableStream interface
        https://bugs.webkit.org/show_bug.cgi?id=141045

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2015-02-03  Enrica Casucci  <enrica@apple.com>

        [iOS] Add support for deleteFromInputWithFlags.
        https://bugs.webkit.org/show_bug.cgi?id=141216
        rdar://problem/19130081

        Reviewed by Benjamin Poulain.

        Adopts the new method as soon as it is available.
        The patch also removes some obsolete code used for staging.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _handleEditingKeyEvent:]):

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

        Access MemoryCache singleton using MemoryCache::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=141104

        Reviewed by Andreas Kling.

        Access MemoryCache singleton using MemoryCache::singleton() static
        member function, instead of a free function, as per the recent
        coding style discussion on WebKit-dev.

2015-02-01  Chris Dumez  <cdumez@apple.com>

        Use more references in HistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=141133

        Reviewed by Andreas Kling.

        Use more references in HistoryItem instead of pointers.

2015-01-31  Sam Weinig  <sam@webkit.org>

        Remove even more Mountain Lion support
        https://bugs.webkit.org/show_bug.cgi?id=141124

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitLegacy.xcconfig:

2015-01-30  Eric Carlson  <eric.carlson@apple.com>

        Remove MediaPlayerProxy.h
        https://bugs.webkit.org/show_bug.cgi?id=141087

        Reviewed by Sam Weinig.

        * MigrateHeaders.make: Don't need to copy MediaPlayerProxy.h.
        * Plugins/WebPluginController.mm: Don't include MediaPlayerProxy.h.

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Rename shared() static member functions to singleton() for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=141088

        Reviewed by Ryosuke Niwa and Benjamin Poulain.

        Rename shared() static member functions to singleton() for singleton
        classes as per the recent coding style change.

2015-01-29  Beth Dakin  <bdakin@apple.com>

        Remove more Mountain Lion code from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=141050

        Reviewed by Anders Carlsson.

        * History/WebHistory.mm:
        (getDayBoundaries):
        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel cancel:]):
        (-[WebAuthenticationPanel logIn:]):
        (-[WebAuthenticationPanel runAsSheetOnWindow:withChallenge:]):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebFrameView.mm:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (needsScreenFontsEnabledQuirk):
        * WebView/WebView.mm:
        (+[WebView registerForMemoryNotifications]):
        (-[WebView _preferencesChanged:]):
        (+[WebView initialize]):
        (+[WebView _shouldAutomaticQuoteSubstitutionBeEnabled]):
        (+[WebView _shouldAutomaticDashSubstitutionBeEnabled]):
        (+[WebView _didChangeAutomaticDashSubstitutionEnabled:]):

2015-01-29  Sam Weinig  <sam@webkit.org>

        Remove support for screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=141038

        Reviewed by Tim Horton.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):
        * Misc/WebStringTruncator.mm:
        (fontFromNSFont):
        Update for new signature of the FontPlatformData constructor, which no longer cares about
        whether to use printer fonts.

        * WebView/WebPreferenceKeysPrivate.h:
        Remove the WebKitScreenFontSubstitutionEnabledKey key.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        Remove support for WebKitScreenFontSubstitutionEnabledKey.

        (needsScreenFontsEnabledQuirk): Deleted.
        Remove support for the Mountain Lion era 1-Password quirk.

        (-[WebPreferences screenFontSubstitutionEnabled]): Deleted.
        (-[WebPreferences setScreenFontSubstitutionEnabled:]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (-[WebView _preferencesChanged:]):
        Remove support for the screen font substitution setting.

2015-01-29  Chris Dumez  <cdumez@apple.com>

        Clean up / modernize PageCache class
        https://bugs.webkit.org/show_bug.cgi?id=141009

        Reviewed by Darin Adler.

        Clean up / modernize PageCache class.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList pageCacheSize]):
        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):
        (-[WebView goToBackForwardItem:]):
        (+[WebView _setCacheModel:]):

2015-01-28  Beth Dakin  <bdakin@apple.com>

        Remove Mountain Lion code from WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=141010

        Reviewed by Sam Weinig.

        * DOM/WebDOMOperations.mm:
        (toNSEventPhase):
        * WebView/WebHTMLView.mm:
        (isQuickLookEvent):

2015-01-28  Dana Burkart  <dburkart@apple.com>

        Move ASan flag settings from DebugRelease.xcconfig to Base.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=136765

        Reviewed by Alexey Proskuryakov.

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

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

        Fix typo in markPagesForVistedLinkStyleRecalc()
        https://bugs.webkit.org/show_bug.cgi?id=140977

        Reviewed by Darin Adler.

        * WebCoreSupport/WebVisitedLinkStore.mm:
        (WebVisitedLinkStore::removeAllVisitedLinks):
        (WebVisitedLinkStore::removeVisitedLink):
        (WebVisitedLinkStore::addVisitedLinkHash):

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

        Rename pageCache() to PageCache::shared() and return a reference
        https://bugs.webkit.org/show_bug.cgi?id=140983

        Reviewed by Andreas Kling.

        Rename pageCache() to PageCache::shared() as this is a singleton class
        and have it return a reference instead of a pointer.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList pageCacheSize]):
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics cachedPageCount]):
        (+[WebCoreStatistics cachedFrameCount]):
        * WebCoreSupport/WebVisitedLinkStore.mm:
        (WebVisitedLinkStore::removeAllVisitedLinks):
        (WebVisitedLinkStore::removeVisitedLink):
        (WebVisitedLinkStore::addVisitedLinkHash):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2015-01-27  Alexey Proskuryakov  <ap@apple.com>

        More build fixes for newer clang.

        Rubber-stamped by Anders Carlsson.

        Marked a deprecated accessibility method as such.

        * WebView/WebFrame.mm:
        (-[WebFrame accessibilityRoot]):

2015-01-27  Beth Dakin  <bdakin@apple.com>

        Immediate action gesture recognizer still doesn't work well with IB
        https://bugs.webkit.org/show_bug.cgi?id=140967
        -and corresponding-
        rdar://problem/19621509

        Reviewed by Tim Horton.

        We should add (or remove) the gesture recognizer in viewDidMoveToWindow because 
        initWithFrame it too early and IB might mess with it.
        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController immediateActionRecognizer]):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView viewDidMoveToWindow]):

2015-01-27  Dan Bernstein  <mitz@apple.com>

        Fixed building projects that import WebView.h with WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS.

        Rubber-stamped by Anders Carlsson.

        * WebView/WebView.h: Added forward declarations of the protocols.

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

        Make it easy to test enabling formal delegate protocols
        https://bugs.webkit.org/show_bug.cgi?id=140892

        Reviewed by Dan Bernstein.

        Add an WK_ENABLE_FORMAL_DELEGATE_PROTOCOLS define that controls whether delegates should be formal protocols.

        * Misc/WebDownload.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebPolicyDelegate.h:
        * WebView/WebResourceLoadDelegate.h:
        * WebView/WebUIDelegate.h:
        * WebView/WebView.h:

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Rename Document::body() to Document::bodyOrFrameset() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=140902

        Reviewed by Andreas Kling.

        Rename Document::body() to Document::bodyOrFrameset() for clarity. This
        method does not necessarily return an HTMLBodyElement, it can also
        return a frameset as per the specification:
        http://www.w3.org/TR/html5/dom.html#dom-tree-accessors

        This method is often misused internally (the caller is only interested
        in the <body> element). I will fix these instances in a follow-up patch,
        this patch is only renaming mechanically.

2015-01-26  Chris Dumez  <cdumez@apple.com>

        First argument to DOM traversal functions should be a reference
        https://bugs.webkit.org/show_bug.cgi?id=140895

        Reviewed by Antti Koivisto.

        First argument to DOM traversal functions should be a reference instead
        of a pointer as it is dereferenced without null-check.

2015-01-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] [SVG -> OTF Converter] Flip the switch off on iOS
        https://bugs.webkit.org/show_bug.cgi?id=140860

        Reviewed by Darin Adler.

        The fonts it makes are grotesque. (See what I did there? Typographic
        humor is the best humor.)

        * Configurations/FeatureDefines.xcconfig:

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

        QLPreviewMenuItem popovers don't close when the page scrolls
        https://bugs.webkit.org/show_bug.cgi?id=140806
        <rdar://problem/19555618>

        Reviewed by Beth Dakin.

        Now that QLPreviewMenuItem's popover doesn't eat scrolls, we need to dismiss it if the page scrolls.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView scrollWheel:scrollWheel:]):
        Send scrollWheel along to WebImmediateActionController.

        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController webView:didHandleScrollWheel:]):
        (-[WebImmediateActionController _clearImmediateActionState]):
        (-[WebImmediateActionController _defaultAnimationController]):
        Keep track of the active QLPreviewMenuItem, and close it upon scroll.

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

        Infinite recursion in _clearImmediateActionState
        https://bugs.webkit.org/show_bug.cgi?id=140807
        <rdar://problem/19571601>

        Reviewed by Anders Carlsson.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _clearImmediateActionState]):
        Use this opportunity to bring identical code to WebKit1, to avoid
        getting DataDetectors stuck when an immediate action is canceled.

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

        Add a build flag for ES6 class syntax
        https://bugs.webkit.org/show_bug.cgi?id=140760

        Reviewed by Michael Saboff.

        * Configurations/FeatureDefines.xcconfig:

2015-01-22  Beth Dakin  <bdakin@apple.com>

        ibtoold crash below -[WebView close]
        https://bugs.webkit.org/show_bug.cgi?id=140782
        -and corresponding-
        rdar://problem/19558472

        Reviewed by Tim Horton.

        Retain the NSImmediateActionGestureRecognizer. This should not be necessary, but 
        it is because interface builder is messing with our views.
        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController webViewClosed]):
        (-[WebImmediateActionController _cancelImmediateAction]):
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController _updateImmediateActionItem]):

2015-01-21  Beth Dakin  <bdakin@apple.com>

        Crash in QuickLook preview delegate method
        https://bugs.webkit.org/show_bug.cgi?id=140740
        -and corresponding-
        rdar://problem/19540806

        Reviewed by Tim Horton.

        Clear out the delegate.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController webViewClosed]):

2015-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(INSPECTOR) ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=140668

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchWillSendRequest):

2015-01-20  Anders Carlsson  <andersca@apple.com>

        Remove USE(GLIB) code from WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=140714

        Reviewed by Andreas Kling.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _close]):
        (-[WebView _clearGlibLoopObserver]): Deleted.
        (glibContextIterationCallback): Deleted.
        (-[WebView _scheduleGlibContextIterations]): Deleted.
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2015-01-20  David Kilzer  <ddkilzer@apple.com>

        Switch to comparing PLATFORM_NAME in terms of macosx
        <http://webkit.org/b/139516>

        Reviewed by Timothy Hatcher.

        * MigrateHeaders.make:
        * postprocess-headers.sh:

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Flip the switch on
        https://bugs.webkit.org/show_bug.cgi?id=140592

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-19  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2015-01-19  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * WebView/WebView.mm:
        (-[WebView _convertRectFromRootView:]):

2015-01-19  Timothy Horton  <timothy_horton@apple.com>

        Adjust naming of action menu SPI
        https://bugs.webkit.org/show_bug.cgi?id=140644
        <rdar://problem/19448129>

        Reviewed by Brian Weinstein.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController willOpenMenu:withEvent:]):
        (-[WebActionMenuController didCloseMenu:withEvent:]):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView prepareForMenu:withEvent:]):
        (-[WebView willOpenMenu:withEvent:]):
        (-[WebView didCloseMenu:withEvent:]):

2015-01-19  Beth Dakin  <bdakin@apple.com>

        REGRESSION (r178290): Yellow highlight from context menu Lookup in Dictionary is 
        offset by flipped-ness
        https://bugs.webkit.org/show_bug.cgi?id=140643
        -and corresponding-
        rdar://problem/19489593

        Reviewed by Tim Horton.

        We universally flipped because we assumed that the root view was flipped and the 
        WebView was not. However, in Dictionary, the WebView is flipped! So this patch 
        fixes that assumption by checking the WebView’s flipped-ness.
        * WebView/WebView.mm:
        (-[WebView _convertRectFromRootView:]):

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

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

        Broke multiple SVG tests on Mountain Lion (Requested by ap on
        #webkit).

        Reverted changeset:

        "[SVG -> OTF Converter] Flip the switch on"
        https://bugs.webkit.org/show_bug.cgi?id=140592
        http://trac.webkit.org/changeset/178653

2015-01-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [SVG -> OTF Converter] Flip the switch on
        https://bugs.webkit.org/show_bug.cgi?id=140592

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

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

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/178631>
        (https://bugs.webkit.org/show_bug.cgi?id=129441)

        Pass lvalue reference to WebCore::Highlight instead of pointer in call to InspectorController::getHighlight().
        Also substitute HighlightType::Node and HighlightType::Rects for HighlightTypeNode and HighlightTypeRects, respectively.

        * WebInspector/WebNodeHighlightView.mm:
        (-[WebNodeHighlightView layoutSublayers:]):

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

        Make sure early cancellation of immediate action actually does that in WK1
        https://bugs.webkit.org/show_bug.cgi?id=140566
        -and corresponding-
        rdar://problem/19490114

        Reviewed by Tim Horton.

        Work around an AppKit bug by dispatching the call to _cancelImmediateAction 
        asynchronously.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):

2015-01-16  Daniel Bates  <dabates@apple.com>

        Fix the public iOS SDK build after <http://trac.webkit.org/changeset/178285>
        (https://bugs.webkit.org/show_bug.cgi?id=140360)

        Forward declare protocol NSURLDownloadDelegate as it is SPI on iOS.

        * Misc/WebDownload.h:

2015-01-15  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:
        * Storage/WebDatabaseManager.mm:
        (databasesDirectoryPath):
        * Storage/WebDatabaseManagerClient.h:
        * Storage/WebDatabaseManagerClient.mm:
        * Storage/WebDatabaseManagerInternal.h:
        * Storage/WebDatabaseManagerPrivate.h:
        * Storage/WebDatabaseQuotaManager.mm:
        (-[WebDatabaseQuotaManager usage]):
        (-[WebDatabaseQuotaManager quota]):
        (-[WebDatabaseQuotaManager setQuota:]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _preferencesChanged:]):

2015-01-14  Chris Dumez  <cdumez@apple.com>

        Make 'TypeName' parameter unnecessary in CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=140347

        Reviewed by Darin Adler.

        Call FontDescription::setIsItalic() instead of setItalic() as the
        call site passes a boolean.

        * WebView/WebHTMLView.mm:
        (fontNameForDescription):

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

        Temporarily reintroduce the informal delegate protocols
        https://bugs.webkit.org/show_bug.cgi?id=140416

        Reviewed by Dan Bernstein.

        * WebView/WebEditingDelegate.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebPolicyDelegate.h:
        * WebView/WebResourceLoadDelegate.h:
        * WebView/WebUIDelegate.h:

2015-01-13  Beth Dakin  <bdakin@apple.com>

        Should disable immediate actions for iTunes
        https://bugs.webkit.org/show_bug.cgi?id=140405
        -and corresponding-
        rdar://problem/19461358

        Reviewed by Tim Horton.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _updateImmediateActionItem]):

2015-01-11  Sam Weinig  <sam@webkit.org>

        Remove support for SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=140344

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createSharedWorkerStrategy): Deleted.

2015-01-12  Timothy Horton  <timothy_horton@apple.com>

        Get rid of unnecessary reimplementations of CGFloor/Ceiling
        https://bugs.webkit.org/show_bug.cgi?id=140375

        Reviewed by Simon Fraser.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (webkit_CGCeiling): Deleted.
        Delete unnecessary code, use the real CGFloor/Ceiling instead.

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

        Make delegates conform to formal delegate protocols
        https://bugs.webkit.org/show_bug.cgi?id=140370

        Reviewed by Dan Bernstein.

        * DefaultDelegates/WebDefaultPolicyDelegate.h:
        * WebCoreSupport/WebInspectorClient.mm:
        Add protocols to the interface declarations.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController _defaultMenuItemsForDataDetectedText]):
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _updateImmediateActionItem]):
        (-[WebImmediateActionController _menuItemForDataDetectedText]):
        Cast to id when trying to invoke delegate methods that aren't on WebUIDelegate.

2015-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow targetting the SVG->OTF font converter with ENABLE(SVG_OTF_CONVERTER)
        https://bugs.webkit.org/show_bug.cgi?id=136769

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:

2015-01-12  Timothy Horton  <timothy_horton@apple.com>

        Multi-rect TextIndicators are vertically flipped in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=140350
        <rdar://problem/19441243>

        Reviewed by Beth Dakin.

        * WebView/WebView.mm:
        (-[WebView _setTextIndicator:fadeOut:]):
        Convert the textBoundingRect from root view to screen coordinates.

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

        Make WebResourceDelegate a formal protocol as well
        https://bugs.webkit.org/show_bug.cgi?id=140364

        Reviewed by Dan Bernstein.

        * WebView/WebResourceLoadDelegate.h:

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

        Delegates should be formal protocols
        https://bugs.webkit.org/show_bug.cgi?id=140360
        rdar://problem/17380856

        Reviewed by Dan Bernstein.

        This is the first half of this change. The second half involves actually changing the delegate properties to be protocols.

        * DefaultDelegates/WebDefaultUIDelegate.h:
        * Misc/WebDownload.h:
        * WebView/WebEditingDelegate.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebPolicyDelegate.h:
        * WebView/WebUIDelegate.h:

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

        Get rid of the database strategy
        https://bugs.webkit.org/show_bug.cgi?id=140322

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createDatabaseStrategy): Deleted.

2015-01-08  Timothy Horton  <timothy_horton@apple.com>

        Can't use DataDetectors after immediate action preparation
        https://bugs.webkit.org/show_bug.cgi?id=140263
        <rdar://problem/19412705>

        Reviewed by Beth Dakin.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        To match WebKit2, only call shouldUseActions if the animation is actually
        going to begin, not when preparing for it. This way, we're guaranteed
        to get a didCancel or didComplete.

2015-01-08  Dean Jackson  <dino@apple.com>

        Text not drawn or white-on-white for "Close Page"/"Go Back" button on safe browsing warning page
        https://bugs.webkit.org/show_bug.cgi?id=140232
        <rdar://problem/19371010>

        Reviewed by Anders Carlsson.

        Remove the applicationChromeMode setting, but leave stubs in to make
        sure existing binaries don't break.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences applicationChromeModeEnabled]):
        (-[WebPreferences setApplicationChromeModeEnabled:]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2015-01-07  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        Use SPI wrapper headers instead of directly references private SPI headers.

        * Plugins/Hosted/NetscapePluginHostManager.mm:

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

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

        Breaks the iOS build (Requested by enrica on #webkit).

        Reverted changeset:

        "[iOS] Make WebKit2 build with public iOS SDK and more build
        fixes for DRT"
        https://bugs.webkit.org/show_bug.cgi?id=137371
        http://trac.webkit.org/changeset/178068

2015-01-07  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit2 build with public iOS SDK and more build fixes for DRT
        https://bugs.webkit.org/show_bug.cgi?id=137371

        Reviewed by David Kilzer.

        Use SPI wrapper headers instead of directly references private SPI headers.

        * Plugins/Hosted/NetscapePluginHostManager.mm:

2015-01-07  Beth Dakin  <bdakin@apple.com>

        Adopt delegate callbacks so that standardQuickLookMenuItem does not obscure the 
        link
        https://bugs.webkit.org/show_bug.cgi?id=140206
        -and corresponding-
        rdar://problem/19300492

        Reviewed by Tim Horton.

        Providing and item frame will ensure that the original link is not obscured.
        * WebView/WebImmediateActionController.mm:
        (elementBoundingBoxInWindowCoordinatesFromNode):
        (-[WebImmediateActionController menuItem:itemFrameForPoint:]):

        For now use a max size that is smaller than the WebView, with the screen’s aspect 
        ratio, and scaled down.
        (-[WebImmediateActionController menuItem:maxSizeForPoint:]):

2015-01-07  Anders Carlsson  <andersca@apple.com>

        Give simple HTML documents a database provider
        https://bugs.webkit.org/show_bug.cgi?id=140192
        rdar://problem/19398825

        Reviewed by Tim Horton.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

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

        Reimplement NPN_PluginThreadAsyncCall without using PluginMainThreadScheduler
        https://bugs.webkit.org/show_bug.cgi?id=140140

        Reviewed by Andreas Kling.

        Just use a dispatch_async call to the main queue. This will let us move PluginMainThreadScheduler
        out of WebCore since nobody else is using it.

        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _createPlugin]):
        (-[WebNetscapePluginView _destroyPlugin]):
        * Plugins/npapi.mm:
        (NPN_PluginThreadAsyncCall):

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

        Add a WebKit1 database provider
        https://bugs.webkit.org/show_bug.cgi?id=140126

        Reviewed by Sam Weinig.

        Set the database provider.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

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

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

        Caused lots of crashes (Requested by smfr on #webkit).

        Reverted changeset:

        "Add a WebKit1 database provider"
        https://bugs.webkit.org/show_bug.cgi?id=140126
        http://trac.webkit.org/changeset/177963

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

        Add a WebKit1 database provider
        https://bugs.webkit.org/show_bug.cgi?id=140126

        Reviewed by Sam Weinig.

        Set the database provider.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2015-01-01  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2015
        https://bugs.webkit.org/show_bug.cgi?id=139880

        Reviewed by Darin Adler.

        * Info.plist:

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

        [Cocoa] Enable the compiler to check format strings specified with UI_STRING and UI_STRING_KEY
        https://bugs.webkit.org/show_bug.cgi?id=140003

        Reviewed by Darin Adler.

        * Misc/WebLocalizableStrings.h: Made UI_STRING and UI_STRING_KEY call a new helper function
        that takes their "string" parameter as a "value" "parameter and has an attribute telling
        the compiler that if the "value" parameter is a format string then the function returns a
        modified version of it. The result is that if UI_STRING is used as a format string parameter
        to some function or method, the compiler will check the format specifiers in the string
        against the other parameters.

2014-12-29  Dan Bernstein  <mitz@apple.com>

        Fixed the iOS build.

        * Configurations/WebKitLegacy.xcconfig:

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Get rid of some PageGroup storage functions
        https://bugs.webkit.org/show_bug.cgi?id=139996

        Reviewed by Sam Weinig.

        Call WebStorageNamespaceProvider directly instead.

        * Storage/WebStorageManager.mm:
        (-[WebStorageManager syncLocalStorage]):
        (+[WebStorageManager closeIdleLocalStorageDatabases]):
        * WebView/WebView.mm:
        (+[WebView _applicationWillTerminate]):

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Move storage code from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139558

        Reviewed by Darin Adler.

        * Storage/WebStorageManager.mm:
        * Storage/WebStorageTrackerClient.h:
        * WebView/WebView.mm:

2014-12-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19348208> REGRESSION (r177027): iOS builds use the wrong toolchain
        https://bugs.webkit.org/show_bug.cgi?id=139950

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig: Only define TOOLCHAINS when building for OS X, doing so
        in a manner that works with Xcode 5.1.1.

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

        Install a TextIndicator for link immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139897
        <rdar://problem/19333076>

        Reviewed by Anders Carlsson.

        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _clearImmediateActionState]):
        Tear down the TextIndicator, just like WebKit2.

        (-[WebImmediateActionController _defaultAnimationController]):
        Install a TextIndicator for links.

        (-[WebImmediateActionController menuItemDidClose:]):
        Tear down the TextIndicator when the QL preview closes.

        (-[WebImmediateActionController _menuItemForDataDetectedText]):
        Directly install and uninstall the TextIndicator for DataDetectors.

        (-[WebImmediateActionController _showTextIndicator]): Deleted.
        (-[WebImmediateActionController _hideTextIndicator]): Deleted.
        Remove the isShowingTextIndicator mechanism, just like it was removed from WebKit2.

2014-12-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] add optimized fullscreen API
        https://bugs.webkit.org/show_bug.cgi?id=139833
        <rdar://problem/18844486>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:  Add ENABLE_VIDEO_PRESENTATION_MODE.

2014-12-20  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in WebCore, WebInspectorUI, WebKit, WebKit2
        <http://webkit.org/b/139463>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:
        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
          on OS X.
        - Set GCC_OPTIMIZATION_LEVEL_normal based on SDK.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
        - Set WEBKIT_SYSTEM_INTERFACE_LIBRARY based on SDK.
        * Configurations/Version.xcconfig:
        - Set SYSTEM_VERSION_PREFIX separately for iOS and OS X.
        * Configurations/WebKitLegacy.xcconfig:
        - Set EXCLUDED_SOURCE_FILE_NAMES, EXPORTED_SYMBOLS_FILE_x86_64,
          FRAMEWORK_SEARCH_PATHS, OTHER_CFLAGS, INSTALL_PATH,
          DYLIB_INSTALL_NAME_BASE, OTHER_LDFLAGS, SECTORDER_FLAGS,
          NORMAL_WEBKIT_LEGACY_FRAMEWORKS_DIR,
          WEBKIT_LEGACY_FRAMEWORKS_DIR, NORMAL_PRODUCTION_FRAMEWORKS_DIR,
          PRODUCTION_FRAMEWORKS_DIR, PRODUCTION_ROOT,
          WEBCORE_PRIVATE_HEADERS_DIR_Production and
          WEBKITSYSTEMINTERFACE_STATIC_LIBRARY_HEADERS_FOLDER_PATH_engineering
          based on SDK.
        - Fix PRODUCTION_ROOT to actually be set properly.
        - Simplify EXPORTED_SYMBOLS_FILE_i386.

        * migrate-headers.sh:
        - Get rid of unused WEBKIT2_FRAMEWORKS_DIR variable.
        - Change WEBCORE_PRIVATE_HEADERS_DIR_macosx_Production to
          WEBCORE_PRIVATE_HEADERS_DIR_Production based on changes to
          WebKitLegacy.xcconfig.

2014-12-19  Simon Fraser  <simon.fraser@apple.com>

        Fix pink background on CoreAnimation plug-ins in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=139845
        rdar://problem/19313075

        Reviewed by Tim Horton.
        
        r154078 left in some debugging code that set a pink background on plug-in hosting
        layers. Remove it.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPluginLayer]):

2014-12-19  Andreas Kling  <akling@apple.com>

        Ref-ify TextIterator API.
        <https://webkit.org/b/139823>

        Reviewed by Antti Koivisto.

        * WebView/WebTextIterator.mm:
        (-[WebTextIterator currentRange]):

2014-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CRASH inspector-protocol/debugger/breakpoint-action-detach.html
        https://bugs.webkit.org/show_bug.cgi?id=139797

        Reviewed by Mark Lam.

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::handlePause):
        Standardize on passing JSGlobalObject parameter first.

2014-12-19  Commit Queue  <commit-queue@webkit.org>

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

        "Broke Production builds by installing
        libWebCoreTestSupport.dylib in the wrong directory" (Requested
        by ddkilzer on #webkit).

        Reverted changeset:

        "Switch from using PLATFORM_NAME to SDK selectors in WebCore,
        WebInspectorUI, WebKit, WebKit2"
        https://bugs.webkit.org/show_bug.cgi?id=139463
        http://trac.webkit.org/changeset/177574

2014-12-19  David Kilzer  <ddkilzer@apple.com>

        Switch from using PLATFORM_NAME to SDK selectors in WebCore, WebInspectorUI, WebKit, WebKit2
        <http://webkit.org/b/139463>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:
        - Only set GCC_ENABLE_OBJC_GC, GCC_MODEL_TUNING and TOOLCHAINS
          on OS X.
        - Set GCC_OPTIMIZATION_LEVEL_normal based on SDK.
        * Configurations/DebugRelease.xcconfig:
        - Only set MACOSX_DEPLOYMENT_TARGET and SDKROOT on OS X.
        - Set WEBKIT_SYSTEM_INTERFACE_LIBRARY based on SDK.
        * Configurations/Version.xcconfig:
        - Set SYSTEM_VERSION_PREFIX separately for iOS and OS X.
        * Configurations/WebKitLegacy.xcconfig:
        - Set EXCLUDED_SOURCE_FILE_NAMES, EXPORTED_SYMBOLS_FILE_x86_64,
          FRAMEWORK_SEARCH_PATHS, OTHER_CFLAGS, INSTALL_PATH,
          DYLIB_INSTALL_NAME_BASE, OTHER_LDFLAGS, SECTORDER_FLAGS,
          NORMAL_WEBKIT_LEGACY_FRAMEWORKS_DIR,
          WEBKIT_LEGACY_FRAMEWORKS_DIR, NORMAL_PRODUCTION_FRAMEWORKS_DIR,
          PRODUCTION_FRAMEWORKS_DIR, PRODUCTION_ROOT,
          WEBCORE_PRIVATE_HEADERS_DIR_Production and
          WEBKITSYSTEMINTERFACE_STATIC_LIBRARY_HEADERS_FOLDER_PATH_engineering
          based on SDK.
        - Fix PRODUCTION_ROOT to actually be set properly.
        - Simplify EXPORTED_SYMBOLS_FILE_i386.

        * migrate-headers.sh:
        - Get rid of unused WEBKIT2_FRAMEWORKS_DIR variable.
        - Change WEBCORE_PRIVATE_HEADERS_DIR_macosx_Production to
          WEBCORE_PRIVATE_HEADERS_DIR_Production based on changes to
          WebKitLegacy.xcconfig.

2014-12-18  Andreas Kling  <akling@apple.com>

        Ref-ify various Document-related things.
        <https://webkit.org/b/139796>

        Reviewed by Anders Carlsson.

        * WebView/WebFrame.mm:
        (-[WebFrame _replaceSelectionWithNode:selectReplacement:smartReplace:matchStyle:]):

2014-12-18  Beth Dakin  <bdakin@apple.com>

        Need to re-enable action menus
        https://bugs.webkit.org/show_bug.cgi?id=139795
        -and corresponding-
        rdar://problem/19299367

        Reviewed by Tim Horton.

        Re-enable the menus by un-commenting the code to create the menu and controller.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2014-12-16  Sam Weinig  <sam@webkit.org>

        Unify the Mac and iOS implementations of FontPlatformData a bit
        https://bugs.webkit.org/show_bug.cgi?id=139721

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLView.mm:
        (fontNameForDescription):
        Update for new function name.

2014-12-18  Antti Koivisto  <antti@apple.com>

        Remove alwaysUseBaselineOfPrimaryFont setting
        https://bugs.webkit.org/show_bug.cgi?id=139770

        Reviewed by Anders Carlsson.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences _setAlwaysUseBaselineOfPrimaryFont:]): Deleted.
        (-[WebPreferences _alwaysUseBaselineOfPrimaryFont]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (-[WebView _preferencesChanged:]):

2014-12-17  Andreas Kling  <akling@apple.com>

        Ref-ify Range::create().
        <https://webkit.org/b/139755>

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedString]):

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Unify -[WebResource description]
        https://bugs.webkit.org/show_bug.cgi?id=139762

        Reviewed by Dan Bernstein.

        * WebView/WebResource.mm:
        (-[WebResource description]):

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Get rid of an ugly #define hack in WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=139761

        Reviewed by Dan Bernstein.

        Also replace @private with @package in all public headers, for consistency.

        * History/WebBackForwardList.h:
        * History/WebHistory.h:
        * Misc/WebDownload.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebArchive.h:
        * WebView/WebDataSource.h:
        * WebView/WebFrame.h:
        * WebView/WebFrameView.h:
        * WebView/WebPreferences.h:
        * WebView/WebResource.h:

2014-12-17  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/19282508> WebKitLegacy is unusable due to bad dylib identifier
        https://bugs.webkit.org/show_bug.cgi?id=139760

        Reviewed by Anders Carlsson.

        * Configurations/WebKitLegacy.xcconfig:

2014-12-17  Andreas Kling  <akling@apple.com>

        Purge PassRefPtr from Frame.
        <https://webkit.org/b/139731>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebFrame.mm:
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]):
        (+[WebFrame _createSubframeWithOwnerElement:frameName:frameView:]):
        * WebView/WebFrameInternal.h:

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

        Implement and adopt two new TextIndicator presentation animations
        https://bugs.webkit.org/show_bug.cgi?id=139715
        <rdar://problem/19237945>

        Reviewed by Anders Carlsson.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _showTextIndicator]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView quickLookWithEvent:]):
        Remove the completionHandler from text indicator presentation.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController immediateActionRecognizerDidUpdateAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        (-[WebImmediateActionController _menuItemForDataDetectedText]):
        (-[WebImmediateActionController _animationControllerForText]):
        (-[WebImmediateActionController _showTextIndicator]):
        Forward immediate action gesture recognizer animation progress
        to TextIndicator. Force us to keep the selection when immediate
        action popovers steal first responder status from the WebView.
        If the Lookup range is equal to the selection range, use a Crossfade
        animation; otherwise, use a FadeIn animation.

        * WebView/WebView.mm:
        (-[WebView _setMaintainsInactiveSelection:]):
        (-[WebView maintainsInactiveSelection]):
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        (-[WebView _setTextIndicator:fadeOut:]):
        (-[WebView _clearTextIndicator]):
        (-[WebView _setTextIndicatorAnimationProgress:]):
        (-[WebView _showDictionaryLookupPopup:]):
        (-[WebView _dictionaryLookupPopoverWillClose:]):
        (-[WebView _setTextIndicator:fadeOut:animationCompletionHandler:]):
        Remove the completionHandler from text indicator presentation.
        Add a _setMaintainsInactiveSelection, which allows WebKit internals
        to change the return value of -maintainsInactiveSelection, allowing
        us to keep the selection alive when the WebView loses first responder status.

        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2014-12-16  Andreas Kling  <akling@apple.com>

        Use Ref for SecurityOrigin.
        <https://webkit.org/b/139710>

        Reviewed by Anders Carlsson.

        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::dispatchDidModifyOrigin):
        * WebView/WebView.mm:
        (+[WebView _addOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        (+[WebView _removeOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):

2014-12-16  Beth Dakin  <bdakin@apple.com>

        Crash getting default animation controller for some text
        https://bugs.webkit.org/show_bug.cgi?id=139712
        -and corresponding-
        rdar://problem/19271707

        Reviewed by Tim Horton.

        Must null-check the range.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _animationControllerForText]):

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

        Immediate action popovers can get stuck open
        https://bugs.webkit.org/show_bug.cgi?id=139709
        <rdar://problem/19270279>

        Reviewed by Beth Dakin.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _clearImmediateActionState]):
        Don't clear the animation controller; it breaks things and was unnecessary.

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

        Disable TextIndication for Lookup immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139684

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * WebView/WebImmediateActionController.mm:

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * WebView/WebView.mm:
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        * WebView/WebViewInternal.h:

2014-12-15  Beth Dakin  <bdakin@apple.com>

        Make lookup an immediate action instead of an action menu item
        https://bugs.webkit.org/show_bug.cgi?id=139661
        -and corresponding-
        rdar://problem/19198414

        Reviewed by Tim Horton.

        Remove the lookup menu items and non-unused static function associated with 
        lookup.
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForText]):
        (-[WebActionMenuController _defaultMenuItemsForEditableText]):
        (-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions]):
        (-[WebActionMenuController _createActionMenuItemForTag:]):
        (-[WebActionMenuController _lookupText:]): Deleted.
        (performDictionaryLookupForSelection): Deleted.
        (performDictionaryLookupForRange): Deleted.

        Set the defaultAnimationController to the lookup-provided animation controller 
        when appropriate.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _defaultAnimationController]):
        (dictionaryPopupInfoForRange):
        (-[WebImmediateActionController _animationControllerForText]):

        New type.
        * WebView/WebUIDelegatePrivate.h:

        New function to get the lookup animation controller.
        * WebView/WebView.mm:
        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
        * WebView/WebViewInternal.h:

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

        Implement Data Detectors immediate actions for Legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139619
        <rdar://problem/19198539>

        Reviewed by Beth Dakin.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _menuItemForDataDetectedText]):
        Note that this action context is only for immediate actions.

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comments in r177035
        https://bugs.webkit.org/show_bug.cgi?id=139557

        Reviewed by Darin Adler.

        * WebView/WebActionMenuController.mm:
        (elementBoundingBoxInWindowCoordinatesFromNode): Migrate off rendererBoundingBox().

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

        Implement Data Detectors immediate actions for Legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139619
        <rdar://problem/19198539>

        Reviewed by Eric Carlson.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView mouseDown:mouseDown:]):
        Send mouseDown along to the WebImmediateActionController too.

        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController webViewClosed]):
        (-[WebImmediateActionController webView:willHandleMouseDown:]):
        (-[WebImmediateActionController _cancelImmediateAction]):
        (-[WebImmediateActionController _clearImmediateActionState]):
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController _defaultAnimationController]):
        (-[WebImmediateActionController _updateImmediateActionItem]):
        (-[WebImmediateActionController _menuItemForDataDetectedText]):
        (-[WebImmediateActionController _showTextIndicator]):
        (-[WebImmediateActionController _hideTextIndicator]):
        Copy most of the DataDetectors implementation into WebImmediateActionController.

        * WebView/WebUIDelegatePrivate.h:
        Add a new type.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Temporarily disable action menus.

        (-[WebView _immediateActionController]):
        * WebView/WebViewInternal.h:

2014-12-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete Notation because we don't use it
        https://bugs.webkit.org/show_bug.cgi?id=139171

        Reviewed by Kent Tamura.

        * MigrateHeaders.make:

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

        Replace PassRef with Ref/Ref&& across the board.
        <https://webkit.org/b/139587>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldApplyStyle):
        * WebCoreSupport/WebVisitedLinkStore.h:
        * WebCoreSupport/WebVisitedLinkStore.mm:
        (WebVisitedLinkStore::create):

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

        Fix a leak introduced in r177199.

        Reviewed by Anders Carlsson.

        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _updateImmediateActionItem]):

2014-12-11  Beth Dakin  <bdakin@apple.com>

        WK1: Need new SPI for Webkit clients to override default immediate action
        https://bugs.webkit.org/show_bug.cgi?id=139568
        -and corresponding-
        rdar://problem/19225448

        Reviewed by Dan Bernstein.

        Call SPI giving clients a chance to override the default behavior.
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController _updateImmediateActionItem]):

        New SPI.
        * WebView/WebUIDelegatePrivate.h:

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Move the preview popover to WebImmediateActionController
        https://bugs.webkit.org/show_bug.cgi?id=139563
        <rdar://problem/19208291>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForLink]):
        (-[WebActionMenuController menuItem:viewAtScreenPoint:]): Deleted.
        (-[WebActionMenuController menuItem:previewItemAtPoint:]): Deleted.
        (-[WebActionMenuController menuItem:preferredEdgeForPoint:]): Deleted.
        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:
        (-[WebImmediateActionController webViewClosed]):
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        (-[WebImmediateActionController _updateImmediateActionItem]):
        (-[WebImmediateActionController menuItem:viewAtScreenPoint:]):
        (-[WebImmediateActionController menuItem:previewItemAtPoint:]):
        (-[WebImmediateActionController menuItem:preferredEdgeForPoint:]):
        Move page preview popover related code to WebImmediateActionController.

        * WebView/WebUIDelegatePrivate.h:
        Add a link preview type.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Pass the gesture recognizer to the WebImmediateActionController.

2014-12-11  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebView/WebImmediateActionController.h:
        * WebView/WebImmediateActionController.mm:

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

        Call StorageThread::releaseFastMallocFreeMemoryInAllThreads from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139547

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (+[WebView _handleMemoryWarning]):

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

        REGRESSION (Async Text Input): Text input method state is not reset when reloading a page
        https://bugs.webkit.org/show_bug.cgi?id=139504
        rdar://problem/19034674

        Reviewed by Enrica Casucci.

        Stub out new client calls, this patch does not attempt to make any changes on WebKit1.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::discardedComposition):

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Get rid of the storage strategy
        https://bugs.webkit.org/show_bug.cgi?id=139519

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createStorageStrategy): Deleted.

2014-12-10  Timothy Horton  <timothy_horton@apple.com>

        Copy and paste action menu items don't work on the Mozilla Midas demo in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=139529
        <rdar://problem/19213620>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _copySelection:]):
        (-[WebActionMenuController _paste:]):
        Use the copy: and paste: methods on WebView so that we traverse subviews
        when trying to respond, otherwise these actions don't work in subframes.

2014-12-10  Beth Dakin  <bdakin@apple.com>

        WK1: Add initial support for immediate actions
        https://bugs.webkit.org/show_bug.cgi?id=139522

        Reviewed by Dan Bernstein.

        This basic implementation of the controller will use the delegate methods to 
        perform and cache a HitTest when relevant. Future patches will patch 
        _updateImmediateActionItem to use the HitTestResult to determine if there is any 
        immediate action that should be taken.
        * WebView/WebImmediateActionController.h: Added.
        * WebView/WebImmediateActionController.mm: Added.
        (-[WebImmediateActionController webViewClosed]):
        (-[WebImmediateActionController _clearImmediateActionState]):
        (-[WebImmediateActionController performHitTestAtPoint:]):
        (-[WebImmediateActionController immediateActionRecognizerWillPrepare:]):
        (-[WebImmediateActionController immediateActionRecognizerWillBeginAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCancelAnimation:]):
        (-[WebImmediateActionController immediateActionRecognizerDidCompleteAnimation:]):
        (-[WebImmediateActionController _updateImmediateActionItem]):

        New enum for immediate action types.
        * WebView/WebUIDelegatePrivate.h:

        Create an NSImmediateActionGestureRecognizer if possible and a controller.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _close]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Use the new storage namespace provider in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=139425

        Reviewed by Tim Horton.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        Set the storage namespace provider from the web page group.

2014-12-10  Timothy Horton  <timothy_horton@apple.com>

        Should have copy and paste items in all text menus
        https://bugs.webkit.org/show_bug.cgi?id=139510
        <rdar://problem/19198388>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForText]):
        Add a disabled paste menu item into the read-only text menu.

        (-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea]):
        Add a disabled copy menu item into the editable whitespace text menu.

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Add WebStorageNamespaceProvider::closeLocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=139502

        Reviewed by Tim Horton.

        * WebView/WebView.mm:
        (+[WebView _applicationWillTerminate]):
        Call WebStorageNamespaceProvider::closeLocalStorage.

2014-12-09  Commit Queue  <commit-queue@webkit.org>

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

        broke ~50 API tests (Requested by thorton on #webkit).

        Reverted changeset:

        "Use the new storage namespace provider in WebKit1"
        https://bugs.webkit.org/show_bug.cgi?id=139425
        http://trac.webkit.org/changeset/177037

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Use the new storage namespace provider in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=139425

        Reviewed by Tim Horton.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        Set the storage namespace provider from the web page group.

2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete Node::boundingBox()
        https://bugs.webkit.org/show_bug.cgi?id=139333

        Reviewed by Zalan Bujtas.

        * WebView/WebActionMenuController.mm:
        (elementBoundingBoxInWindowCoordinatesFromNode): Use
        RenderObject::absoluteBoundingBoxRect().

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

        REGRESSION (r158036): WebView cannot handle HTTP Basic Authentication challenge
        https://bugs.webkit.org/show_bug.cgi?id=138843
        rdar://problem/18793695

        Reviewed by Dan Bernstein.

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel cancel:]):
        (-[WebAuthenticationPanel logIn:]):
        Don't close the panel before using panel.sheetParent, because the parent becomes nil.
        In fact, we don't need to close it at all, it's enough to call orderOut:, and even
        that only when using an old NSWindow API.

2014-12-08  Beth Dakin  <bdakin@apple.com>

        Copy and Lookup menu items should be disabled when something is not copyable
        https://bugs.webkit.org/show_bug.cgi?id=139423

        Reviewed by Tim Horton.

        Disable both lookup and copy when a HitTestResult does not allow copy.
        * WebView/WebActionMenuController.mm:

        Set autoenablesItems to NO. It’s messing with our ability to control the enable/
        disable state otherwise.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2014-12-08  Anders Carlsson  <andersca@apple.com>

        Adding user content to a group should force that group to be created
        https://bugs.webkit.org/show_bug.cgi?id=139421
        rdar://problem/19180108

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebViewGroup.h:
        Store the local storage database path in the group.

        * WebCoreSupport/WebViewGroup.mm:
        (WebViewGroup::getOrCreate):
        If we have an existing group that hasn't had its storage namespace provider created, and the path passed is not empty,
        set it. This will ensure that getOrCreate will still work when creating a storage namspace provider.

        (WebViewGroup::WebViewGroup):
        Initialize the new member variable.

        (WebViewGroup::storageNamespaceProvider):
        Create the namespace provider lazily.

        * WebView/WebView.mm:
        (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:injectedFrames:]):
        (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:injectedFrames:]):
        Use getOrCreate instead of get.

2014-12-08  Anders Carlsson  <andersca@apple.com>

        WebStorageNamespaceProvider should know about its local storage database path
        https://bugs.webkit.org/show_bug.cgi?id=139413

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebViewGroup.h:
        * WebCoreSupport/WebViewGroup.mm:
        (WebViewGroup::getOrCreate):
        (WebViewGroup::WebViewGroup):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (-[WebView setGroupName:]):
        (-[WebView groupName]): Deleted.

2014-12-08  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the WebKit build with the public SDK

        Include header NSURLDownloadSPI.h.

        * WebCoreSupport/WebFrameLoaderClient.mm:

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

        Introduce and deploy a function that allocates and returns an instance of a soft-linked class
        https://bugs.webkit.org/show_bug.cgi?id=139348

        Reviewed by Anders Carlsson.

        In [[getFooClass() alloc] init*], the type of the result of +alloc is id, so the compiler
        picks an arbitrary declaration of init*, not necessarily the Foo one. This can then lead
        to warnings or errors if the types or attributes don’t match, or to runtime errors if Foo
        doesn’t even have the expected initializer. The new allocFooInstance() returns a Foo *, thus
        avoiding the ambiguity.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForDataDetectableLink]):

2014-12-06  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out version of WebStorageNamespaceProvider
        https://bugs.webkit.org/show_bug.cgi?id=139213

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebViewGroup.h:
        (WebViewGroup::storageNamespaceProvider):
        * WebCoreSupport/WebViewGroup.mm:
        (WebViewGroup::getOrCreate):
        (WebViewGroup::WebViewGroup):
        Give WebViewGroup a storage namespace provider.

2014-12-06  Anders Carlsson  <andersca@apple.com>

        Fix build with newer versions of clang.
        rdar://problem/18978687

        Add missing overrides and missing casts.

        * Storage/WebDatabaseManagerClient.h:
        * Storage/WebStorageTrackerClient.h:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebInspectorClient.h:
        * WebView/WebDataSource.mm:
        (-[WebDataSource _makeRepresentation]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _makeDocumentViewForDataSource:]):

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

        Legacy WebKit should set deviceScaleFactor in _commonInitializationWithFrameName, not _initWithFrame
        https://bugs.webkit.org/show_bug.cgi?id=139306
        <rdar://problem/19157955>

        Reviewed by Beth Dakin.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _initWithFrame:frameName:groupName:]):
        Move setDeviceScaleFactor to the initialization path that is guaranteed to happen.

2014-12-05  David Kilzer  <ddkilzer@apple.com>

        FeatureDefines.xcconfig: Workaround bug in Xcode 5.1.1 when defining ENABLE_WEB_REPLAY
        <http://webkit.org/b/139286>

        Reviewed by Daniel Bates.

        * Configurations/FeatureDefines.xcconfig: Switch back to using
        PLATFORM_NAME to workaround a bug in Xcode 5.1.1 on 10.8.

2014-12-04  Timothy Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * WebView/WebView.mm:
        (-[WebView _setTextIndicator:fadeOut:animationCompletionHandler:]):

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

        TextIndicator::createWithSelectionInFrame does synchronous IPC in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=139252
        <rdar://problem/19140827>

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView _setTextIndicator:fadeOut:animationCompletionHandler:]):
        Adjust to the WebCore changes.

2014-12-03  Timothy Horton  <timothy_horton@apple.com>

        Implement action menus for tel: URLs
        https://bugs.webkit.org/show_bug.cgi?id=139240
        <rdar://problem/19115662>

        Reviewed by Anders Carlsson.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForDataDetectableLink]):
        Make sure to use the newly created currentActionContext... everywhere.

2014-12-03  Timothy Horton  <timothy_horton@apple.com>

        Implement action menus for tel: URLs
        https://bugs.webkit.org/show_bug.cgi?id=139240
        <rdar://problem/19115662>

        Reviewed by Anders Carlsson.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForDataDetectableLink]):
        Make sure to use the newly created currentActionContext.

2014-12-03  Beth Dakin  <bdakin@apple.com>

        <input> elements get whitespace action menu instead of editable text menu
        https://bugs.webkit.org/show_bug.cgi?id=139241
        -and corresponding-
        rdar://problem/19072083

        Reviewed by Sam Weinig.

        We should disallow shadow content in the hit test. This is the default and it is 
        how context menus behave. We originally wanted to text inside shadow content so 
        that we could find the text, but the new function I added to HitTestResult will 
        allow that.
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController performHitTestAtPoint:]):

        Adjust to the fact that we don’t hit test shadow content any more.
        (-[WebActionMenuController focusAndSelectHitTestResult]):

        Offer the text menus for text inside form controls.
        (-[WebActionMenuController _defaultMenuItems]):

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

        Implement action menus for tel: URLs
        https://bugs.webkit.org/show_bug.cgi?id=139240
        <rdar://problem/19115662>

        Reviewed by Anders Carlsson.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForDataDetectableLink]):
        Rename this function as it will work for both mailto and tel URLs.
        Adjust it to use contextForView:.

        (-[WebActionMenuController webView:willHandleMouseDown:]):
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController didCloseMenu:withEvent:]):
        (-[WebActionMenuController _defaultMenuItems]):
        Don't check the menu type when going to interact with _currentActionContext.
        We'll only have a _currentActionContext if we have a data detected item,
        and there are multiple menu types that end up using DDActionContext.

        * WebView/WebUIDelegatePrivate.h:
        Add a new type.

2014-12-03  Anders Carlsson  <andersca@apple.com>

        Set a visited link store when creating a simple WebView
        https://bugs.webkit.org/show_bug.cgi?id=139234
        <rdar://problem/19132978>

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

2014-12-02  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebCoreSupport/WebFrameLoaderClient.mm:

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

        http/tests/appcache/main-resource-fallback-for-network-error-crash.html can break subsequent tests
        https://bugs.webkit.org/show_bug.cgi?id=139149

        Reviewed by Anders Carlsson.

        This changes API behavior. I think that it's OK, because existing behavior made no sense.
        We used to delete caches from disk, but they were still active in memory. Now we also
        obsolete them in memory, so documents that use a cache still work, but new ones don't
        pick one up.

        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache setMaximumSize:]): Changing maximum on-disk size doesn't
        need to delete in-momry caches too. Keep existing behavior.
        (+[WebApplicationCache deleteAllApplicationCaches]): Use the new WebCore function
        that properly deletes caches.

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

        Remove a SnowLeopard-era quirk for QuickLook
        https://bugs.webkit.org/show_bug.cgi?id=139208
        <rdar://problem/19121822>

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

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

        Loading Lookup causes http/tests/cache/post-redirect-get.php to fail
        https://bugs.webkit.org/show_bug.cgi?id=139204

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _showDictionaryLookupPopup:]):
        * WebView/WebViewData.h:
        Work around this by delaying the softlinking (and setting up the notification
        observer) until we actually need it. There's still an underlying bug, but
        this will fix the test.

2014-12-02  Beth Dakin  <bdakin@apple.com>

        Yet another build fix.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForLink]):

2014-12-02  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForLink]):

2014-12-02  Beth Dakin  <bdakin@apple.com>

        More build fixing.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForLink]):

2014-12-02  Beth Dakin  <bdakin@apple.com>

        Should use standardQuickLookMenuItem for apps that don't implement customizations
        https://bugs.webkit.org/show_bug.cgi?id=139193
        -and corresponding-
        rdar://problem/18944696

        Reviewed by Anders Carlsson.

        Use [NSMenuItem standardQuickLookMenuItem].
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForLink]):

        Delegate methods to set up the standardQuickLookMenuItem.
        (-[WebActionMenuController menuItem:viewAtScreenPoint:]):
        (-[WebActionMenuController menuItem:previewItemAtPoint:]):
        (-[WebActionMenuController menuItem:preferredEdgeForPoint:]):

        Remove all of the old QLPreviewBubble code.
        (-[WebActionMenuController _createActionMenuItemForTag:]):
        (-[WebActionMenuController _quickLookURLFromActionMenu:]): Deleted.

2014-12-02  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * WebView/WebViewData.h:

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

        Implement Lookup transition from selection for Legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=139180
        <rdar://problem/19067172>

        Reviewed by Beth Dakin.

        * WebView/DictionaryPopupInfo.h: Added.
        Split DictionaryPopupInfo out into its own file.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _lookupText:]):
        Hand the DictionaryPopupInfo to WebView, which will show the TextIndicator and invoke Lookup.

        (performDictionaryLookupForSelection):
        (performDictionaryLookupForRange):
        Plumb the transition style through these helpers.
        Create a TextIndicator from the selection range.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        Make use of TextIndicator (and DictionaryPopupInfo, and the new
        _showDictionaryLookupPopup on WebView) to add a transition from blue
        when performing Lookup from the context menu.

        (-[WebHTMLView quickLookWithEvent:]):
        Remove our TextIndicator whenever a normal three-finger-tap event
        comes through, as it will have its own indication.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _dictionaryLookupPopoverWillClose:]):
        Register for the LUNotificationPopoverWillClose notification and remove
        our TextIndicator when it is called, just like in WebKit2.
        Deregistration is already handled in _close.

        (-[WebView _showDictionaryLookupPopup:]):
        Just like WebKit2, show our TextIndicator and tell Lookup not to show its own,
        if the relevant API is available.

        * WebView/WebViewInternal.h:

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

        Remove visited link handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139185

        Reviewed by Sam Weinig.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate removeItemForURLString:]):
        (-[WebHistoryPrivate removeAllItems]):
        (+[WebHistory setOptionalSharedHistory:]):
        (+[WebHistory _setVisitedLinkTrackingEnabled:]):
        (+[WebHistory _removeAllVisitedLinks]):
        (-[WebHistoryPrivate addVisitedLinksToPageGroup:]): Deleted.
        (-[WebHistory _addVisitedLinksToPageGroup:]): Deleted.
        * History/WebHistoryInternal.h:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::populateVisitedLinks): Deleted.
        * WebView/WebView.mm:
        (-[WebView addVisitedLinks:]):
        (-[WebView removeVisitedLink:]):

2014-12-01  Timothy Horton  <timothy_horton@apple.com>

        Try to fix the Mac build.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _close]):

2014-12-01  Timothy Horton  <timothy_horton@apple.com>

        Fix the iOS build.

        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView scrollWheel:scrollWheel:]):
        (-[WebHTMLView mouseDown:mouseDown:]):
        * WebView/WebView.mm:
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):
        * WebView/WebViewInternal.h:

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

        Implement yellow highlight for WebKit1 data detectors
        https://bugs.webkit.org/show_bug.cgi?id=138956
        <rdar://problem/18992185>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController webView:willHandleMouseDown:]):
        (-[WebActionMenuController webView:didHandleScrollWheel:]):
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController didCloseMenu:withEvent:]):
        (-[WebActionMenuController _defaultMenuItemsForDataDetectedText]):
        (-[WebActionMenuController _showTextIndicator]):
        (-[WebActionMenuController _hideTextIndicator]):
        (-[WebActionMenuController _dismissActionMenuPopovers]):
        Copy the WebKit2 WKActionMenuController TextIndicator implementation
        into WebActionMenuController. The only significant difference is
        that we build the TextIndicator right at menu construction time
        instead of in the Web process.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView scrollWheel:]):
        Let the WebActionMenuController know that we're handling a scroll.

        (-[WebHTMLView mouseDown:]):
        Let the WebActionMenuController know that we're handling a mouseDown.

        * WebView/WebView.mm:
        (-[WebView _setTextIndicator:fadeOut:animationCompletionHandler:]):
        (-[WebView _clearTextIndicator]):
        (-[WebView _actionMenuController]):
        (-[WebView _convertRectFromRootView:]): Deleted.
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        * WebView/WebViewInternal.h:
        Keep a TextIndicatorWindow on WebView, just like WKView does.
        Expose the WebActionMenuController on WebView (internally).

2014-12-01  Anders Carlsson  <andersca@apple.com>

        Remove old site specific quirks code that was added in 2009
        https://bugs.webkit.org/show_bug.cgi?id=139141

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::needsSiteSpecificQuirks): Deleted.

2014-11-30  Anders Carlsson  <andersca@apple.com>

        Fix a test failure.

        * History/WebHistory.mm:
        (+[WebHistory _setVisitedLinkTrackingEnabled:]):
        Call through to the visited link store.

        (+[WebHistory _removeAllVisitedLinks]):
        Ditto.

        * WebCoreSupport/WebVisitedLinkStore.mm:
        (WebVisitedLinkStore::isLinkVisited):
        Make sure to populate visited links.

2014-11-30  Anders Carlsson  <andersca@apple.com>

        Switch over to the visited link store from the WebViewGroup
        https://bugs.webkit.org/show_bug.cgi?id=139112

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView setGroupName:]):

2014-11-30  Anders Carlsson  <andersca@apple.com>

        Add WebVisitedLinkStore::removeVisitedLink and use it on iOS
        https://bugs.webkit.org/show_bug.cgi?id=139111

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebVisitedLinkStore.h:
        * WebCoreSupport/WebVisitedLinkStore.mm:
        (WebVisitedLinkStore::removeVisitedLink):
        * WebView/WebView.mm:
        (-[WebView removeVisitedLink:]):

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Populate visited links
        https://bugs.webkit.org/show_bug.cgi?id=139101

        Reviewed by Sam Weinig.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate addVisitedLinksToVisitedLinkStore:]):
        Helper function that adds all visited link to the given store.

        (-[WebHistory _addVisitedLinksToVisitedLinkStore:]):
        Call the private method.

        * History/WebHistoryInternal.h:
        * WebCoreSupport/WebVisitedLinkStore.h:
        Add new members.

        * WebCoreSupport/WebVisitedLinkStore.mm:
        (WebVisitedLinkStore::addVisitedLink):
        Get the characters from the URL string and hash them, then call addVisitedLinkHash.

        (WebVisitedLinkStore::populateVisitedLinksIfNeeded):
        Implement this. First try the delegate, then try the shared history.

        (WebVisitedLinkStore::addVisitedLinkHash):
        Factor code that adds the link to the hash table into a separate function.

        * WebView/WebView.mm:
        (-[WebView addVisitedLinks:]):
        Add the visited links to the store.

2014-11-29  Anders Carlsson  <andersca@apple.com>

        More work on the legacy WebKit visited link store
        https://bugs.webkit.org/show_bug.cgi?id=139100

        Reviewed by Sam Weinig.

        * History/WebHistory.mm:
        (+[WebHistory setOptionalSharedHistory:]):
        Call WebVisitedLinkStore::setShouldTrackVisitedLinks and WebVisitedLinkStore::removeAllVisitedLinks.

        * WebCoreSupport/WebVisitedLinkStore.h:
        * WebCoreSupport/WebVisitedLinkStore.mm:
        (visitedLinkStores):
        (WebVisitedLinkStore::WebVisitedLinkStore):
        (WebVisitedLinkStore::~WebVisitedLinkStore):
        Keep track of live visited link stores.

        (WebVisitedLinkStore::setShouldTrackVisitedLinks):
        Update s_shouldTrackVisitedLinks and call removeAllVisitedLinks if necessary.

        (WebVisitedLinkStore::removeAllVisitedLinks):
        Iterate over all live link stores and remove their links.

        (WebVisitedLinkStore::isLinkVisited):
        Populate visited links and check if our hash table contains the link.

        (WebVisitedLinkStore::addVisitedLink):
        Add the link hash to the table.

        (WebVisitedLinkStore::populateVisitedLinksIfNeeded):
        Add stub.

        (WebVisitedLinkStore::removeVisitedLinkHashes):
        Clear out the hash table.

2014-11-27  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out WebVisitedLinkStore to WebViewGroup
        https://bugs.webkit.org/show_bug.cgi?id=139066

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebViewGroup.h:
        (WebViewGroup::visitedLinkStore):
        * WebCoreSupport/WebViewGroup.mm:
        (WebViewGroup::WebViewGroup):
        * WebCoreSupport/WebVisitedLinkStore.h: Copied from Source/WebKit/mac/WebCoreSupport/WebViewGroup.h.
        * WebCoreSupport/WebVisitedLinkStore.mm: Copied from Source/WebKit/mac/WebCoreSupport/WebViewGroup.h.
        (WebVisitedLinkStore::create):
        (WebVisitedLinkStore::WebVisitedLinkStore):
        (WebVisitedLinkStore::~WebVisitedLinkStore):
        (WebVisitedLinkStore::isLinkVisited):
        (WebVisitedLinkStore::addVisitedLink):

2014-11-25  Anders Carlsson  <andersca@apple.com>

        Remove user content handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139051

        Reviewed by Antti Koivisto.

        Use the user content controller in the web view group.

        * WebView/WebView.mm:
        (-[WebView _injectOutlookQuirksScript]):

2014-11-25  Anders Carlsson  <andersca@apple.com>

        Add a user content controller to WebViewGroup and use it for user content
        https://bugs.webkit.org/show_bug.cgi?id=139043

        Reviewed by Antti Koivisto.

        This is another tiny step towards getting rid of user content handling inside PageGroup.

        * WebCoreSupport/WebViewGroup.h:
        (WebViewGroup::userContentController):
        Add a UserContentController member and getter.

        * WebCoreSupport/WebViewGroup.mm:
        (WebViewGroup::get):
        Helper function that returns a WebViewGroup by its name (or null if it doesn't exist).

        (WebViewGroup::WebViewGroup):
        Create a user content controller.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Instead of calling -[WebView setGroupName:], create a WebViewGroup before creating the page, that way we can
        set its user content controller in the PageConfiguration.

        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        Ditto.

        (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:injectedFrames:]):
        (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:injectedFrames:]):
        (+[WebView _removeUserScriptFromGroup:world:url:]):
        (+[WebView _removeUserStyleSheetFromGroup:world:url:]):
        (+[WebView _removeUserScriptsFromGroup:world:]):
        (+[WebView _removeUserStyleSheetsFromGroup:world:]):
        (+[WebView _removeAllUserContentFromGroup:]):
        Instead of calling into the PageGroup, get the WebViewGroup's user content controller and call into that.

        (-[WebView setGroupName:]):
        Set the user content controller to the new WebViewGroup's user content controller.

2014-11-21  Jer Noble  <jer.noble@apple.com>

        Support multiple signatures of diagnostic logging.
        https://bugs.webkit.org/show_bug.cgi?id=138690

        Reviewed by Anders Carlsson.

        Page::PageClients has been renamed PageConfiguration.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

2014-11-21  Zalan Bujtas  <zalan@apple.com>

        Simple line layout: Add "show simple line layout debug borders" setting to MiniBrowser.
        https://bugs.webkit.org/show_bug.cgi?id=138981

        Reviewed by Simon Fraser.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences simpleLineLayoutDebugBordersEnabled]):
        (-[WebPreferences setSimpleLineLayoutDebugBordersEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176351): Parts of apple.com/contact aren't Lookup-able
        ​https://bugs.webkit.org/show_bug.cgi?id=138960
        <rdar://problem/19056715>

        Reviewed by Anders Carlsson.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForMailtoLink]):
        (-[WebActionMenuController _defaultMenuItemsForDataDetectedText]):
        Use DataDetectors SPI instead of an explicit blacklist.

2014-11-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r176351): Parts of apple.com/contact aren't Lookup-able
        https://bugs.webkit.org/show_bug.cgi?id=138960
        <rdar://problem/19056715>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForDataDetectedText]):
        Blacklist contact results, because they don't have useful menus. If we
        bail before setting up _currentActionContext, we'll still allow fallthrough
        to ordinary text actions, avoiding mysterious failure when a contact is detected.

        This doesn't break the case that r176351 was intended to fix,
        because in that case we were detecting e.g. addresses.

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Remove the Timer parameters from timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=138974

        Reviewed by Antti Koivisto.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (WebNetscapePluginStream::deliverDataTimerFired):

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Make memoryCache() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=138939

        Reviewed by Antti Koivisto.

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        (+[WebCache emptyInMemoryResources]):
        (+[WebCache sizeOfDeadResources:]):
        (+[WebCache addImageToCache:forURL:forFrame:]):
        (+[WebCache removeImageFromCacheForURL:forFrame:]):
        (+[WebCache imageForURL:]):
        (+[WebCache setDisabled:]):
        (+[WebCache isDisabled]):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2014-11-20  Benjamin Poulain  <bpoulain@apple.com>

        Remove the remaining vestiges of minimal-ui
        https://bugs.webkit.org/show_bug.cgi?id=138890

        Reviewed by Sam Weinig.

        * History/WebHistoryItem.mm:
        * History/WebHistoryItemPrivate.h:

2014-11-20  Tim Horton  <timothy_horton@apple.com>

        Cancel DataDetectors menu earlier if we know it can't be presented
        https://bugs.webkit.org/show_bug.cgi?id=138922
        <rdar://problem/18950441>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        Move our call to shouldUseActionsWithContext earlier, to menuNeedsUpdate,
        and use a bigger hammer (removeAllItems).

        (-[WebActionMenuController willOpenMenu:withEvent:]):
        If we end up with a menu with no items, don't change selection or anything.

2014-11-20  Beth Dakin  <bdakin@apple.com>

        Invalid message WebPageProxy.DidPerformDictionaryLookup on Google stocks result
        https://bugs.webkit.org/show_bug.cgi?id=138568
        -and corresponding-
        rdar://problem/18904600

        Reviewed by Tim Horton.

        Skip images for lookup.
        * WebView/WebActionMenuController.mm:
        (performDictionaryLookupForRange):

2014-11-19  Beth Dakin  <bdakin@apple.com>

        Invoking an action menu on a selection should result in the text menu
        https://bugs.webkit.org/show_bug.cgi?id=138892
        -and corresponding-
        rdar://problem/18996776

        Reviewed by Tim Horton.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItems]):

2014-11-19  Beth Dakin  <bdakin@apple.com>

        Data detected results with no menu items should not fall through to regular text 
        action menus
        https://bugs.webkit.org/show_bug.cgi?id=138887
        -and corresponding-
        rdar://problem/18971616

        Reviewed by Tim Horton.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItems]):

2014-11-19  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebKit build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=136863

        Reviewed by David Kilzer.

        * History/WebHistory.mm: Include header NSCalendarDateSPI.h.
        * History/WebHistoryItemPrivate.h: Remove include of private header Foundation/NSCalendarDate.h.
        * Misc/WebDownload.h: Forward declare NSURLDownload when building without header Foundation/NSURLDownload.h.
        We use __has_include() instead of WTF_USE_APPLE_INTERNAL_SDK since this header
        may be used by Apple internal clients that do not include wtf/Platform.h.
        * Misc/WebDownload.mm: Include header NSURLDownloadSPI.h instead of including
        private Foundation headers directly.
        * Misc/WebNSURLExtras.mm: Remove unnecessary include of private Foundation header.
        * WebCoreSupport/WebFrameNetworkingContext.mm: Include header CFNetworkSPI.h
        instead of including private CFNetwork headers directly. Also fixed up style and
        ordering of header include directives.
        * WebView/WebView.mm: Include header CFNetworkSPI.h instead of including private
        CFNetwork headers directly. Also sort the #import directives.
        * WebView/WebViewPrivate.h: Define ENABLE_TOUCH_EVENTS if not otherwise defined
        and added ENABLE_TOUCH_EVENTS-guard around -_touchEventRegions.

2014-11-18  David Kilzer  <ddkilzer@apple.com>

        FeatureDefines.xcconfig: Switch from using PLATFORM_NAME to SDK selectors
        <http://webkit.org/b/138813>

        Reviewed by Mark Rowe.

        * Configurations/FeatureDefines.xcconfig: Switch to using SDK
        selectors.

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

        Add a setting to toggle DOMTimer throttling support
        https://bugs.webkit.org/show_bug.cgi?id=138844
        <rdar://problem/19020874>

        Reviewed by Andreas Kling.

        Add a setting to disable DOM timers throttling, in order to help
        developers determine if a specific issue is caused by timer
        throttling.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences domTimersThrottlingEnabled]):
        (-[WebPreferences setDOMTimersThrottlingEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Avoid re-encoding action menu image data
        https://bugs.webkit.org/show_bug.cgi?id=138817
        <rdar://problem/18840382>

        Reviewed by Anders Carlsson.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _defaultMenuItemsForImage:]):
        (-[WebActionMenuController _addImageToPhotos:]):
        Build a temporary filename from a UUID and the image's desired extension.
        Use the Image's encoded data instead of re-encoding it with CGImageDestination.
        Build an image menu only if we have an image, URL, data, and extension.

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

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Include headers DispatchSPI.h and MobileGestaltSPI.h instead of including
        libdispatch and MobileGestalt headers directly.

        * WebView/WebView.mm:

2014-11-17  Brian Weinstein  <bweinstein@apple.com>

        Remove calls to deprecated NSMenu methods
        https://bugs.webkit.org/show_bug.cgi?id=138808.

        Reviewed by Anders Carlsson.

        -[NSMenu menuChangedMessagesEnabled] and -[NSMenu setMenuChangedMessagesEnabled:] are no-ops as of 10.6.

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::populate):

2014-11-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r176232.

        Broke the Mac build. Will investigate offline.

        Reverted changeset:

        "[iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions,
        MobileGestalt"
        https://bugs.webkit.org/show_bug.cgi?id=138802
        http://trac.webkit.org/changeset/176232

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] Libdispatch, Dyld, IOKit, Mach, NSPointerFunctions, MobileGestalt
        SPI are not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138802

        Reviewed by David Kilzer.

        Include headers DispatchSPI.h and MobileGestaltSPI.h instead of including
        libdispatch and MobileGestalt headers directly.

        * WebView/WebView.mm:

2014-11-17  Beth Dakin  <bdakin@apple.com>

        Whitespace action menus should focus the HitTestResult and create an insertion 
        point
        https://bugs.webkit.org/show_bug.cgi?id=138786
        -and corresponding-
        rdar://problem/18944893

        Reviewed by Tim Horton.

        Whitespace menus should cause the HitTestResult to be focused, and they should set 
        the selection based on the HitTest location.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController isMenuForTextContent]):
        (-[WebActionMenuController focusAndSelectHitTestResult]):
        (-[WebActionMenuController willOpenMenu:withEvent:]):

2014-11-17  Daniel Bates  <dabates@apple.com>

        [iOS] QuartzCore SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138751

        Reviewed by David Kilzer.

        Include header QuartzCoreSPI.h instead of including QuartzCore headers directly.

        * WebInspector/WebNodeHighlight.mm:
        * WebView/WebIndicateLayer.mm:

2014-11-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] allow host application to opt-out of alternate fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=138787

        Reviewed by Darin Adler.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences allowsAlternateFullscreen]):
        (-[WebPreferences setAllowsAlternateFullscreen:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Use TextIndicator instead of the built in Lookup highlight
        https://bugs.webkit.org/show_bug.cgi?id=138775
        <rdar://problem/18953982>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Remove a WKSI import.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _lookupText:]):
        (-[WebActionMenuController _createActionMenuItemForTag:]):
        Make use of the new Lookup SPI header.
        Disable the Lookup item if lookup is not available.

2014-11-15  Tim Horton  <timothy_horton@apple.com>

        Implement data detectors and mailto action menus for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=138765
        <rdar://problem/18877535>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController willOpenMenu:withEvent:]):
        Tell DataDetectors that the menu is going to open.
        Select the text (or not) based on the number of items in the menu, just like WebKit2.

        (-[WebActionMenuController didCloseMenu:withEvent:]):
        Tell DataDetectors that the menu closed.

        (-[WebActionMenuController _defaultMenuItemsForLink]):
        Move these checks out of _defaultMenuItemsForLink, because we expect this
        to always return a complete link menu.

        (-[WebActionMenuController _defaultMenuItemsForMailtoLink]):
        Implement. More or less copied from WebKit2.

        (-[WebActionMenuController _selectDataDetectedText]):
        Select the stashed range.

        (-[WebActionMenuController _defaultMenuItemsForDataDetectedText]):
        Implement. More or less copied from WebKit2.
        The yellow highlight isn't hooked up yet.
        Give the client a chance to override via _webView:actionContextForHitTestResult:range:.

        (-[WebActionMenuController _selectLookupText]):
        Remove an unnecessary return.

        (-[WebActionMenuController _defaultMenuItems]):
        Call into the two new menu types.

        * WebView/WebUIDelegatePrivate.h:

2014-11-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Get rid of WebFontCache
        https://bugs.webkit.org/show_bug.cgi?id=134752

        Reviewed by Dave Hyatt.

        * WebView/WebHTMLView.mm:

2014-11-14  Timothy Horton  <timothy_horton@apple.com>

        Update some artwork for the legacy WebKit action menu
        https://bugs.webkit.org/show_bug.cgi?id=138758
        <rdar://problem/18989840>

        * WebView/WebActionMenuController.mm:
        (webKitBundleImageNamed): Deleted.
        Fix the build.

2014-11-14  Tim Horton  <timothy_horton@apple.com>

        Update some artwork for the legacy WebKit action menu
        https://bugs.webkit.org/show_bug.cgi?id=138758
        <rdar://problem/18989840>

        Reviewed by Simon Fraser.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _createActionMenuItemForTag:]):

2014-11-14  Daniel Bates  <dabates@apple.com>

        [iOS] NSFileManager and QuickLook SPI not available in public SDK
        https://bugs.webkit.org/show_bug.cgi?id=138742

        Reviewed by Pratik Solanki.

        Include header NSFileManagerSPI.h instead of the private header NSFileManager_NSURLExtras.h.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2014-11-14  Beth Dakin  <bdakin@apple.com>

        WK1: Webpage preview can come up in wrong location
        https://bugs.webkit.org/show_bug.cgi?id=138747
        -and corresponding-
        rdar://problem/18979004

        Reviewed by Tim Horton.

        Converting to window twice is bad.
        * WebView/WebActionMenuController.mm:
        (elementBoundingBoxInWindowCoordinatesFromNode):
        (-[WebActionMenuController _quickLookURLFromActionMenu:]):
        (elementBoundingBoxFromNode): Deleted.

2014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Move FontMac and FontCacheMac off of WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138633

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebKit.order:

2014-11-13  Beth Dakin  <bdakin@apple.com>

        WK1: Clean up WebActionMenuController to use the _hitTestResult ivar
        https://bugs.webkit.org/show_bug.cgi?id=138716
        -and corresponding-
        rdar://problem/18977222

        Reviewed by Tim Horton.

        It’s not necessary to use the WebElementDictionary for so many things now that we 
        are caching the HitTestResult. We should just use the HitTestResult.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController _openURLFromActionMenu:]):
        (-[WebActionMenuController _addToReadingListFromActionMenu:]):
        (elementBoundingBoxFromNode):
        (-[WebActionMenuController _quickLookURLFromActionMenu:]):
        (-[WebActionMenuController _defaultMenuItemsForLink]):
        (-[WebActionMenuController _defaultMenuItemsForImage]):
        (-[WebActionMenuController _defaultMenuItemsForVideo]):
        (-[WebActionMenuController _defaultMenuItemsForText]):
        (-[WebActionMenuController _defaultMenuItemsForEditableText]):
        (-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions]):
        (-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea]):
        (-[WebActionMenuController _createActionMenuItemForTag:]):
        (-[WebActionMenuController _defaultMenuItems]):
        (-[WebActionMenuController _elementBoundingBoxFromDOMElement:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForLink:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForImage:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForVideo:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForText:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForEditableText:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea:]): Deleted.
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]): Deleted.
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]): Deleted.

2014-11-13  Daniel Bates  <dabates@apple.com>

        [iOS] NSGeometry data types are not available in the public SDK
        https://bugs.webkit.org/show_bug.cgi?id=137536

        Reviewed by David Kilzer.

        Substitute header WAKAppKitStubs.h for NSGeometry.h as the latter is a
        private header.

        * DOM/WebDOMOperationsPrivate.h:

2014-11-13  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for video
        https://bugs.webkit.org/show_bug.cgi?id=138713
        -and corresponding-
        rdar://problem/18877520

        Reviewed by Tim Horton.

        Call setToNonShadowAncestor() for media HitTestResults.
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController performHitTestAtPoint:]):

        Default items and actions.
        (-[WebActionMenuController _defaultMenuItemsForVideo:]):
        (-[WebActionMenuController _copyVideoURL:]):
        (-[WebActionMenuController _saveVideoToDownloads:]):
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
        * WebView/WebUIDelegatePrivate.h:

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

        WK1: Update icon for Add to Reading List
        https://bugs.webkit.org/show_bug.cgi?id=138710
        <rdar://problem/18975774>

        Reviewed by Beth Dakin.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        Use the right icon, matching WebKit2.

2014-11-12  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for images
        https://bugs.webkit.org/show_bug.cgi?id=138668
        -and corresponding-
        rdar://problem/18785434

        Reviewed by Tim Horton.

        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController didCloseMenu:withEvent:]):
        (-[WebActionMenuController _defaultMenuItemsForImage:]):
        (-[WebActionMenuController _copyImage:]):
        (temporaryPhotosDirectoryPath):
        (pathToPhotoOnDisk):
        (-[WebActionMenuController _canAddMediaToPhotos]):
        (-[WebActionMenuController _addImageToPhotos:]):
        (-[WebActionMenuController _saveImageToDownloads:]):
        (-[WebActionMenuController sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
        (-[WebActionMenuController sharingServicePicker:delegateForSharingService:]):
        (-[WebActionMenuController sharingService:sourceWindowForShareItems:sharingContentScope:]):
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
        * WebView/WebUIDelegatePrivate.h:

2014-11-11  Beth Dakin  <bdakin@apple.com>

        Action menu hit testing is not working properly with all WK1 apps
        https://bugs.webkit.org/show_bug.cgi?id=138643
        -and corresponding-
        rdar://problem/18949376

        Reviewed by Tim Horton.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController _lookupText:]):

2014-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Finish moving CTFontGetVerticalGlyphsForCharacters and CTLineCreateWithUniCharProvider out from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138623

        Reviewed by Geoff Garen.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebKit.order:

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

        Localize strings for action menus
        https://bugs.webkit.org/show_bug.cgi?id=138591
        <rdar://problem/18815343>

        Reviewed by Dan Bates.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        Make use of the new strings.

2014-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Cleanup from r175379
        https://bugs.webkit.org/show_bug.cgi?id=138616

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebKit.order:

2014-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        Move CTFontTransformGlyphs out from WKSI
        https://bugs.webkit.org/show_bug.cgi?id=138599

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebKit.order:

2014-11-11  Dan Bernstein  <mitz@apple.com>

        More iOS build fix.

        * WebView/WebHTMLViewInternal.h:

2014-11-11  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * WebView/WebHTMLView.mm:

2014-11-10  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for editable text with misspelled word
        https://bugs.webkit.org/show_bug.cgi?id=138590
        -and corresponding-
        rdar://problem/18877506

        Reviewed by Tim Horton.

        If there are misspelled word suggestions for editable text, create a new type of 
        menu with a spelling suggestion sub-menu.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController isMenuForTextContent]):
        (-[WebActionMenuController _defaultMenuItemsForEditableTextWithSuggestions:]):
        (-[WebActionMenuController _changeSelectionToSuggestion:]):
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _changeSpellingToWord:]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebUIDelegatePrivate.h:

2014-11-10  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for editable whitespace
        https://bugs.webkit.org/show_bug.cgi?id=138586
        -and corresponding-
        rdar://problem/18932048

        Reviewed by Tim Horton.

        New menu type. Just wants paste.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController isMenuForTextContent]):
        (-[WebActionMenuController _defaultMenuItemsForWhitespaceInEditableArea:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
        * WebView/WebUIDelegatePrivate.h:

2014-11-10  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for editable text
        https://bugs.webkit.org/show_bug.cgi?id=138580
        -and corresponding-
        rdar://problem/18877497

        Reviewed by Tim Horton.

        New menu type, and new action type for paste. 

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController isMenuForTextContent]):
        (-[WebActionMenuController willOpenMenu:withEvent:]):
        (-[WebActionMenuController _defaultMenuItemsForEditableText:]):
        (-[WebActionMenuController _paste:]):
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):
        * WebView/WebUIDelegatePrivate.h:

2014-11-10  Beth Dakin  <bdakin@apple.com>

        WK1: Text is getting selected even when an action menu fails to invoke
        https://bugs.webkit.org/show_bug.cgi?id=138576
        -and corresponding-
        rdar://problem/18931330

        Reviewed by Tim Horton.

        Selection changes should happen in willOpenMenu: instead of prepareForMenu:
        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController willOpenMenu:withEvent:]):

        _selectLookupText no longer needs to return a BOOL indicating success or failure.
        (-[WebActionMenuController _selectLookupText]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):

        Pass willOpenMenu: on to the controller.
        * WebView/WebView.mm:
        (-[WebView willOpenMenu:withEvent:]):

2014-11-10  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * WebView/WebActionMenuController.mm:

2014-11-10  Beth Dakin  <bdakin@apple.com>

        Action menu initialization should be moved to _commonInitializationWithFrameName
        https://bugs.webkit.org/show_bug.cgi?id=138572
        -and corresponding-
        rdar://problem/18929733

        Reviewed by Tim Horton.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _initWithFrame:frameName:groupName:]):

2014-11-10  Beth Dakin  <bdakin@apple.com>

        WK1: Support default actions for read-only text
        https://bugs.webkit.org/show_bug.cgi?id=138552
        -and corresponding-
        rdar://problem/18877483

        Reviewed by Tim Horton.

        New WKSystemInterface functions that WebCore needs to use.
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

        WebActionMenuController now keeps an ivar for the WebCore::HitTestResult. This 
        makes a lot of things easier.
        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:

        Perform the hit test ourselves instead of calling into WebView so that we can more 
        easily save the WebCore::HitTestResult for ourselves.
        (-[WebActionMenuController performHitTestAtPoint:]):

        Clear selection for non-text menus.
        (-[WebActionMenuController prepareForMenu:withEvent:]):

        Re-set the _type here just to be safe.
        (-[WebActionMenuController didCloseMenu:withEvent:]):

        Moving this method to be next to the link actions so they can be within a pragma 
        mark.
        (-[WebActionMenuController _defaultMenuItemsForLink:]):

        New method for default text actions — lookup and copy.
        (-[WebActionMenuController _defaultMenuItemsForText:]):
        (-[WebActionMenuController _copySelection:]):
        (-[WebActionMenuController _lookupText:]):

        If there is not already a selection, invoking the action menu on text should 
        select the lookup text.
        (-[WebActionMenuController _selectLookupText]):
        (performDictionaryLookupForSelection):
        (performDictionaryLookupForRange):

        Handle text now.
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):

        New enum values.
        * WebView/WebUIDelegatePrivate.h:

        Pass didCloseMenu on to the controller.
        * WebView/WebView.mm:
        (-[WebView didCloseMenu:withEvent:]):

2014-11-09  Chris Dumez  <cdumez@apple.com>

        Add a more correct way to compare floating point numbers and use it
        https://bugs.webkit.org/show_bug.cgi?id=138527

        Reviewed by Darin Adler.

        Use the new WTF::areEssentuallyEqual() utility function from MathExtras.h
        to compare floating-point numbers.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _adjustedBottomOfPageWithTop:bottom:limit:]):

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

        Delete cookies between tests
        https://bugs.webkit.org/show_bug.cgi?id=138528

        Reviewed by Sam Weinig.

        * WebView/WebPreferences.mm: (+[WebPreferences _clearNetworkLoaderSession]):
        * WebView/WebPreferencesPrivate.h:
        Added an SPI for DumpRenderTree.

2014-11-07  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Update optimized fullscreen media controls
        https://bugs.webkit.org/show_bug.cgi?id=138493

        Reviewed by Brent Fulgham.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize GetMediaUIImageData.

2014-11-06  Daniel Jalkut  <jalkut@red-sweater.com>

        Wrap the bulk of -[WebView dealloc] with an autorelease pool.
        https://bugs.webkit.org/show_bug.cgi?id=138443

        Reviewed by Anders Carlsson.

        Wrapping the dealloc method in its own autorelease pool avoids the problem of
        complex tear-downs leading to the WebView itself being added to an autorelease
        pool that is not drained until after the instance has been dealloc'd.
 
        * WebView/WebView.mm:
        (-[WebView dealloc]):

2014-11-05  Jer Noble  <jer.noble@apple.com>

        De-templatize Timer
        https://bugs.webkit.org/show_bug.cgi?id=138450

        Reviewed by Anders Carlsson.

        Remove template specifiers from Timer.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::deliverDataTimerFired):

2014-11-05  Dan Bernstein  <mitz@apple.com>

        Remove the unused deletion UI feature
        https://bugs.webkit.org/show_bug.cgi?id=138442

        Rubber-stamped by Alexey Proskuryakov.

        * DefaultDelegates/WebDefaultEditingDelegate.m:
        (-[WebDefaultEditingDelegate webView:shouldShowDeleteInterfaceForElement:]): Deleted.
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldShowDeleteInterface): Deleted.
        * WebView/WebEditingDelegatePrivate.h: Removed declaration of
        -webView:shouldShowDeleteInterfaceForElement:.

2014-11-03  Dean Jackson  <dino@apple.com>

        Add ENABLE_FILTERS_LEVEL_2 feature guard.
        https://bugs.webkit.org/show_bug.cgi?id=138362

        Reviewed by Tim Horton.

        Add a new feature define for Level 2 of CSS Filters.
        http://dev.w3.org/fxtf/filters-2/

        * Configurations/FeatureDefines.xcconfig:

2014-11-03  Jeremy Jones  <jeremyj@apple.com>

        Add button and enable optimized fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=138351

        Reviewed by Eric Carlson.

        Add IsOptimizedFullscreenSupported to enable the feature only where appropriate.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): added

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

        Add ptr() method to Ref class
        https://bugs.webkit.org/show_bug.cgi?id=138361

        Reviewed by Darin Adler.

        Use the new Ref::ptr() method.

        * WebView/WebFrame.mm:
        (-[WebFrame _setTypingStyle:withUndoAction:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _applyStyleToSelection:withUndoAction:]):
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        * WebView/WebView.mm:
        (-[WebView applyStyle:]):

2014-11-04  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        * WebView/WebDataSource.mm:
        (-[WebDataSource data]): Use SharedBuffer directly.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Ditto.

2014-11-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r175406, r175413, and r175423.
        https://bugs.webkit.org/show_bug.cgi?id=138327

        Multipart tests are still broken (Requested by ap on #webkit).

        Reverted changesets:

        "Eliminate ResourceBuffer and use SharedBuffer directly
        instead"
        https://bugs.webkit.org/show_bug.cgi?id=138174
        http://trac.webkit.org/changeset/175406

        "Unreviewed, iOS build fix since 175406."
        http://trac.webkit.org/changeset/175413

        "Fix assertion in CachedResource::addDataBuffer"
        http://trac.webkit.org/changeset/175423

2014-10-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr for TypeCountSet
        https://bugs.webkit.org/show_bug.cgi?id=138242

        Reviewed by Andreas Kling.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]): Use std::unique_ptr<> instead of OwnPtr.
        (+[WebCoreStatistics javaScriptObjectTypeCounts]): ditto.

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

        Use system art for action menus when possible
        https://bugs.webkit.org/show_bug.cgi?id=138260

        Reviewed by Tim Horton.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):

2014-10-30  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        * WebView/WebDataSource.mm:
        (-[WebDataSource data]): Use SharedBuffer directly.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Ditto.

2014-10-30  Jer Noble  <jer.noble@apple.com>

        [EME] Add Setting for accessing storage location for MediaKeys data
        https://bugs.webkit.org/show_bug.cgi?id=138147

        Reviewed by Brady Eidson.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set default location.
        (-[WebPreferences mediaKeysStorageDirectory]): Simple accessor.
        (-[WebPreferences setMediaKeysStorageDirectory:]): Simple setter.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Pass location from WebPreferences into Settings.

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Prepare for the mysterious future

        Reviewed by Lucas Forschler.

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

2014-10-28  Jeremy Jones  <jeremyj@apple.com>

        Add optimized fullscreen mode.
        https://bugs.webkit.org/show_bug.cgi?id=138044

        Reviewed by Jer Noble.

        Enable different types of fullscreen video behavior.
        Add an enum parameter to enterVideoFullscreenForVideoElement for alternate types of fullscreen.

        * WebCoreSupport/WebChromeClient.h: Add fullscreenType parameter
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::enterVideoFullscreenForVideoElement): ditto
        * WebView/WebView.mm:
        (-[WebView _enterVideoFullscreenForVideoElement:type:]): ditto
        (-[WebView _enterVideoFullscreenForVideoElement:]): Deleted.
        * WebView/WebViewInternal.h: ditto

2014-10-27  Beth Dakin  <bdakin@apple.com>

        Provide a way for WebKit1 clients to override default action menu items
        https://bugs.webkit.org/show_bug.cgi?id=138066
        -and corresponding-
        rdar://problem/18451638

        Reviewed by Anders Carlsson.

        WebActionMenuController now has an ivar for the WebActionMenuType so that it can 
        send that along to clients customizing the menu.
        * WebView/WebActionMenuController.h:
        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController prepareForMenu:withEvent:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):

        New enum and new SPI to customize menus.
        * WebView/WebUIDelegatePrivate.h:

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

        Fix the iOS build

        * Configurations/WebKitLegacy.xcconfig:
        * WebView/WebView.mm:

2014-10-24  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * WebView/WebActionMenuController.mm:
        (-[WebActionMenuController _openURLFromActionMenu:]):
        (-[WebActionMenuController _addToReadingListFromActionMenu:]):
        (-[WebActionMenuController _quickLookURLFromActionMenu:]):

2014-10-24  Beth Dakin  <bdakin@apple.com>

        WebKit1 should support action menus
        https://bugs.webkit.org/show_bug.cgi?id=138032

        Reviewed by Tim Horton.

        This patch adds basic support for action menus and adds actions for links.

        Helper class takes care of all of the action menu work. WebView will forward the 
        prepareForMenu: message, and then the helper class takes it from there.
        * WebView/WebActionMenuController.h: Added.
        * WebView/WebActionMenuController.mm: Added.
        (-[WebActionMenuController webViewClosed]):
        (-[WebActionMenuController prepareForMenu:withEvent:]):

        Selectors for link actions.
        (-[WebActionMenuController _openURLFromActionMenu:]):
        (-[WebActionMenuController _addToReadingListFromActionMenu:]):
        (-[WebActionMenuController _elementBoundingBoxFromDOMElement:]):
        (-[WebActionMenuController _quickLookURLFromActionMenu:]):
        (-[WebActionMenuController _createActionMenuItemForTag:withHitTestResult:]):
        (webKitBundleImageNamed):
        (-[WebActionMenuController _defaultMenuItemsForLink:]):
        (-[WebActionMenuController _defaultMenuItemsForHitTestResult:]):

        Tags for the action menu items.
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:

        Set the action menu if possible and create the controller.
        (-[WebView _initWithFrame:frameName:groupName:]):
        (-[WebView _close]):
        (-[WebView prepareForMenu:withEvent:]):

        WebViewData stores the WebActionMenuHelper
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):

2014-10-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to have alternate inspector agents
        https://bugs.webkit.org/show_bug.cgi?id=137901

        Reviewed by Brian Burg.

        * Configurations/FeatureDefines.xcconfig:

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

        Add some SPI headers for NSExtension and NSSharingService{Picker}
        https://bugs.webkit.org/show_bug.cgi?id=138027

        Reviewed by Anders Carlsson.

        * Misc/WebSharingServicePickerController.h:
        * Misc/WebSharingServicePickerController.mm:
        * WebCoreSupport/WebSelectionServiceController.mm:
        * WebCoreSupport/WebContextMenuClient.mm:
        Fix a sorting issue.
        Replace redefinitions with SPI header #imports.

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

        Crashes under WebSelectionServiceController::hasRelevantSelectionServices
        https://bugs.webkit.org/show_bug.cgi?id=138013

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebSelectionServiceController.mm:
        (WebSelectionServiceController::hasRelevantSelectionServices):
        Don't adopt this autoreleased object.

2014-10-22  Chris Dumez  <cdumez@apple.com>

        [Mac][WK2] Fix applicationIsSafari() detection
        https://bugs.webkit.org/show_bug.cgi?id=137893

        Reviewed by Alexey Proskuryakov.

        Provide an implementation for FrameLoaderClient's new
        needsQuickLookResourceCachingQuirks() that returns
        a static flag initialized using
        QuickLookMac::computeNeedsQuickLookResourceCachingQuirks().

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2014-10-20  Chris Dumez  <cdumez@apple.com>

        ResourceRequest deserialization unnecessarily calls partitionName() on encoded cache partition
        https://bugs.webkit.org/show_bug.cgi?id=137797

        Reviewed by Darin Adler.

        Call ResourceRequest::setDomainForPartitionName() instead of
        setPartitionName() as the argument is a domain, not a valid
        partition name.

        * Misc/WebCache.mm:
        (+[WebCache addImageToCache:forURL:forFrame:]):
        (+[WebCache removeImageFromCacheForURL:forFrame:]):

2014-10-20  Andy Estes  <aestes@apple.com>

        Fix the iOS build.

        * WebView/WebFrame.mm:
        (-[WebFrame getDictationResultRanges:andMetadatas:]):
        (-[WebFrame dictationResultMetadataForRange:]):

2014-10-19  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for all remaining RenderObject subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137845

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for all remaining RenderObject subclasses and 
        clean up the surrounding code.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView _windowClipRect]):
        (-[WebBaseNetscapePluginView actualVisibleRectInWindow]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        (WebFrameLoaderClient::createJavaAppletWidget):

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

        Build fix for 32-bit Yosemite

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuForEvent):
        Avoid using NSItemProvider in 32-bit, because it doesn't exist.

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=137804

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for RenderBox and clean up the surrounding
        code.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::clientFloatRectForNode):
        * WebView/WebFrame.mm:
        (-[WebFrame renderedSizeOfNode:constrainedToWidth:]):

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

        Fix the build with the public SDK.

        * WebCoreSupport/WebSelectionServiceController.mm:
        We should transition all this SPI to real SPI headers as soon as possible.

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

        Implement selection services menu for Legacy WebKit
        https://bugs.webkit.org/show_bug.cgi?id=137582
        <rdar://problem/18604241>

        Reviewed by Brady Eidson.

        * Misc/WebSharingServicePickerController.h:
        Move SPI into the header (in the near future it will be moved to a modern-style SPI header).
        Add WebSharingServicePickerClient, which other classes can implement
        instead of tying WebSharingServicePickerController strongly to WebContextMenuClient.
        Make initWithData:... -> initWithItems:... instead, taking an array of NSItemProviders.

        * Misc/WebSharingServicePickerController.mm:
        Pass in NSSharingServicePickerStyle, so that clients can specify the style.

        (-[WebSharingServicePickerController clear]):
        (-[WebSharingServicePickerController didShareImageData:confirmDataIsValidTIFFData:]):
        (-[WebSharingServicePickerController sharingServicePicker:didChooseSharingService:]):
        (-[WebSharingServicePickerController sharingService:sourceFrameOnScreenForShareItem:]):
        (-[WebSharingServicePickerController sharingService:transitionImageForShareItem:contentRect:]):
        (-[WebSharingServicePickerController sharingService:sourceWindowForShareItems:sharingContentScope:]):
        Make use of WebSharingServicePickerClient.

        (-[WebSharingServicePickerController sharingService:didShareItems:]):
        If we're returned a NSAttributedString, paste it on top of the current selection,
        similar to what the WebKit2 implementation currently does.
        
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::handleTelephoneNumberClick):
        (WebChromeClient::handleSelectionServiceClick):
        (WebChromeClient::hasRelevantSelectionServices):
        Override the services-related ChromeClient functions, forward them to WebSelectionServiceController.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::sharingServicePickerWillBeDestroyed):
        (WebContextMenuClient::pageForSharingServicePicker):
        (WebContextMenuClient::windowForSharingServicePicker):
        (WebContextMenuClient::screenRectForCurrentSharingServicePickerItem):
        (WebContextMenuClient::imageForCurrentSharingServicePickerItem):
        (WebContextMenuClient::contextMenuForEvent):
        (WebContextMenuClient::screenRectForHitTestNode): Deleted.
        (WebContextMenuClient::renderedImageForControlledImage): Deleted.
        (WebContextMenuClient::clearSharingServicePickerController): Deleted.
        Have WebContextMenuClient implement WebSharingServicePickerClient to avoid
        having WebSharingServicePickerController tightly bound to it.
        Make an NSItemProvider array when instantiating WebSharingServicePickerController
        instead of handing it data directly.

        * WebCoreSupport/WebSelectionServiceController.h: Copied from Source/WebKit/mac/WebCoreSupport/WebContextMenuClient.h.
        * WebCoreSupport/WebSelectionServiceController.mm: Added.
        (WebSelectionServiceController::WebSelectionServiceController):
        Add WebSelectionServiceController, which will act as the WebSharingServicePickerClient
        for selection services.

        (WebSelectionServiceController::handleSelectionServiceClick):
        Create a WebSharingSericePickerController with the selection's attributed string, and show its menu.

        (hasCompatibleServicesForItems):
        (WebSelectionServiceController::hasRelevantSelectionServices):
        Determine whether or not services are available.

        (WebSelectionServiceController::sharingServicePickerWillBeDestroyed):
        (WebSelectionServiceController::pageForSharingServicePicker):
        (WebSelectionServiceController::windowForSharingServicePicker):
        Implement the rest of the WebSharingServicePickerClient overrides.

        (WebSelectionServiceController::screenRectForCurrentSharingServicePickerItem):
        (WebSelectionServiceController::imageForCurrentSharingServicePickerItem):
        These are only useful for image sharing services, so we don't need to
        implement them (WebContextMenuClient does, on the other hand).

        * WebView/WebView.mm:
        (-[WebView _selectionServiceController]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        * WebView/WebViewInternal.h:
        Keep a WebSelectionServiceController.

2014-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Improve debug description of WAKViews
        https://bugs.webkit.org/show_bug.cgi?id=137716

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (-[WebView _touchEventRegions]): Adding a comment.

2014-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        Addressing post-review comment.
        https://bugs.webkit.org/show_bug.cgi?id=137550

        Unreviewed.

        * WebView/WebHTMLView.mm:
        (fontNameForDescription):
        (-[WebHTMLView _addToStyle:fontA:fontB:]):

2014-10-14  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderImage
        https://bugs.webkit.org/show_bug.cgi?id=137683

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for RenderImage.

        * Misc/WebNSPasteboardExtras.mm:
        (imageFromElement):
        (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):

2014-10-10  Daniel Bates  <dabates@apple.com>

        Remove unused classes WebRender{Node, Layer}
        https://bugs.webkit.org/show_bug.cgi?id=137628

        Reviewed by Simon Fraser.

        We no longer make use of the WebKit1-specific classes WebRenderNode and WebRenderLayer.
        For completeness, there is a WebKit2 analogue of WebRenderLayer by the same name.

        * Configurations/WebKitLegacy.xcconfig: Remove file WebRenderNode.mm from the list
        of excluded source files when building for iOS.
        * WebKit.exp: Remove symbol for WebRenderLayer.
        * WebKit.mac.exp: Remove symbol for WebRenderNode.
        * WebView/WebRenderLayer.h: Removed.
        * WebView/WebRenderLayer.mm: Removed.
        * WebView/WebRenderNode.h: Removed.
        * WebView/WebRenderNode.mm: Removed.

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBoxModelObject
        https://bugs.webkit.org/show_bug.cgi?id=137587

        Reviewed by Mihnea Ovidenie.

        Use is<>() / downcast<>() for RenderBoxModelObject and clean up the
        surrounding code.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView invalidatePluginContentRect:]):
        * WebView/WebRenderLayer.mm:
        (-[WebRenderLayer initWithWebFrame:]):

2014-10-09  Dean Jackson  <dino@apple.com>

        Remove ENABLE_CSS3_CONDITIONAL_RULES
        https://bugs.webkit.org/show_bug.cgi?id=137571

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        Add a WebKit1 preference for selection services
        https://bugs.webkit.org/show_bug.cgi?id=137498
        <rdar://problem/18572699>

        Reviewed by Simon Fraser.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences serviceControlsEnabled]):
        (-[WebPreferences setServiceControlsEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Add and plumb the preference.

2014-10-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove second-to-last client of WebFontCache
        https://bugs.webkit.org/show_bug.cgi?id=137550

        Reviewed by Darin Adler.

        Use FontCache::getCachedFontData() instead of WebFontCache.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _addToStyle:fontA:fontB:]):

2014-10-09  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Widget subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137549

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Widget subclasses and clean up the
        surrounding code.

        * WebView/WebRenderNode.mm:
        (copyRenderNode):
        * WebView/WebView.mm:
        (-[WebView _addScrollerDashboardRegionsForFrameView:dashboardRegions:]):

2014-10-07  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderText / RenderTextFragment
        https://bugs.webkit.org/show_bug.cgi?id=137476

        Reviewed by Darin Adler.

        * WebView/WebRenderNode.mm:
        (copyRenderNode):

2014-10-06  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Misc/WebCache.mm:
        (+[WebCache imageForURL:]):

2014-10-06  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r174333.

        Forgot explicit WebCore:: namespace.

        * Misc/WebCache.mm:
        (+[WebCache imageForURL:]):

2014-10-05  Christophe Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for CachedResource subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137431

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for CachedResource subclasses.

        * Misc/WebCache.mm:
        (+[WebCache imageForURL:]):

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

        Use version number 101000 instead of 10100 for OS X Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=137372

        Reviewed by Mark Rowe.

        The version number for OS X Yosemite is 101000.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Move PageOverlay[Controller] to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=137164
        <rdar://problem/18508258>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachViewOverlayGraphicsLayer):
        Add an empty ChromeClient override.

2014-10-01  Christophe Dumez  <cdumez@apple.com>

        Have is<>(T*) function do a null check on the pointer argument
        https://bugs.webkit.org/show_bug.cgi?id=137333

        Reviewed by Gavin Barraclough.

        Have is<>(T*) function do a null check on the argument instead of a
        simple assertion. This makes sense for 2 reasons:
        1. It is more consistent with downcast<>(T*), which will succeed even
           if the argument is a nullptr.
        2. It simplifies the code a bit as it gets rid of a lot of explicit
           null checks.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedElementChanged):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        (WebEditorClient::textDidChangeInTextArea):
        * WebView/WebHTMLRepresentation.mm:
        (inputElementFromDOMElement):
        (searchForLabelsBeforeElement):
        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):

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

        <https://webkit.org/b/137308> WebKit should build on OS X Yosemite for external users

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig: Use libWebKitSystemInterfaceYosemite.a on Yosemite.

2014-09-30  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Element
        https://bugs.webkit.org/show_bug.cgi?id=137241

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Element instead of isElementNode() /
        toElement().

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):

2014-09-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move ColorInputType class to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=137173

        Reviewed by Darin Adler.

        Replace uses of PassOwnPtr in code under ColorInputType class with std::unique_ptr.
        Child classes follow this change as well.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createColorChooser):

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Add initial is<>() / downcast<>() support for any type of Nodes
        https://bugs.webkit.org/show_bug.cgi?id=137056

        Reviewed by Benjamin Poulain.

        Use is<HTMLFormControlElement>() / downcast<HTMLFormControlElement>()
        instead of isFormControlElement() / toHTMLFormControlElement().

        * WebView/WebHTMLRepresentation.mm:
        (searchForLabelsBeforeElement):

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Use is<HTML*Element>() instead of isHTML*Element() - Part 1
        https://bugs.webkit.org/show_bug.cgi?id=137068

        Reviewed by Ryosuke Niwa.

        Start using is<HTML*Element>() instead of isHTML*Element().
        Remaining usages will be updated in a follow-up patch to
        reduce the size of the change.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedElementChanged):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        (WebEditorClient::textDidChangeInTextArea):
        * WebView/WebHTMLRepresentation.mm:
        (inputElementFromDOMElement):

2014-09-21  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector use a separate web process.

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

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::releaseFrontend):
        Own WebInspectorFrontendClient instead of moving it.

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Use downcast<HTML*Element>() instead of toHTML*Element()
        https://bugs.webkit.org/show_bug.cgi?id=137007

        Reviewed by Benjamin Poulain.

        Use downcast<HTML*Element>() instead of toHTML*Element().

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setAutofilled:]):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedElementChanged):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        (WebEditorClient::textDidChangeInTextArea):
        * WebView/WebHTMLRepresentation.mm:
        (inputElementFromDOMElement):

2014-09-21  Chris Dumez  <cdumez@apple.com>

        Generate Element casting helper functions
        https://bugs.webkit.org/show_bug.cgi?id=136839

        Reviewed by Darin Adler.

        Use JSXXX::toWrapped() instead of toXXX() function.

        * DOM/WebDOMOperations.mm:
        * WebView/WebView.mm:
        (-[WebView _notificationIDForTesting:]):

2014-09-21  Joseph Pecoraro  <pecoraro@apple.com>

        Leak: WebNotificationPrivate ObjC leaks seen on leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=136972

        Reviewed by Darin Adler.

        * WebView/WebNotification.h:
        * WebView/WebNotification.mm:
        (-[WebNotification initWithCoreNotification:notificationID:]):
        Switch to RetainPtr and adopt into _private to ensure when we are
        deallocated that _private will get deallocated.

2014-09-19  Dean Jackson  <dino@apple.com>

        Multithreaded WebGL is a bad idea - remove it
        https://bugs.webkit.org/show_bug.cgi?id=136964
        <rdar://problem/18399858>

        Reviewed by Brent Fulgham.

        Remove the setting to allow multithreaded WebGL.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences multithreadedWebGLEnabled]): Deleted.
        (-[WebPreferences setMultithreadedWebGLEnabled:]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-09-19  Daniel Bates  <dabates@apple.com>

        Always assume internal SDK when building configuration Production
        https://bugs.webkit.org/show_bug.cgi?id=136925
        <rdar://problem/18362399>

        Reviewed by Dan Bernstein.

        As a side effect of this change we will always enable ENABLE_TOUCH_EVENTS, ENABLE_IOS_{GESTURE, TOUCH}_EVENTS,
        and ENABLE_XSLT when either building configuration Production or building with the Internal SDK.

        * Configurations/Base.xcconfig:

2014-09-17  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r173695.

        Broke building third-party Legacy WebKit apps; will
        investigate offline

        Reverted changeset:

        "[iOS] Make WebCore build with public iOS SDK"
        https://bugs.webkit.org/show_bug.cgi?id=136487
        http://trac.webkit.org/changeset/173695

2014-09-17  Daniel Bates  <dabates@apple.com>

        [iOS] Make WebCore build with public iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=136487

        Reviewed by David Kilzer.

        Update WebKit1 source files to include the wrapper SPI headers instead of the corresponding
        actual SPI header(s).

        * DOM/WebDOMOperationsPrivate.h:
        * MigrateHeaders.make: Modified to only modify the include path of a "<WebCore/"-prefixed header
        file if its filename doesn't end in "SPI.h" as an alternative to having MigrateHeaders.make copy
        such files into the WebKit framework as private headers.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebInspector/WebNodeHighlight.mm:
        * WebView/WebIndicateLayer.mm:
        * WebView/WebRenderLayer.h:
        * WebView/WebView.mm:

2014-09-16  Daniel Bates  <dabates@apple.com>

        [iOS] Add iOS SDK name and version suffix to WebKitSystemInterface debug/release product name
        https://bugs.webkit.org/show_bug.cgi?id=136862

        Reviewed by David Kilzer.

        * Configurations/DebugRelease.xcconfig:

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

        Remove PLATFORM(IOS) from WebCore/editing (Part 3).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This is the updated version of the patch that was landed in r173340.
        This patch removes the use of PLATFORM(IOS) from TextAffinity.h
        and removes the assumption that EAffinity values match NSSelectionAffinity
        values. It also removes the includes in TextAffinity.h, creating the need to
        include explicitly the files when necessary.

        * WebCoreSupport/WebEditorClient.h:
        (kit):
        (core):

2014-09-14  Daniel Bates  <dabates@apple.com>

        [iOS] Attempt to fix the iOS build after <http://trac.webkit.org/changeset/173606>
        (https://bugs.webkit.org/show_bug.cgi?id=136789)

        Substitute Node::countChildNodes() for Node::childNodeCount() in more places.

        * WebView/WebFrame.mm:
        (-[WebFrame focusedNodeHasContent]):

2014-09-14  Chris Dumez  <cdumez@apple.com>

        Rename Node::childNodeCount() to countChildNodes() and avoid inefficient uses
        https://bugs.webkit.org/show_bug.cgi?id=136789

        Reviewed by Darin Adler.

        Rename childNodeCount() to countChildNodes().

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedString]):

2014-09-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Re-add the request autocomplete feature

        <https://bugs.webkit.org/show_bug.cgi?id=136730>

        This feature was rolled out in r148731 because it was only used by
        Chromium. As we consider supporting this feature, roll it back in, but
        leave it disabled.

        This rolls out r148731 (which removed the feature) with small changes
        needed to make the code build in ToT, to match modern style, to make
        the tests run, and to remove unused code.

        Reviewed by Andy Estes.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebFrameLoaderClient.h:

2014-09-12  Commit Queue  <commit-queue@webkit.org>

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

        Failing tests (Requested by enrica on #webkit).

        Reverted changeset:

        "Remove PLATFORM(IOS) from WebCore/editing (Part 3)."
        https://bugs.webkit.org/show_bug.cgi?id=136474
        http://trac.webkit.org/changeset/173575

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

        Remove PLATFORM(IOS) from WebCore/editing (Part 3).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This is the updated version of the patch that was landed in r173340.
        I changed the use of IntPoint to FloatPoint since it was causing tests
        to fail.
        This patch removes the use of PLATFORM(IOS) from TextAffinity.h
        and removes the assumption that EAffinity values match NSSelectionAffinity
        values. It also removes the includes in TextAffinity.h, creating the need to
        include explicitly the files when necessary. It also removes the unnecessary
        use of platform specific types, replacing them with WebCore types.

        * WebCoreSupport/WebEditorClient.h:
        (kit):
        (core):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):

2014-09-11  Bear Travis  <betravis@adobe.com>

        [CSS Font Loading] Enable CSS Font Loading on Mac
        https://bugs.webkit.org/show_bug.cgi?id=135473

        Reviewed by Antti Koivisto.

        Enable CSS Font Loading in FeatureDefines.

        * Configurations/FeatureDefines.xcconfig:

2014-09-11  Beth Dakin  <bdakin@apple.com>

        Support rubber-banding in sub-frames
        https://bugs.webkit.org/show_bug.cgi?id=136726
        -and corresponding-
        rdar://problem/10011924

        Reviewed by Tim Horton.

        rubberBandingForOverflowScrollEnabled is re-named to
        rubberBandingForSubScrollableRegionsEnabled
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-09-09  Benjamin Poulain  <bpoulain@apple.com>

        Disable the "unreachable-code" warning
        https://bugs.webkit.org/show_bug.cgi?id=136677

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2014-09-08  Maciej Stachowiak  <mjs@apple.com>

        Fix 32-bit Mac build for new warnings
        https://bugs.webkit.org/show_bug.cgi?id=136624

        Reviewed by Darin Adler.
        
        (Jessie already fixed this but my version with typedefs seems a tiny bit cleaner.)

        * Carbon/HIViewAdapter.m:
        (+[HIViewAdapter bindHIViewToNSView:nsView:]): Need to use explicit casting now.

2014-09-08  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove FILTERS flag
        https://bugs.webkit.org/show_bug.cgi?id=136571

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2014-09-08  Jessie Berlin  <jberlin@apple.com>

        32-bit build fix after r173364.

        * Carbon/HIViewAdapter.m:
        (+[HIViewAdapter bindHIViewToNSView:nsView:]):

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

        Build fix.

        Added back SPI that is still in use.

        * Misc/WebNSURLExtras.h:
        * Misc/WebNSURLExtras.mm:
        (-[NSURL _webkit_URLByRemovingFragment]):

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

        iOS Simulator build fix.

        * Misc/WebKitSystemBits.m:
        (WebMemorySize):

2014-09-07  Darin Adler  <darin@apple.com>

        Fix build failure seen on Mountain Lion buildbot.

        * Misc/WebNSDataExtras.h: Make WEB_GUESS_MIME_TYPE_PEEK_LENGTH an unsigned instead
        of an int, to avoid warning about mixing signs.

2014-09-06  Darin Adler  <darin@apple.com>

        Make updates suggested by new version of Xcode
        https://bugs.webkit.org/show_bug.cgi?id=136603

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Added CLANG_WARN_UNREACHABLE_CODE, COMBINE_HIDPI_IMAGES,
        and ENABLE_STRICT_OBJC_MSGSEND as suggested by Xcode upgrade check.

        * History/WebURLsWithTitles.m:
        (+[WebURLsWithTitles writeURLs:andTitles:toPasteboard:]): Use NSUInteger instead of
        unsigned for correctness, and to quiet the 32-to-64-bit compiler warning (which is
        not turned on because it gives us too many false positives).
        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary objectForKey:]): Ditto.
        * Misc/WebNSDataExtras.m:
        (-[NSData _webkit_guessedMIMETypeForXML]): Ditto.
        (-[NSData _webkit_guessedMIMEType]): Ditto.
        (-[NSData _webkit_parseRFC822HeaderFields]): Ditto.
        (-[NSData _web_locationAfterFirstBlankLine]): Ditto.

        * Misc/WebNSURLExtras.h: Removed unused _web_URLWithLowercasedScheme, _web_hostData,
        _webkit_URLByRemovingFragment, _webkit_URLByRemovingResourceSpecifier, _webkit_isFTPDirectoryURL,
        _webkit_shouldLoadAsEmptyDocument, _web_hostNameNeedsDecodingWithRange:,
        _web_hostNameNeedsEncodingWithRange:, _web_decodeHostNameWithRange:, _web_encodeHostNameWithRange:,
        and _webkit_URLFragment methods.

        * Misc/WebNSURLExtras.mm:
        (-[NSURL _web_URLByTruncatingOneCharacterBeforeComponent:]): Deleted.
        (-[NSURL _webkit_URLByRemovingFragment]): Deleted.
        (-[NSURL _webkit_URLByRemovingResourceSpecifier]): Deleted.
        (-[NSURL _webkit_isFTPDirectoryURL]): Deleted.
        (-[NSURL _webkit_shouldLoadAsEmptyDocument]): Deleted.
        (-[NSURL _web_URLWithLowercasedScheme]): Deleted.
        (-[NSString _webkit_isFTPDirectoryURL]): Deleted.
        (-[NSString _web_hostNameNeedsDecodingWithRange:]): Deleted.
        (-[NSString _web_hostNameNeedsEncodingWithRange:]): Deleted.
        (-[NSString _web_decodeHostNameWithRange:]): Deleted.
        (-[NSString _web_encodeHostNameWithRange:]): Deleted.
        (-[NSString _webkit_URLFragment]): Deleted.

        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase removePluginInstanceViewsFor:]): Use a modern for loop
        to iterate an array instead of a loop using the type "unsigned int".

        * WebCoreSupport/WebOpenPanelResultListener.mm:
        (-[WebOpenPanelResultListener chooseFilenames:]): Use NSUInteger instead of int.

        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate): Use wtfCallIMP in one overload that was instead just calling the
        directly without a proper type for the function pointer. This might have been causing
        an actual problem on 64-bit systems, and it was different from all the other CallDelegate
        functions that were already doing this correctly.

        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _placePopupWindow:]): Use NSUInteger instead of int.

2014-09-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: convert DockSide to an enum class
        https://bugs.webkit.org/show_bug.cgi?id=136601

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::frontendLoaded):
        (-[WebInspectorWindowController attachWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):
        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend attach]):

2014-09-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r173340 and r173342.
        https://bugs.webkit.org/show_bug.cgi?id=136596

        Broke many tests (Requested by ap on #webkit).

        Reverted changesets:

        "Remove PLATFORM(IOS) from WebCore/editing (Part 3)."
        https://bugs.webkit.org/show_bug.cgi?id=136474
        http://trac.webkit.org/changeset/173340

        "Build fix after r173340."
        http://trac.webkit.org/changeset/173342

2014-09-05  Enrica Casucci  <enrica@apple.com>

        Build fix after r173340.

        * WebCoreSupport/WebEditorClient.h:
        (kit):
        (core):

2014-09-05  Enrica Casucci  <enrica@apple.com>

        Remove PLATFORM(IOS) from WebCore/editing (Part 3).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Benjamin Poulain.

        This patch removes the use of PLATFORM(IOS) from TextAffinity.h
        and removes the assumption that EAffinity values match NSSelectionAffinity
        values. It also removes the includes in TextAffinity.h, creating the need to
        include explicitly the files when necessary. It also removes the unnecessary
        use of platform specific types, replacing them with WebCore types.

        * WebCoreSupport/WebEditorClient.h: Added kit and core for EAffinity.
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):

2014-09-05  Daniel Bates  <dabates@apple.com>

        [iOS] Another attempt to fix the iOS build after <http://trac.webkit.org/changeset/173309>
        (https://bugs.webkit.org/show_bug.cgi?id=136564)

        Move #endif inside -viewDidMoveToWindow up one line such that the closing brace ('}') is after it.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewDidMoveToWindow]):

2014-09-05  Daniel Bates  <dabates@apple.com>

        [iOS] Another attempt to fix the iOS build after <http://trac.webkit.org/changeset/173309>
        (https://bugs.webkit.org/show_bug.cgi?id=136564)

        Add !PLATFORM(IOS)-guard in -viewDidMoveToWindow around code that references WebHTMLViewPrivate.flagsChangedEventMonitor.
        The instance variable WebHTMLViewPrivate.flagsChangedEventMonitor is guarded by !PLATFORM(IOS).

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewDidMoveToWindow]):

2014-09-05  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the iOS build after <http://trac.webkit.org/changeset/173309>
        (https://bugs.webkit.org/show_bug.cgi?id=136564)

        Include more code inside the !PLATFORM(IOS)-guarded section in -setDataSource:.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView setDataSource:]):

2014-09-04  Maciej Stachowiak  <mjs@apple.com>

        Use tracking areas instead of (SPI) mouse moved notifications, and follow flags changes with an event monitor
        https://bugs.webkit.org/show_bug.cgi?id=136564

        Reviewed by Dan Bernstein.
        
        WebKit1 depended on mouse moved event notifications to track mouse
        moves, and on being specially called by Safari to track flags
        changes. WebKit2 does both these things better - it uses a tracking area
        and event monitors. Copy those approaches.

        * WebKit.order: Remove reference to obsolete call.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]): No need to deallocate tracking
        area, since we now just always have one.
        (-[WebHTMLViewPrivate clear]): ditto
        (-[WebHTMLView _postFakeMouseMovedEventForFlagsChangedEvent:]):
        New method that posts a fake mouse move event in response to
        a flags change event, for use by the event monitor.
        (+[WebHTMLView _postFlagsChangedEvent:]): Empty this old call,
        still kept around for benefit of older Safari.
        (-[WebHTMLView _updateMouseoverWithEvent:]): Handle Dashboard's
        special mouseover mode (previously handled in a weird way).
        (-[WebHTMLView close]): No more need to mess with mouse moved observer.
        (-[WebHTMLView viewWillMoveToWindow:]): ditto
        (-[WebHTMLView viewDidMoveToWindow]): ditto; but now hook up a flags
        changed monitor.
        (-[WebHTMLView windowDidBecomeKey:]): No need to handle non-key window
        tracking area or mouse moved observer.
        (-[WebHTMLView windowDidResignKey:]): ditto
        (-[WebHTMLView windowWillOrderOnScreen:]): No need to mess with mouse
        moved observer.
        (-[WebHTMLView windowWillOrderOffScreen:]): ditto
        (-[WebHTMLView mouseMoved:]): Converted from the old mouseMovedNotification:
        (-[WebHTMLView setDataSource:]): Change if around body to early return. Hook
        up tracking area - we have to do it here, because before this point, the
        WebHTMLView does not know its WebView, which is where dashboard settings
        live.
        (-[WebHTMLView _removeMouseMovedObserverUnconditionally]): Deleted.
        (-[WebHTMLView addMouseMovedObserver]): Deleted.
        (-[WebHTMLView removeMouseMovedObserver]): Deleted.

2014-09-04  Pratik Solanki  <psolanki@apple.com>

        Bring back [WebPreferences setDiskImageCacheEnabled:] for backwards compatibility
        https://bugs.webkit.org/show_bug.cgi?id=136560

        Reviewed by Joseph Pecoraro.

        I removed the disk image caching code in r173265. However, we still have clients that call
        setDiskImageCacheEnabled. Add in a stub method until we can wean the clients off this call.

        * WebView/WebPreferences.mm:
        (-[WebPreferences setDiskImageCacheEnabled:]):
        * WebView/WebPreferencesPrivate.h:

2014-09-03  Andy Estes  <aestes@apple.com>

        [Cocoa] Some WebKitLegacy headers migrated from WebCore incorrectly contain WEBCORE_EXPORT
        https://bugs.webkit.org/show_bug.cgi?id=136521

        Reviewed by Anders Carlsson.

        Taught MigrateHeaders.make to remove WEBCORE_EXPORT from headers using this sed expression:

            s/(^ *)WEBCORE_EXPORT /\1/g

        This removes WEBCORE_EXPORT and a single following space character but preserves preceeding spaces.

        * MigrateHeaders.make:

2014-09-04  Maciej Stachowiak  <mjs@apple.com>

        Remove WebCoreSystemInterface glue for otherwise unused WKSI calls
        https://bugs.webkit.org/show_bug.cgi?id=136527

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2014-09-04  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        Remove CSS_FILTERS flag
        https://bugs.webkit.org/show_bug.cgi?id=136529

        Reviewed by Dirk Schulze.

        * Configurations/FeatureDefines.xcconfig:

2014-09-04  Pratik Solanki  <psolanki@apple.com>

        Remove iOS specific disk image cache
        https://bugs.webkit.org/show_bug.cgi?id=136517

        Reviewed by Antti Koivisto.

        Disk image cache code unnecessarily complicates SharedBuffer implementation. We can remove
        this now since we don't enable it in WebKit2 on iOS.

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        * WebView/WebDataSource.mm:
        (-[WebDataSource _setAllowToBeMemoryMapped]):
        (-[WebDataSource setDataSourceDelegate:]):
        (-[WebDataSource dataSourceDelegate]):
        (-[WebDataSource dealloc]):
        (BufferMemoryMapped): Deleted.
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences diskImageCacheEnabled]): Deleted.
        (-[WebPreferences setDiskImageCacheEnabled:]): Deleted.
        (-[WebPreferences diskImageCacheMinimumImageSize]): Deleted.
        (-[WebPreferences setDiskImageCacheMinimumImageSize:]): Deleted.
        (-[WebPreferences diskImageCacheMaximumCacheSize]): Deleted.
        (-[WebPreferences setDiskImageCacheMaximumCacheSize:]): Deleted.
        (-[WebPreferences _diskImageCacheSavedCacheDirectory]): Deleted.
        (-[WebPreferences _setDiskImageCacheSavedCacheDirectory:]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (+[WebView _handleMemoryWarning]):
        (-[WebView _preferencesChanged:]):

2014-09-04  Daniel Bates  <dabates@apple.com>

        [iOS] Make iOS build when ENABLE_TOUCH_EVENT and ENABLE_IOS_TOUCH_EVENTS disabled
        https://bugs.webkit.org/show_bug.cgi?id=136494

        Reviewed by Andy Estes.

        * MigrateHeaders.make: Migrate header WebEventRegion.h only when ENABLE_IOS_TOUCH_EVENTS is defined.
        * WebView/WebView.mm: Substitute ENABLE(IOS_TOUCH_EVENTS) for ENABLE(TOUCH_EVENTS).

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: fix prefixes for subclasses of JSC::ConsoleClient
        https://bugs.webkit.org/show_bug.cgi?id=136476

        Reviewed by Timothy Hatcher.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):

2014-09-03  Enrica Casucci  <enrica@apple.com>

        Remove PLATFORM(IOS) from WebCore/editing (Part 1).
        https://bugs.webkit.org/show_bug.cgi?id=136474

        Reviewed by Tim Horton.

        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction):

2014-09-02  Maciej Stachowiak  <mjs@apple.com>

        Clean up naming for and slightly refactor legacy video fullscreen support
        https://bugs.webkit.org/show_bug.cgi?id=136446

        Reviewed by Jer Noble.

        Key changes:
        supportsFullscreenForNode(Node*) --> supportsVideoFullscreen()
        enterFullscreenForNode(Node*) --> enterVideoFullscreenForVideoElement(HTMLVideoElement*)
        exitFullscreenForNode(Node*) --> exitVideoFullscreen()
        
        The old versions had unnecessary parameters, did not clearly distinguish their purpose
        from enterFullscreenForElement and friends, and wrongly claimed generality to all Nodes.
        Also changed many other places to use HTMLVideoElement* instead of Node* or 
        HTMLMediaElement* when they were in fact only used for video elements and would only
        work for such.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsVideoFullscreen): Adjust for main refactoring.
        Also no more need to check for video elementness.
        (WebChromeClient::enterVideoFullscreenForVideoElement): Adjust for main refactoring.
        (WebChromeClient::exitVideoFullscreen): ditto
        * WebView/WebView.mm:
        (-[WebView _enterVideoFullscreenForVideoElement:]): Adjust for main
        refactoring.
        (-[WebView _exitVideoFullscreen]): ditto
        (-[WebView _close]): ditto
        * WebView/WebViewInternal.h:

2014-09-03  Dan Bernstein  <mitz@apple.com>

        Get rid of HIGH_DPI_CANVAS leftovers
        https://bugs.webkit.org/show_bug.cgi?id=136491

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Removed definition of ENABLE_HIGH_DPI_CANVAS
        and removed it from FEATURE_DEFINES.

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

        Remove unnecessary (and unnecessarily iOS-specific) setStrokeAndFillColor
        https://bugs.webkit.org/show_bug.cgi?id=136416

        Reviewed by Dan Bernstein.

        * WebView/WebFrameView.mm:
        (-[WebFrameView drawRect:]):
        We only end up filling, so only set the fill color.

2014-08-26  Maciej Stachowiak  <mjs@apple.com>

        Use RetainPtr::autorelease in some places where it seems appropriate
        https://bugs.webkit.org/show_bug.cgi?id=136280

        Reviewed by Darin Adler.

        * WebView/WebHTMLView.mm:
        (imageFromRect): Use RetainPtr in this function.
        * WebView/WebPDFRepresentation.mm:
        (-[WebPDFRepresentation convertPostScriptDataSourceToPDF:]): Use RetainPtr
        in this method.

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

        Unreviwed, remove empty directories.

        * ForwardingHeaders/wtf: Removed.

2014-08-27  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: Rename LayoutRect's device pixel snapping functions.
        https://bugs.webkit.org/show_bug.cgi?id=136319

        Reviewed by Simon Fraser.

        From pixelSnappedForPainting() to snapRectToDevicePixels() and 
        pixelSnappedIntRect*() to snappedIntRect*().

        No change in functionality.

        * WebView/WebView.mm:
        (-[WebView _dashboardRegions]):
        (-[WebView trackedRepaintRects]):

2014-08-25  Maciej Stachowiak  <mjs@apple.com>

        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
        https://bugs.webkit.org/show_bug.cgi?id=136082

        Reviewed by Alexey Proskuryakov.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost): Get current
        localization name using WebCore helper instead of SPI.
        * Plugins/WebBasePluginPackage.mm: Fixed the include style for this 
        file.
        (-[WebBasePluginPackage getPluginInfoFromPLists]): Get current
        localization name using WebCore helper instead of SPI.
        (+[WebBasePluginPackage preferredLocalizationName]): Deleted. This
        helper no longer pulls its weight.
        * WebCoreSupport/WebSystemInterface.mm: 
        (InitWebCoreSystemInterface): Remove mention of
        WKCopyCFLocalizationPreferredName.
        * WebKit.order: ditto

2014-08-25  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/172889>
        (https://bugs.webkit.org/show_bug.cgi?id=109658)

        Substitute GraphicsLayer::setContentsToPlatformLayer(..., GraphicsLayer::ContentsLayerForMedia)
        for GraphicsLayer::setContentsToMedia(...) because the latter was removed in <http://trac.webkit.org/changeset/172889>.

        * WebView/WebView.mm:
        (-[WebView _setMediaLayer:forPluginView:]):

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

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

        Broke iOS build (Requested by othermaciej on #webkit).

        Reverted changeset:

        "Replace use of WKCopyCFLocalizationPreferredName with
        NSLocale public API"
        https://bugs.webkit.org/show_bug.cgi?id=136082
        http://trac.webkit.org/changeset/172866

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

        Implement paint flashing in the WK1 InspectorOverlay page
        https://bugs.webkit.org/show_bug.cgi?id=136138

        Reviewed by Sam Weinig, Joseph Pecoraro.

        Implement paint flashing for the WebKit1 InspectorOverlay via a second canvas in the overlay page.
        We avoid allocating backing store for this canvas until we have paint rects.
        
        Because this overlay page is weird and doesn't know how to paint itself, InspectorOverlay manages
        an array of rects, and pushes them to the page when they change, before forcing a paint.
        
        Because iOS doesn't use the InspectorOverlay page, stub out setShowPaintRects on its
        WebKit WebInspectorClient, but don't yet implement paint flashing there.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):

2014-08-20  Maciej Stachowiak  <mjs@apple.com>

        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
        https://bugs.webkit.org/show_bug.cgi?id=136082

        Reviewed by Alexey Proskuryakov.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost): Get current
        localization name using WebCore helper instead of SPI.
        * Plugins/WebBasePluginPackage.mm: Fixed the include style for this 
        file.
        (-[WebBasePluginPackage getPluginInfoFromPLists]): Get current
        localization name using WebCore helper instead of SPI.
        (+[WebBasePluginPackage preferredLocalizationName]): Deleted. This
        helper no longer pulls its weight.
        * WebCoreSupport/WebSystemInterface.mm: 
        (InitWebCoreSystemInterface): Remove mention of
        WKCopyCFLocalizationPreferredName.
        * WebKit.order: ditto

2014-08-22  Daniel Bates  <dabates@apple.com>

        [iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUCH_EVENTS
        and ENABLE_XSLT when building with the iOS public SDK
        https://bugs.webkit.org/show_bug.cgi?id=135945

        Reviewed by Andy Estes.

        * Configurations/FeatureDefines.xcconfig: Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, ENABLE_TOUCH_EVENTS
        and ENABLE_XSLT when building with the public SDK.
        * MigrateHeaders.make: Conditionally migrate headers for touch and gesture events.

2014-08-22  Jon Lee  <jonlee@apple.com>

        Fix iOS build due to r172832 and move RUBBER_BANDING out of FeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=136157

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE(RUBBER_BANDING).
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Wrap in ENABLE(RUBBER_BANDING).

2014-08-21  Zalan Bujtas  <zalan@apple.com>

        Enable SATURATED_LAYOUT_ARITHMETIC.
        https://bugs.webkit.org/show_bug.cgi?id=136106

        Reviewed by Simon Fraser.

        SATURATED_LAYOUT_ARITHMETIC protects LayoutUnit against arithmetic overflow.
        (No measurable performance regression on Mac.)

        * Configurations/FeatureDefines.xcconfig:

2014-08-21  Beth Dakin  <bdakin@apple.com>

        overflow:scroll elements should support rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=91655

        Reviewed by Sam Weinig and Darin Adler.

        Disable rubber-banding in overflow areas for now.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-08-19  Pratik Solanki  <psolanki@apple.com>

        Remove PurgeableBuffer since it is not very useful any more
        https://bugs.webkit.org/show_bug.cgi?id=135939

        Reviewed by Andreas Kling.

        * Misc/WebCache.mm:
        (+[WebCache statistics]):

2014-08-19  Zalan Bujtas  <zalan@apple.com>

        Remove ENABLE(SUBPIXEL_LAYOUT).
        https://bugs.webkit.org/show_bug.cgi?id=136077

        Reviewed by Simon Fraser.

        Remove compile time flag SUBPIXEL_LAYOUT. All ports have it enabled for a while now.

        * Configurations/FeatureDefines.xcconfig:

2014-08-18  Maciej Stachowiak  <mjs@apple.com>

        Use NSURLFileTypeMappings directly instead of depending on WebKitSystemInterface wrappers for it
        https://bugs.webkit.org/show_bug.cgi?id=136035

        Reviewed by Dan Bernstein.

        * Misc/WebNSViewExtras.m:
        (-[NSView _web_DragImageForElement:rect:event:pasteboard:source:offset:]): Remove comment
        reference to obsolete WKSI function.
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Don't initialize the no-longer-used WKGetExtensionsForMIMEType,
        WKGetPreferredExtensionForMIMEType, or WKGetMIMETypeForExtension
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase pluginForExtension:]): Include SPI header from WebCore; use
        NSURLFileTypeMappings directly instead of via WKSI wrapper.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::objectContentType): ditto
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _imageExistsAtPaths:]): ditto
        * WebView/WebView.mm:
        (+[WebView _supportedFileExtensions]): ditto
        (+[WebView suggestedFileExtensionForMIMEType:]): ditto
        (+[WebView _MIMETypeForFile:]): ditto

2014-08-18  Commit Queue  <commit-queue@webkit.org>

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

        Caused 14% PLT regressions (Requested by rniwa on #webkit).

        Reverted changeset:

        "Remove PurgeableBuffer since it is not very useful any more"
        https://bugs.webkit.org/show_bug.cgi?id=135939
        http://trac.webkit.org/changeset/172736

2014-08-18  Pratik Solanki  <psolanki@apple.com>

        Remove PurgeableBuffer since it is not very useful any more
        https://bugs.webkit.org/show_bug.cgi?id=135939

        Reviewed by Geoffrey Garen.

        * Misc/WebCache.mm:
        (+[WebCache statistics]):

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

        REGRESSION (r167856): adobe.com no longer able to launch Create Cloud app using a URL with a custom scheme
        https://bugs.webkit.org/show_bug.cgi?id=136010

        Reviewed by Darin Adler.

        * Misc/WebKitVersionChecks.h: Removed WEBKIT_FIRST_VERSION_WITH_NAVIGATION_URL_VALIDATION.
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Passed AllowNavigationToInvalidURL::Yes to FrameLoader::loadFrameRequest.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Reverted the linked-on-or-after check added in r170120 since it's no longer necessary.

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

        Revert r172697.

        It made several webarchive layout tests flaky and didn't have the correct behavior for non-quick redirects.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        REGRESSION (r167856): adobe.com no longer able to launch Create Cloud app using a URL with a custom scheme
        https://bugs.webkit.org/show_bug.cgi?id=136010

        Reviewed by Darin Adler.

        Reverted the linked-on-or-after check added in r170120 since it is no longer necessary.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-08-16  Maciej Stachowiak  <mjs@apple.com>

        Remove the obsolete WebKitEnableCoalescedUpdatesPreferenceKey
        https://bugs.webkit.org/show_bug.cgi?id=136024

        Reviewed by Filip Pizlo.

        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]): Remove code that respects
        this key. It was SPI and is no longer used; also it was
        only relevant for versions of OS X that WebKit no longer supports.
        * WebView/WebPreferenceKeysPrivate.h: Remove declaration.

2014-08-15  Daniel Bates  <dabates@apple.com>

        [iOS] Teach postprocess-headers.sh to remove code guarded by ENABLE_IOS_GESTURE_EVENTS
        and ENABLE_TOUCH_EVENTS if applicable
        https://bugs.webkit.org/show_bug.cgi?id=135993

        Reviewed by Andy Estes.

        Add support infrastructure to remove code from public and private API headers that is
        guarded by macro define ENABLE_{IOS_GESTURE, TOUCH}_EVENTS when these features are disabled.

        We aren't using this functionality yet, but we will soon.

        * postprocess-headers.sh:

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

        Enable CSS_SCROLL_SNAP for iOS
        https://bugs.webkit.org/show_bug.cgi?id=135915

        Turn on CSS_SCROLL_SNAP for iOS and the iOS simulator.

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2014-08-13  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/135911> WebKit should build on Yosemite with the public SDK.

        Reviewed by Darin Adler.

        * Misc/WebSharingServicePickerController.mm: Forward-declare some details related to NSSharingServicePicker.

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

        Web Inspector: Workaround a NSWindow change to the title bar.
        https://bugs.webkit.org/show_bug.cgi?id=135880

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::setToolbarHeight): Only call setContentBorderThickness: on 10.9 and earlier.
        (-[WebInspectorWindowController init]): Only call setDrawsBackground: on 10.9 and earlier.
        (-[WebInspectorWindowController window]): Set titlebarAppearsTransparent on 10.10.
        Only call border thickness APIs on 10.9 and earlier.

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

        Runtime switch for long mouse press gesture. Part of 135257 - Add long mouse press gesture.           
        https://bugs.webkit.org/show_bug.cgi?id=135682

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:
        Remove LONG_MOUSE_PRESS feature flag.

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.

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.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]): Use 10100 instead of 1090 for the version.

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

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/Dock.pdf: Added.
        * Resources/DockLegacy.pdf: Copied from Source/WebKit/mac/Resources/Dock.pdf.
        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]): Use new images.

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  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  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.

        * WebView/WebPreferences.mm: (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]):
        Moved implementation to WebCore, so that it can be shared with WebKit2.

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

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  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.

        * WebCoreSupport/WebGeolocationClient.mm:
        (WebGeolocationClient::requestPermission):

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.

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:]): Use view instead of window.

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/WebKitLegacy.xcconfig: Removed -framework MobileAsset from
        OTHER_LDFLAGS_iphoneos.

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:

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.

        * Plugins/Hosted/ProxyInstance.mm:
        * Plugins/Hosted/ProxyRuntimeObject.mm:

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.

        * Misc/WebDownload.mm:
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Use new nsCredential
        getter.
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebKit::getAuthenticationInfo): Ditto.

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

        Remove unused preference keys
        https://bugs.webkit.org/show_bug.cgi?id=135280

        Reviewed by Darin Adler.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences _setPageCacheSize:]): Deleted.
        (-[WebPreferences _pageCacheSize]): Deleted.
        (-[WebPreferences _setObjectCacheSize:]): Deleted.
        (-[WebPreferences _objectCacheSize]): Deleted.
        * WebView/WebPreferencesPrivate.h:

2014-07-27  Filip Pizlo  <fpizlo@apple.com>

        Merge r170090, r170092, r170129, r170141, r170161, r170215, r170275, r170375, r170376, r170382, r170383, r170399, r170436, r170489, r170490, r170556 from ftlopt.

    2014-07-25  Mark Lam  <mark.lam@apple.com>
    
            [ftlopt] Renamed DebuggerActivation to DebuggerScope.
            <https://webkit.org/b/134273>
    
            Reviewed by Michael Saboff.
    
            * WebView/WebScriptDebugDelegate.mm:
            - Removed unneeded #include.
    
2014-07-26  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, roll out r171641-r171644. It broke some tests; will investigate and
        reland later.

        * WebView/WebScriptDebugDelegate.mm:

2014-07-25  Filip Pizlo  <fpizlo@apple.com>

        Merge r170090, r170092, r170129, r170141, r170161, r170215, r170275, r170375, r170376, r170382, r170383, r170399, r170436, r170489, r170490, r170556 from ftlopt.

    2014-07-25  Mark Lam  <mark.lam@apple.com>
    
            [ftlopt] Renamed DebuggerActivation to DebuggerScope.
            <https://webkit.org/b/134273>
    
            Reviewed by Michael Saboff.
    
            * WebView/WebScriptDebugDelegate.mm:
            - Removed unneeded #include.
    
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.

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:]): Pass window instead of view.

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

        [iOS] Remove prefs to tweak cache values
        https://bugs.webkit.org/show_bug.cgi?id=135274
        <rdar://problem/17784826>

        Reviewed by Alexey Proskuryakov.

        Remove iOS specific code that used to look up user defaults to see if any cache values were
        overridden. This was added for testing, is not used any more and is actually harmful now. It
        can cause unnecessary memory churn when under memory pressure since we call [WebView _setCacheModel]
        as a means to clear out memory cache.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences _setNSURLMemoryCacheSize:]): Deleted.
        (-[WebPreferences _NSURLMemoryCacheSize]): Deleted.
        (-[WebPreferences _setNSURLDiskCacheSize:]): Deleted.
        (-[WebPreferences _NSURLDiskCacheSize]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

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>

        WebKit 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.

        * Misc/WebDownload.mm:
        (-[WebDownloadInternal download:didReceiveAuthenticationChallenge:]): Chanegd to use the
        ProtectionSpace constructor that takes an NSURLProtectionSpace.

        * Plugins/WebBaseNetscapePluginView.mm:
        (WebKit::getAuthenticationInfo): Ditto.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace): Changed to use
        ProtectionSpace::nsSpace.

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-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.

        * WebCoreSupport/WebEditorClient.h:

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.

        Provide UIView to WebVideoFullscreenController

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:]): pass UIView instead of nil

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

        Unreviewed iOS build fix after r171321.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        WK1 should always setAcceleratedCompositingForFixedPositionEnabled(true) on 
        Yosemite
        https://bugs.webkit.org/show_bug.cgi?id=135135

        Reviewed by Darin Adler.

        Get rid of the ChromeClient function, and enable the Setting instead.
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition): Deleted.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Build fix.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition):

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

        Put position:fixed elements into layers when a WK1 view is layer-backed
        https://bugs.webkit.org/show_bug.cgi?id=135075

        Reviewed by Darin Adler.

        Returns true when the WebHTMLView has a layer.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::requiresAcceleratedCompositingForViewportConstrainedPosition):

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.

        * WebCoreSupport/WebFrameLoaderClient.h: Override contentFilterDidBlockLoad().
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad): Reset contentFilterForBlockedLoad to nullptr.
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Check if this is navigation represents an
        unblock request and ignore if so.
        * WebView/WebFrame.mm:
        (-[WebFrame _contentFilterDidHandleNavigationAction:]): Called ContentFilter::handleUnblockRequestAndDispatchIfSuccessful().
        If the unblock is successful, reload the main frame.
        * WebView/WebFrameInternal.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
        WebKitLegacy.xcconfig.
        * Configurations/DebugRelease.xcconfig: Remove empty
        SECTORDER_FLAGS definition.
        * Configurations/WebKit.xcconfig: Removed.  Unused.
        * Configurations/WebKitLegacy.xcconfig: Use $(CONFIGURATION) so
        SECTORDER_FLAGS is only set on Production builds.

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.

        * WebInspector/WebInspector.mm:
        (-[WebInspector isProfilingJavaScript]):
        (-[WebInspector toggleProfilingJavaScript:]):
        (-[WebInspector startProfilingJavaScript:]):
        (-[WebInspector stopProfilingJavaScript:]):
        (-[WebInspector isJavaScriptProfilingEnabled]):
        (-[WebInspector setJavaScriptProfilingEnabled:]):

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: Rename WebKit.order to
        WebKitLegacy.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.

        * WebCoreSupport/WebSecurityOrigin.mm:
        (+[WebSecurityOrigin webSecurityOriginFromDatabaseIdentifier:]): Added.
        (-[WebSecurityOrigin initWithURL:]): Update using RefPtr API to avoid a ref().

2014-07-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [OSX] [WK1] Crash when exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=134943

        Reviewed by Dean Jackson.

        AppKit doesn't remove a view from the Key View Loop when removing it from its superview.

        This codepath is already "tested" in fullscreen/full-screen-cancel.html, but because of our
        testing infrastructure, the broken codepath doesn't actually get hit in DRT. Therefore,
        there is no test.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullScreen:]):

        * WebCoreSupport/WebSecurityOriginPrivate.h:

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-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

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

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.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]):
        Use a selector that will avoid the warning message.

2014-07-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r167770): Cannot login in Evernote Safari extension
        https://bugs.webkit.org/show_bug.cgi?id=134776

        Reviewed by Enrica Casucci.

        Unfortunately, NSWindowDidBecomeKeyNotification does not notify us when a popover becomes key
        so we need to keep using the SPI (_windowChangedKeyState) I removed in r167770.

        * WebView/WebView.mm:
        (-[WebView _windowChangedKeyState]):

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

        Implement Editor::fontAttributesForSelectionStart() or iOS.
        https://bugs.webkit.org/show_bug.cgi?id=134771
        <rdar://problem/16167838>

        Reviewed by Ryosuke Niwa.

        * WebView/WebViewPrivate.h:

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.

        * WebView/WebPreferences.mm:
        (-[WebPreferences setSubpixelCSSOMElementMetricsEnabled:]):
        Remove an extra unnecessary space.

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().

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::setCurrentReply):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebFrameLoaderClient::dispatchWillSubmitForm):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        * WebView/WebArchive.mm:
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]):

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.

        * WebView/WebView.mm:
        (webKitBundleVersionString): Return the entire CFBundleVersion now that WebCore handles formatting it.
        (+[WebView _standardUserAgentWithApplicationName:]):

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

        Remove some code only needed for versions of Safari that are no longer supported
        https://bugs.webkit.org/show_bug.cgi?id=134537

        Reviewed by Anders Carlsson.

        * History/WebHistoryItem.mm:
        * Misc/WebKitVersionChecks.h:
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin domain]): Deleted.
        * WebInspector/WebInspector.mm:
        (-[WebInspector showTimeline:]): Deleted.
        (+[WebInspector webInspector]): Deleted.
        (-[WebInspector setWebFrame:]): Deleted.
        (-[WebInspector window]): Deleted.
        (-[WebInspector showWindow:]): Deleted.
        * WebView/WebFrame.mm:
        (-[WebFrame reload]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]):
        (-[WebPDFView _anyPDFTagsFoundInMenu:]): Deleted.
        * WebView/WebView.mm:
        (-[WebView _initWithFrame:frameName:groupName:]):
        (-[WebView _preferencesChanged:]):
        (-[WebView initWithFrame:frameName:groupName:]):
        (-[WebView _initWithFrame:frameName:groupName:usesDocumentViews:]): Deleted.
        (+[WebView _setAlwaysUseATSU:]): Deleted.
        (-[WebView _needsUnrestrictedGetMatchedCSSRules]): Deleted.
        * WebView/WebViewPrivate.h:

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

        Remove WebChromeClient code that was only needed for Safari versions earlier than 3.1
        https://bugs.webkit.org/show_bug.cgi?id=134531

        Reviewed by Daniel Bates.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota):

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-27  Sam Weinig  <sam@webkit.org>

        InfoClick (from Nisus Software) dies on viewing found items
        <rdar://problem/17395601>
        https://bugs.webkit.org/show_bug.cgi?id=134410

        Reviewed by Andy Estes.

        InfoClick was calling -[WebPreferences setPrivateBrowsingEnabled:] before
        setting up a WebView (or anything else that would have set up WebKitSystemInterface),
        which now requires a set up WebKitSystemInterface. We can fix this by initializing
        it from +[WebPreferences initialize].

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        Add call to InitWebCoreSystemInterface().

        (+[WebPreferences _switchNetworkLoaderToNewTestingSession]):
        Remove now unnecessary call to InitWebCoreSystemInterface().

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  Brady Eidson  <beidson@apple.com>

        Remove use of PlatformStrategies for Gamepad API.
        https://bugs.webkit.org/show_bug.cgi?id=134348

        Reviewed by Dean Jackson.

        Remove all the GamepadStrategy gunk:
        * WebCoreSupport/WebHIDGamepadController.mm: Removed.
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createGamepadStrategy): Deleted.
        (WebPlatformStrategies::startMonitoringGamepads): Deleted.
        (WebPlatformStrategies::stopMonitoringGamepads): Deleted.
        (WebPlatformStrategies::platformGamepads): Deleted.

        Instead, install the HIDGamepadProvider as the shared GamepadProvider:
        * WebView/WebView.mm:
        (WebKitInitializeGamepadProviderIfNecessary):
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2014-06-26  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Remove User Default for iOS TextField Debugging
        https://bugs.webkit.org/show_bug.cgi?id=134356

        Reviewed by Timothy Hatcher.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

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

        Add HID-based gamepad implementation for Mac
        https://bugs.webkit.org/show_bug.cgi?id=134324

        Reviewed by Dean Jackson.

        Add a class that acts as an intermediary between the GamepadStrategyClient
        and the HIDGamepadListener:
        * WebCoreSupport/WebHIDGamepadController.h:
        * WebCoreSupport/WebHIDGamepadController.mm:
        (WebHIDGamepadController::shared):
        (WebHIDGamepadController::WebHIDGamepadController):
        (WebHIDGamepadController::gamepadConnected):
        (WebHIDGamepadController::gamepadDisconnected):
        (WebHIDGamepadController::registerGamepadStrategyClient):
        (WebHIDGamepadController::unregisterGamepadStrategyClient):

        Implement the strategies by using the HIDGamepadListener:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::startMonitoringGamepads):
        (WebPlatformStrategies::stopMonitoringGamepads):
        (WebPlatformStrategies::platformGamepads):

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.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createGamepadStrategy):
        (WebPlatformStrategies::startMonitoringGamepads):
        (WebPlatformStrategies::stopMonitoringGamepads):
        (WebPlatformStrategies::platformGamepads):

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

        Should _updateVisibilityState on view hide/unhide.
        https://bugs.webkit.org/show_bug.cgi?id=134314
        rdar://17171803

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView viewDidHide]):
        (-[WebView viewDidUnhide]):

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.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validAttributesForMarkedText]):
        (-[WebHTMLView insertText:]):

2014-06-25  Dana Burkart  <dburkart@apple.com>

        Add support for 5-tuple versioning.

        Reviewed by David Farler.

        * Configurations/Version.xcconfig:

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  Benjamin Poulain  <bpoulain@apple.com>

        WK1 WebFrameNetworkingContext cleanup: do not instanciate an empty NSString to create an empty WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=134222

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::sourceApplicationIdentifier):

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.

        * WebInspector/WebNodeHighlightView.mm:
        (-[WebNodeHighlightView layoutSublayers:]):

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:

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences gamepadsEnabled]):
        (-[WebPreferences setGamepadsEnabled:]):
        * WebView/WebPreferencesPrivate.h:

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Fixed the iOS build after r170358.

        * WebView/WebView.mm:
        (kit):

2014-06-23  Anders Carlsson  <andersca@apple.com>

        Remove unused history visit code from WebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=134201

        Reviewed by Sam Weinig.

        * History/HistoryPropertyList.h:
        * History/HistoryPropertyList.mm:
        (HistoryPropertyListWriter::HistoryPropertyListWriter):
        (HistoryPropertyListWriter::writeHistoryItem):
        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:]):
        (-[WebHistoryPrivate addItem:discardDuplicate:]):
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:]):
        (-[WebHistoryPrivate visitedURL:withTitle:increaseVisitCount:]): Deleted.
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:increaseVisitCount:]): Deleted.
        * History/WebHistoryInternal.h:
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem copyWithZone:]):
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        (-[WebHistoryItem _visitedWithTitle:]):
        (-[WebHistoryItem setVisitCount:]): Deleted.
        (-[WebHistoryItem _mergeAutoCompleteHints:]): Deleted.
        (-[WebHistoryItem _visitedWithTitle:increaseVisitCount:]): Deleted.
        (-[WebHistoryItem _recordInitialVisit]): Deleted.
        (timeToDay): Deleted.
        (-[WebHistoryItem _padDailyCountsForNewVisit:]): Deleted.
        (-[WebHistoryItem _collapseDailyVisitsToWeekly]): Deleted.
        (-[WebHistoryItem _recordVisitAtTime:increaseVisitCount:]): Deleted.
        (-[WebHistoryItem _setLastVisitedTimeInterval:]): Deleted.
        * History/WebHistoryItemInternal.h:
        * History/WebHistoryItemPrivate.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory):

2014-06-24  Eva Balazsfalvi  <evab.u-szeged@partner.samsung.com>

        REGRESSION(r170235): Remove incorrect ifdef guard
        https://bugs.webkit.org/show_bug.cgi?id=134246

        Reviewed by Csaba Osztrogonác.

        * WebView/WebView.mm:
        (-[WebView _visibilityState]):

2014-06-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2014-06-21  Dan Bernstein  <mitz@apple.com>

        Tried to fix the iOS build after r170235.

        * WebView/WebView.mm:

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-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  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:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        (-[WebView _visibilityState]):

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.

        * WebView/WebFrame.mm:
        (toWebFrameLoadType):
        (-[WebFrame _loadType]):
        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):
        (-[WebView goToBackForwardItem:]):

2014-06-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r167856): Unable to log into HSBC app
        https://bugs.webkit.org/show_bug.cgi?id=133991
        <rdar://problem/17044839>

        Reviewed by David Kilzer.

        Only enable the setting allowNavigationToInvalidURL for iOS app linked against WebKit/UIKit before iOS 8.

        * Misc/WebKitVersionChecks.h: Added macro constant WEBKIT_FIRST_VERSION_WITH_NAVIGATION_URL_VALIDATION.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Enable or disable the setting allowNavigationToInvalidURL as appropriate.

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.

        * WebView/WebArchive.mm:
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
        * WebView/WebDataSource.mm:
        (-[WebDataSource subresources]):

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.

        * WebView/WebDataSource.mm:
        (-[WebDataSource data]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionDraggingImage]):
        (-[WebHTMLView selectionImageForcingBlackText:selectionImageForcingBlackText:]):
        * WebView/WebResource.mm:
        (-[WebResource data]):

2014-06-11  Jeremy Jones  <jeremyj@apple.com>

        WebFrameNetworkContext should not have a sourceApplicationIdentifier in WK1.
        https://bugs.webkit.org/show_bug.cgi?id=133772

        Reviewed by Jer Noble.

        Return empty string from sourceApplicationIdentifier for WK1.

        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::sourceApplicationIdentifier):

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.

        * WebView/WebViewData.h:

2014-06-05  Pratik Solanki  <psolanki@apple.com>

        Remove unsused method _setAcceleratedImageDecoding
        https://bugs.webkit.org/show_bug.cgi?id=133554

        Reviewed by Jon Honeycutt.

        * WebView/WebView.mm:
        (+[WebView _setAcceleratedImageDecoding:]): Deleted.
        * WebView/WebViewPrivate.h:

2014-06-05  Benjamin Poulain  <bpoulain@apple.com>

        [iOS][WK2] Add device orientation
        https://bugs.webkit.org/show_bug.cgi?id=133530

        Reviewed by Tim Horton.

        * WebView/WebFrame.mm:
        (-[WebFrame deviceOrientationChanged]):
        (-[WebFrame sendOrientationChangeEvent:]):
        * WebView/WebFramePrivate.h:

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.

        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

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:
        * WebView/WebView.mm:
        (+[WebView _canHandleRequest:forMainFrame:]):

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.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::accessibilityScreenToRootView):
        (WebChromeClient::rootViewToAccessibilityScreen):

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.

        * WebView/WebView.mm:
        (-[WebView viewDidMoveToWindow]):
        now calls: requestHideAndExitFullscreen

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.

        Replace the call to wkPopupMenuWithSize with wkPopupMenu, now
        with extra parameters to indicate the control size and whether
        or not to draw the arrows at the end.

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::show):

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.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Settings::setShouldManageAudioSession
            renamed to setShouldManageAudioSessionCategory, deal with it.

2014-05-19  Brady Eidson  <beidson@apple.com>

        Use different AppKit API for image control menus.
        <rdar://problem/16807828> and https://bugs.webkit.org/show_bug.cgi?id=133087

        Reviewed by Tim Horton.

        For image control menus, use popUpMenuPositioningItem: instead of popUpContextMenu:
        
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuForEvent):
        (WebContextMenuClient::showContextMenu):

2014-05-19  Andy Estes  <aestes@apple.com>

        Set WebKitSuppressesIncrementalRenderingKey to NO by default on both Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=133073

        Reviewed by Simon Fraser.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

2014-05-18  Anders Carlsson  <andersca@apple.com>

        Bring back two NSString category methods on iOS
        https://bugs.webkit.org/show_bug.cgi?id=133055
        <rdar://problem/16951983>

        Reviewed by Adele Peterson.

        * Misc/WebNSURLExtras.h:
        * Misc/WebNSURLExtras.mm:
        (-[NSString _webkit_unescapedQueryValue]):
        (-[NSString _webkit_queryKeysAndValues]):

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-17  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Add subpixelCSSOMElementMetricsEnabled to WK1 WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=133029

        Reviewed by Simon Fraser.

        To match the WK2 preferences API.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences subpixelCSSOMElementMetricsEnabled]):
        (-[WebPreferences setSubpixelCSSOMElementMetricsEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setRegionBasedColumnsEnabled:]): Deleted.
        (-[WebPreferences regionBasedColumnsEnabled]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-05-15  Brady Eidson  <beidson@apple.com>

        Crash in [WebSharingServicePickerController clear]
        <rdar://problem/16879073> and https://bugs.webkit.org/show_bug.cgi?id=132968

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController clear]): Add a RetainPtr protector so this object
          isn’t dealloc’ed partway through.

2014-05-15  Simon Fraser  <simon.fraser@apple.com>

        Initialize the WebKitRegionBasedColumnsEnabled pref on iOS WK1
        https://bugs.webkit.org/show_bug.cgi?id=132969

        Reviewed by Dan Bernstein.
        
        Move this outside the #if !PLATFORM(IOS) block.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

2014-05-15  Simon Fraser  <simon.fraser@apple.com>

        Clean up -[WebView _preferencesChanged]
        https://bugs.webkit.org/show_bug.cgi?id=132967

        Reviewed by Sam Weinig.
        
        -[WebView _preferencesChanged] was a horrible mess of #ifdefs. Clean this up by
        moving all the #if PLATFORM() code together, and moving all the feature-define related
        settings to the end.
        
        No behavior changes, checked by diffing the resulting Settings with and without
        the patch, on OS X and iOS.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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.
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):
        Added extra parameters needed when pointer lock is enabled.

2014-05-14  Brady Eidson  <beidson@apple.com>

        Implement NSSharingServiceDelegate method "transitionImageForShareItem"
        <rdar://problem/16878020> and https://bugs.webkit.org/show_bug.cgi?id=132911

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingService:transitionImageForShareItem:contentRect:]):

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::renderedImageForControlledImage): Paint the entire content rect for the controlled image
          into an ImageBuffer, then return the resulting NSImage. This only paints the image itself and not any
          overlapping content by setting the selection and appropriate painting mode.

2014-05-14  Brady Eidson  <beidson@apple.com>

        sourceFrameOnScreenForShareItem: can be off by a pixel
        <rdar://problem/16878020> and https://bugs.webkit.org/show_bug.cgi?id=132911

        Reviewed by Simon Fraser.

        In a land of LayoutUnits and sub-pixel rendering, converting between IntRects and
        FloatRects can be error prone. So we now try to minimize such conversions.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingService:sourceFrameOnScreenForShareItem:]):

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::clientFloatRectForNode): Split this into a separate utility method
          as it will be shared with other code very soon. Instead of using absoluteBoundingBoxRect()
          which does lossy float->int conversions, try to keep things in terms of FloatRects as
          much as possible.
        (WebContextMenuClient::screenRectForHitTestNode): Call clientFloatRectForNode to get the
          FloatRect, then perform the lossy rounding conversion to an IntRect only once.

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-14  Antti Koivisto  <antti@apple.com>

        GIF animations don't restart after scrolling with iOS WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=132900
        <rdar://problem/16490858>

        Reviewed by Andreas Kling.

        * WebView/WebView.mm:
        (-[WebView _didFinishScrollingOrZooming]):
        
            Check if the animations need to be restarted after scrolling finishes.

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.

        Simplify the legacy iOS UIWebViewController case by passing on
        the host process pid and audit_token.

        * WebView/WebView.mm:
        (-[WebView _setHostApplicationProcessIdentifier:auditToken:]):
        (-[WebView setHostApplicationBundleId:name:]): Deleted.
        (-[WebView hostApplicationBundleId]): Deleted.
        (-[WebView hostApplicationName]): Deleted.
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):
        * WebView/WebViewPrivate.h:

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.

        Since there is no warmup code, WebGeolocationPolicyListener no longer need to know about the provider,
        which is awesome :)

        * WebCoreSupport/WebGeolocationClient.mm:
        (-[WebGeolocationPolicyListener initWithGeolocation:forWebView:]):
        (-[WebGeolocationPolicyListener deny]):
        (-[WebGeolocationProviderInitializationListener initializationAllowedWebView:]):
        (-[WebGeolocationProviderInitializationListener initializationDeniedWebView:]):
        (-[WebGeolocationPolicyListener initWithGeolocation:forWebView:provider:]): Deleted.
        (-[WebGeolocationProviderInitializationListener initializationAllowedWebView:provider:]): Deleted.
        (-[WebGeolocationProviderInitializationListener initializationDeniedWebView:provider:]): Deleted.
        * WebView/WebViewPrivate.h:

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.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::sourceApplicationIdentifier):

2014-05-08  Anders Carlsson  <andersca@apple.com>

        Use a different install name for WebKitLegacy.framework for staged framework builds
        https://bugs.webkit.org/show_bug.cgi?id=132711
        <rdar://problem/16850620>

        Reviewed by Dan Bernstein.

        * Configurations/WebKitLegacy.xcconfig:

2014-05-08  Brady Eidson  <beidson@apple.com>

        Wrap a new class definition with __has_include()
        <rdar://problem/16852395> and https://bugs.webkit.org/show_bug.cgi?id=132694

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.mm:

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

        Use system defaults for hardware jpeg decoding
        https://bugs.webkit.org/show_bug.cgi?id=132661
        <rdar://problem/11348201>

        Reviewed by Tim Horton.

        Remove code that explicitly disabled hardware image decoding. Let the system decide what to do.

        * WebView/WebView.mm:
        (+[WebView _setAcceleratedImageDecoding:]):
        (+[WebView _acceleratedImageDecoding]): Deleted.
        * WebView/WebViewPrivate.h:

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

        [Mac, iOS] REGRESSION: WK2 YouTube support
        https://bugs.webkit.org/show_bug.cgi?id=132568
        <rdar://problem/11464344>

        Reviewed by Darin Adler.

        * Misc/WebNSURLExtras.h:
        * Misc/WebNSURLExtras.mm: Remove code that has been converted to C++
        and added to YouTubePluginReplacement.cpp.
        (-[NSURL _webkit_youTubeURL]):
        (-[NSString _webkit_queryKeysAndValues]):
        (createYouTubeURL): Deleted.
        (-[NSString _webkit_unescapedQueryValue]): Deleted.

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.

        * WebView/WebView.mm:
        (-[WebView viewDidMoveToWindow]):
        Request WebVideoFullscreenController to exitFullscreen when view is removed from the window.

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

        Image menu is offset by the amount the view is scrolled
        <rdar://problem/16818966> and https://bugs.webkit.org/show_bug.cgi?id=132663

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::showContextMenu): Use FrameView::contentsToWindow instead of contentsToRoot, 
          and skip the [NSView convertPoint:toView:] step.

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

        WebKit1 is flashy when compositing layers come and go
        https://bugs.webkit.org/show_bug.cgi?id=132655

        Reviewed by Sam Weinig.
        
        In r166117 I removed code to flush compositing layers in FrameView::paintContents(),
        which caused problems when painting iframes. However, this removed a flush
        that WebKit1 relied on to flush compositing layers when painting, which caused
        flashing when compositing layers come and go, and broke WebView snapshotting
        in some cases.
        
        Fix by adding back compositing layer flushing, but this time in WebKit1's
        -viewWillDraw code path. This allows removal of some flushing in DumpRenderTree.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewWillDraw]):
        * WebView/WebView.mm:
        (-[WebView _flushCompositingChanges]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

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.

        * WebKit.order:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences cssGridLayoutEnabled]): Deleted.
        (-[WebPreferences setCSSGridLayoutEnabled:]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add DrawFocusRingAtTime and DrawCellFocusRingWithFrameAtTime.

2014-05-06  Brady Eidson  <beidson@apple.com>

        Don't select an image that is about to have its menu shown.
        <rdar://problem/16807845> and https://bugs.webkit.org/show_bug.cgi?id=132579

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController didShareImageData:confirmDataIsValidTIFFData:]):
          Call the new replaceNodeFromPasteboard API instead of readSelectionFromPasteboard.

2014-05-06  Anders Carlsson  <andersca@apple.com>

        Move the WebKitLegacy header check to the right file
        https://bugs.webkit.org/show_bug.cgi?id=132620
        <rdar://problem/16815716>

        Reviewed by Dan Bernstein.

        * WebKitLegacy/MigrateHeadersFromWebKitLegacy.make:
        * WebKitLegacy/WebKit.h:

2014-05-06  Anders Carlsson  <andersca@apple.com>

        Put WebKitPluginHost.app in WebKitLegacy.framework
        https://bugs.webkit.org/show_bug.cgi?id=132592
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

2014-05-06  Darin Adler  <darin@apple.com>

        [iOS] Fix two more AdoptCF I missed in my last patch.

        * WebView/WebHTMLView.mm:
        (imageFromRect): Use adoptCF instead of AdoptCF.

2014-05-05  Andreas Kling  <akling@apple.com>

        Unreviewed, rolling out r168334.

        Broke builds.

        Reverted changeset:

        "Put WebKitPluginHost.app in WebKitLegacy.framework"
        https://bugs.webkit.org/show_bug.cgi?id=132592
        http://trac.webkit.org/changeset/168334

2014-05-05  Anders Carlsson  <andersca@apple.com>

        Put WebKitPluginHost.app in WebKitLegacy.framework
        https://bugs.webkit.org/show_bug.cgi?id=132592
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):

2014-05-02  Brady Eidson  <beidson@apple.com>

        Implement new delegate method -sharingService:sourceFrameOnScreenForShareItem:.
        <rdar://problem/16797425> and https://bugs.webkit.org/show_bug.cgi?id=132484

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingService:sourceFrameOnScreenForShareItem:]):

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::screenRectForHitTestNode):

2014-05-02  Brady Eidson  <beidson@apple.com>

        Crash inside [WebSharingServicePickerController clear]
        <rdar://problem/16791944> and https://bugs.webkit.org/show_bug.cgi?id=132477

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.h:
        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController clear]): clear can be called twice, so null check _menuClient.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::~WebContextMenuClient): For a sanity check, call clear on the picker here.

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

        More 32-bit build fixes.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingService:didShareItems:]):

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

        Temporarily "fix" the 32-bit build.

        * Misc/WebSharingServicePickerController.mm:
        This will fail miserably at runtime, but we shouldn't ever get here in a 32-bit process.

2014-05-01  Brady Eidson  <beidson@apple.com>

        Update service picker API usage.
        <rdar://problem/16772674> and https://bugs.webkit.org/show_bug.cgi?id=132452

        Reviewed by Tim Horton.

        * Misc/WebSharingServicePickerController.h:
        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController didShareImageData:confirmDataIsValidTIFFData:]):
          Factor out a common "didShare" handler that optionally validates whether the data represents an image.
        (-[WebSharingServicePickerController sharingService:didShareItems:]): Update API usage, including marshalling
          on off-main thread call back to the main thread.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuForEvent): Update API usage.

2014-05-01  Anders Carlsson  <andersca@apple.com>

        Support OS-version-specific install paths for WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132448
        <rdar://problem/16784932>

        Reviewed by Dan Bernstein.

        * WebKitLegacy/WebKit.m:
        Add version specific install names.

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.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList initWithBackForwardList:]):
        (-[WebBackForwardList init]):
        (-[WebBackForwardList dealloc]):
        (-[WebBackForwardList finalize]):
        (-[WebBackForwardList setPageCacheSize:]):
        (-[WebBackForwardList pageCacheSize]):
        * History/WebBackForwardListInternal.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canCachePage):
        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:keyDown:]):
        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):
        (-[WebView initWithCoder:]):
        (-[WebView encodeWithCoder:]):
        (-[WebView backForwardList]):
        (-[WebView setMaintainsBackForwardList:]):

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:
        * Plugins/WebPluginContainerPrivate.h:
        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (-[WebPluginController dealloc]):
        (-[WebPluginController plugInsAreRunning]):
        (-[WebPluginController stopAllPlugins]):
        (-[WebPluginController stopPluginsForPageCache]):
        (-[WebPluginController restorePluginsFromCache]):
        (-[WebPluginController addPlugin:]):
        (-[WebPluginController destroyPlugin:]):
        (-[WebPluginController destroyAllPlugins]):
        (-[NSView isMediaPlugInProxyView]): Deleted.
        (-[NSView setIsMediaPlugInProxyView:]): Deleted.
        (-[WebPluginController mediaPlugInProxyViewCreated:]): Deleted.
        (+[WebPluginController pluginViewHidden:]): Deleted.
        (mediaProxyClient): Deleted.
        (-[WebPluginController _webPluginContainerSetMediaPlayerProxy:forElement:]): Deleted.
        (-[WebPluginController _webPluginContainerPostMediaPlayerNotification:forElement:]): Deleted.
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (pluginView):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        (-[WebView _videoProxyPluginForMIMEType:]): Deleted.
        * WebView/WebViewInternal.h:

2014-04-30  Anders Carlsson  <andersca@apple.com>

        Move the legacy WebKit API into WebKitLegacy.framework and move it inside WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=132399
        <rdar://problem/15920046>

        Reviewed by Dan Bernstein.

        * Carbon/CarbonUtils.h:
        * Carbon/HIViewAdapter.h:
        * Carbon/HIWebView.h:
        Import WebKitLegacy headers instead of WebKit headers.

        * Configurations/WebKit.xcconfig:
        Move the definitions needed for building WebKitLegacy.framework to WebKitLegacy.xcconfig and
        add the relevant definitions needed for re-exporting WebKitLegacy.framework.

        * Configurations/WebKitLegacy.xcconfig:
        Add definitions needed for building the "old" WebKit API as WebKitLegacy.framework.

        * DOM/WebDOMOperations.h:
        * DOM/WebDOMOperations.mm:
        * DOM/WebDOMOperationsInternal.h:
        * DOM/WebDOMOperationsPrivate.h:
        * DefaultDelegates/WebDefaultContextMenuDelegate.h:
        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * DefaultDelegates/WebDefaultEditingDelegate.m:
        * History/WebBackForwardListInternal.h:
        * History/WebBackForwardListPrivate.h:
        * History/WebHistoryItemPrivate.h:
        * History/WebHistoryPrivate.h:
        * History/WebURLsWithTitles.m:
        Import WebKitLegacy headers instead of WebKit headers.

        * MigrateHeaders.make:
        Update header paths now that all WebKitLegacy headers are private.
        Remove migration of WebKit2 headers, that is done by MigrateHeadersFromWebKitLegacy.make now.
        
        * Misc/WebCoreStatistics.h:
        * Misc/WebDownload.h:
        * Misc/WebDownload.mm:
        * Misc/WebDownloadInternal.h:
        * Misc/WebElementDictionary.mm:
        * Misc/WebIconDatabasePrivate.h:
        * Misc/WebKit.h:
        * Misc/WebKitErrors.m:
        * Misc/WebKitErrorsPrivate.h:
        * Misc/WebKitNSStringExtras.mm:
        * Misc/WebLocalizableStrings.mm:
        * Misc/WebNSDataExtras.m:
        * Misc/WebNSDictionaryExtras.m:
        * Misc/WebNSEventExtras.m:
        * Misc/WebNSFileManagerExtras.mm:
        * Misc/WebNSImageExtras.m:
        * Misc/WebNSPasteboardExtras.mm:
        * Misc/WebNSViewExtras.h:
        * Misc/WebNSViewExtras.m:
        * Panels/WebAuthenticationPanel.m:
        * Panels/WebPanelAuthenticationHandler.m:
        * Plugins/Hosted/HostedNetscapePluginStream.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/WebKitPluginAgent.defs:
        * Plugins/Hosted/WebKitPluginAgentReply.defs:
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        * Plugins/Hosted/WebKitPluginHostTypes.defs:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        * Plugins/WebNetscapePluginEventHandlerCocoa.h:
        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        * Plugins/WebPlugin.h:
        * Plugins/WebPluginController.h:
        * Plugins/WebPluginDatabase.h:
        * Plugins/WebPluginPackage.h:
        * Plugins/WebPluginPackage.mm:
        * Plugins/WebPluginViewFactory.h:
        * Plugins/WebPluginViewFactoryPrivate.h:
        * Plugins/npapi.mm:
        * Storage/WebDatabaseManagerPrivate.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebCoreSupport/WebGeolocationClient.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebCoreSupport/WebJavaScriptTextInputPanel.m:
        * WebCoreSupport/WebKeyGenerator.mm:
        * WebInspector/WebInspectorPrivate.h:
        * WebInspector/WebNodeHighlight.h:
        * WebInspector/WebNodeHighlightView.h:
        Import WebKitLegacy headers instead of WebKit headers.
        
        * WebKitLegacy/MigrateHeadersFromWebKitLegacy.make: Added.
        New makefile that handles copying WebKitLegacy headers to the WebKit framework, rewriting WebKitLegacy
        imports to WebKit imports. (On iOS the WebKit headers just forward to the relevant WebKitLegacy headers).
        On OS X, this also handles copying WebKit2 headers to the WebKit framework, rewriting WebKit2 imports to WebKit imports
        and getting rid of C SPI imports.
        
        * WebKitLegacy/MigrateHeadersToLegacy.make: Removed.
        This is no longer needed.
        
        * WebKitLegacy/WebKit.h: Added.
        New umbrella header that imports the modern API if available, as well as the legacy API (using WebKit/WebKitLegacy.h).

        * WebKitLegacy/WebKit.m:
        This is an empty file so we'll have something to link.

        * WebKitLegacy/WebKitPrivate.h:
        New SPI header that imports the private headers of the modern API.

        * WebView/WebDataSource.h:
        * WebView/WebDataSource.mm:
        * WebView/WebDataSourcePrivate.h:
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDocument.h:
        * WebView/WebDocumentInternal.h:
        * WebView/WebDocumentPrivate.h:
        * WebView/WebEditingDelegate.h:
        * WebView/WebEditingDelegatePrivate.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebFrameLoadDelegatePrivate.h:
        * WebView/WebFramePrivate.h:
        * WebView/WebFrameView.h:
        * WebView/WebFrameViewInternal.h:
        * WebView/WebFrameViewPrivate.h:
        * WebView/WebHTMLRepresentation.h:
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebHTMLRepresentationPrivate.h:
        * WebView/WebHTMLView.h:
        * WebView/WebHTMLView.mm:
        * WebView/WebHTMLViewPrivate.h:
        * WebView/WebPDFView.h:
        * WebView/WebPolicyDelegatePrivate.h:
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebResourcePrivate.h:
        * WebView/WebUIDelegate.h:
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.h:
        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:
        Import WebKitLegacy headers instead of WebKit headers.

        * migrate-headers.sh:
        Derived sources are put in DerivedSources/WebKitLegacy now.

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.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

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.

        BackForwardClient instances now have ownership lifetime semantics, so
        WebBackForwardList now explicitly deletes its inner BackForwardList.

        Convert uses of WebCore::BackForwardList through backForward().client() to
        accept references instead of pointers.

        Use BackForwardController methods rather than directly operating with the
        BackForwardClient where possible.

        Remove page cache-related methods that are not used anywhere and that call
        BackForwardClient::page(), which is removed by this change.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList initWithBackForwardList:]):
        (-[WebBackForwardList init]):
        (-[WebBackForwardList dealloc]):
        (-[WebBackForwardList finalize]):
        (-[WebBackForwardList setPageCacheSize]): Deleted.
        (-[WebBackForwardList pageCacheSize]): Deleted.
        (-[WebBackForwardList itemAtIndex:]): Deleted.
        * History/WebBackForwardListInternal.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canCachePage):
        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:keyDown:]):
        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):
        (-[WebView initWithCoder:]):
        (-[WebView encodeWithCoder:]):
        (-[WebView backForwardList]):
        (-[WebView setMaintainsBackForwardList:]):

2014-04-29  Sam Weinig  <sam@webkit.org>

        [iOS] -[WebHTMLView selectionImageForcingBlackText:] returns blank image on iOS
        https://bugs.webkit.org/show_bug.cgi?id=132359

        Reviewed by Darin Adler.

        * WebView/WebHTMLView.mm:
        (imageFromRect):
        (selectionImage):
        (-[WebHTMLView selectionImageForcingBlackText:selectionImageForcingBlackText:]):
        Bring back the old FrameSnapshottingMac code for drawing the selection image as drag code for this
        is still unimplemented on iOS.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        Set the page scale for "simple HTML documents" (this is already done for the all other documents), 
        to ensure that the snapshot is the correct size.

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.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Remove unneeded changes that
        enable/disable the runtime feature depending on the compilation flag.
        And set it to true by default.

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.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingService:didShareItems:]): Write the
          replacement data to a special pasteboard, then replace the current selection from
          that pasteboard.

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.

        * WebView/WebFrame.mm:
        (-[WebFrame _setTextAutosizingWidth:]):
        Forward setting of the text autosizing width to the Page.

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.

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::show): Convert the WebCore menu size type into the
        WebCoreSystemInterface type.

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:
        * Misc/WebSharingServicePickerController.h:
        * Misc/WebSharingServicePickerController.mm:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuForEvent):
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        Text caret disappears in Mail after returning from another application
        https://bugs.webkit.org/show_bug.cgi?id=132111

        Reviewed by Darin Adler.

        The bug was caused by our SPI _windowChangedKeyState not getting called upon deminiaturization.

        Fixed the bug by using the standard NSWindowDidBecomeKeyNotification and NSWindowDidResignKeyNotification
        notifications as done in WebKit2 since they DO get called upon deminiaturization.

        * WebView/WebView.mm:
        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        (-[WebView _windowKeyStateChanged:]):
        (-[WebView _windowChangedKeyState]): Deleted.

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.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics cachedFontDataCount]):
        (+[WebCoreStatistics cachedFontDataInactiveCount]):
        (+[WebCoreStatistics purgeInactiveFontData]):
        * WebView/WebView.mm:
        (+[WebView purgeInactiveFontData]):

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.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Tell 
            WebCore to manage the AudioSession when running in MobileSafari.

2014-04-23  Andreas Kling  <akling@apple.com>

        Remove Apple Dictionary workaround in WebFrameLoaderClient.
        <https://webkit.org/b/132095>

        Kill a hack to work around a WK1 client bug that got fixed years ago.
        See <rdar://problem/6471058> for backstory.

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebFrameLoaderClient::dispatchWillSendRequest):
        (applyAppleDictionaryApplicationQuirkNonInlinePart): Deleted.
        (applyAppleDictionaryApplicationQuirk): Deleted.

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

        Don't migrate the WKView.h header from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=132086

        Reviewed by Dan Bernstein.

        * MigrateHeaders.make:
        Remove WKView.h from the list of headers to migrate.

        * WebView/WebView.mm:
        Import WKView.h.

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

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursor):

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  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.

        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingService:didShareItems:]): Write the
          replacement data to a special pasteboard, then replace the current selection from
          that pasteboard.

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  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused WebKitSystemInterface functions
        https://bugs.webkit.org/show_bug.cgi?id=131938

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2014-04-21  Zan Dobersek  <zdobersek@igalia.com>

        Move cross-port Source/WebCore/page/ code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=130534

        Reviewed by Darin Adler.

        * WebView/WebHTMLRepresentation.mm:
        (searchForLabelsBeforeElement): Pass a RegExp reference to Frame::searchForLabelsAboveCell().

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.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursor): Added a check that the window is under the cursor
        and do nothing if it's not.

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-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.

        Add declaration for WKGetViewportAvailableScreenSize() to return the available screen size.

        Additionally substitute "ScreenSize" for "ViewportScreenSize" to make the code more understandable.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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-16  Tim Horton  <timothy_horton@apple.com>

        Images dragged from WebKit1 on 2x displays are too big
        https://bugs.webkit.org/show_bug.cgi?id=131775
        <rdar://problem/15933525>

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::startDrag):
        Scale the drag image's logical size down by the device scale factor
        in WebKit1 just like we do in WebKit2.

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.

        Moved file system and WebKit1-only code from QuickLookHandle into a new
        QuickLookHandleClient subclass.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Eliminate DragSession structure
        https://bugs.webkit.org/show_bug.cgi?id=131465

        Reviewed by Benjamin Poulain.

        * WebView/WebView.mm:
        (-[WebView draggingEntered:]):
        (-[WebView draggingUpdated:]):

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.

        * WebView/WebView.mm: (-[WebView performDragOperation:]):

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:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set default to true.

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.

        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::willPerformDragSourceAction):
        (WebDragClient::startDrag):
        * WebView/WebPDFView.mm:

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

        WebKit part of [Cocoa] Add WKFormDelegate
        https://bugs.webkit.org/show_bug.cgi?id=131343

        Reviewed by Anders Carlsson.

        * MigrateHeaders.make: Added new WebKit2 headers to WEBKIT2_HEADERS.

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.

        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::storageSession):

2014-04-06  Sam Weinig  <sam@webkit.org>

        Document user content related APIs

        Reviewed by Anders Carlsson.

        * MigrateHeaders.make:

2014-04-06  Darin Adler  <darin@apple.com>

        Refactor post-attach and HTMLObjectElement-related code
        https://bugs.webkit.org/show_bug.cgi?id=131282

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebFrameLoaderClient.mm: Call toHTMLPlugInImageElement instead of
        doing a static_cast.

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-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.

        * MigrateHeaders.make:

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

        [iOS] Remove the legacy string drawing code
        https://bugs.webkit.org/show_bug.cgi?id=131088

        Reviewed by Sam Weinig.

        * Configurations/WebKit.xcconfig:

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.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2014-04-02  Stephanie Lewis  <slewis@apple.com>

        Roll out http://trac.webkit.org/changeset/166144
        <rdar://problem/16481284> PLT stops loading on news.google.com
        
        Unreviewed rollout.

        Rollout 166144 since it prevents the PLT from completing.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2014-04-02  Daniel Bates  <dabates@apple.com>

        Remove Settings::maximumDecodedImageSize()
        https://bugs.webkit.org/show_bug.cgi?id=131057
        <rdar://problem/15626368>

        Reviewed by Darin Adler. 

        Remove preferences key WebKitMaximumImageSize.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences _maximumImageSize:]): Deleted.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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.

        * WebCoreSupport/WebFrameLoaderClient.mm: Change WebCore::Settings::privateBrowsingEnabled() to Page::sessionID().isEphemeral().
        (WebFrameLoaderClient::updateGlobalHistoryItemForPage):
        * WebCoreSupport/WebFrameNetworkingContext.mm: Ditto.
        (WebFrameNetworkingContext::storageSession):
        * WebView/WebView.mm: Change WebCore::Settings::setPrivateBrowsingEnabled() to Page::enableLegacyPrivateBrowsing().
        (-[WebView _preferencesChanged:]):

2014-04-01  Anders Carlsson  <andersca@apple.com>

        Migrate more headers
        https://bugs.webkit.org/show_bug.cgi?id=131068

        Reviewed by Tim Horton.

        * MigrateHeaders.make:

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.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

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  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  Antti Koivisto  <antti@apple.com>

        Rename TileCache to LegacyTileCache
        https://bugs.webkit.org/show_bug.cgi?id=130986

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (+[WebView drainLayerPool]):
        (+[WebView _setTileCacheLayerPoolCapacity:]):

2014-03-28  Darin Adler  <darin@apple.com>

        Fix recently-introduced off-by-one error in centerTruncateToBuffer
        https://bugs.webkit.org/show_bug.cgi?id=130889

        Reviewed by Alexey Proskuryakov.

        * Misc/WebStringTruncator.mm:
        (defaultMenuFont): Changed to use NeverDestroyed since I had to touch this file anyway.
        (fontFromNSFont): Ditto. Also improved variable names a bit.
        (+[WebStringTruncator initialize]): Added threading initialization, needed for main
        thread assertions in string truncator code.

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  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.

        Switched to a WebCore wrapper for RunLoop::initializeMainRunLoop that adds
        NSModalPanelRunLoopMode to RunLoop event source and timer modes.

        * Carbon/CarbonWindowAdapter.mm: (+[CarbonWindowAdapter initialize]):
        * History/WebBackForwardList.mm: (+[WebBackForwardList initialize]):
        * History/WebHistoryItem.mm: (+[WebHistoryItem initialize]):
        * Misc/WebCache.mm: (+[WebCache initialize]):
        * Misc/WebElementDictionary.mm: (+[WebElementDictionary initialize]):
        * Misc/WebIconDatabase.mm: (+[WebIconDatabase initialize]):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm: (+[WebHostedNetscapePluginView initialize]):
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebNetscapePluginView.mm: (+[WebNetscapePluginView initialize]):
        * WebCoreSupport/WebEditorClient.mm: (+[WebUndoStep initialize]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebArchive.mm: (+[WebArchivePrivate initialize]):
        * WebView/WebDataSource.mm: (+[WebDataSource initialize]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLViewPrivate initialize]):
        (+[WebHTMLView initialize]):
        * WebView/WebPreferences.mm: (+[WebPreferences initialize]):
        * WebView/WebResource.mm: (+[WebResourcePrivate initialize]):
        * WebView/WebTextIterator.mm: (+[WebTextIteratorPrivate initialize]):
        * WebView/WebView.mm: (+[WebView initialize]):
        * WebView/WebViewData.mm: (+[WebViewPrivate initialize]):

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.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchWillSendRequest): Copy hiddenFromInspector to
        the new request.

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-25  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Inspector View Indication Support
        https://bugs.webkit.org/show_bug.cgi?id=130709

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::didSetSearchingForNode): Deleted.
        (WebInspectorClient::releaseFrontend): Deleted.
        * WebView/WebView.mm:
        (-[WebView setShowingInspectorIndication:]):
        * WebView/WebViewPrivate.h:
        Renamed methods.

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>

        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=129322

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload): Use the
        RetainPtr returned by releaseConnectionForDownload() rather than
        manually releasing.

2014-03-24  Jon Lee  <jonlee@apple.com>

        Build fixes.

        Unreviewed.

        * WebInspector/WebNodeHighlightView.mm: Missing include to GeometryUtilities.

2014-03-23  Sam Weinig  <sam@webkit.org>

        Remove some unnecessary .get()s that Darin noticed.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedString]):

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.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView attributedString]):
        (-[WebHTMLView selectedAttributedString]):

2014-03-23  Darin Adler  <darin@apple.com>

        Remove code in HTMLObjectElement attribute parsing that forces style resolution and layout
        https://bugs.webkit.org/show_bug.cgi?id=130653

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebFrameLoaderClient.mm: Call toHTMLPlugInImageElement instead of
        doing a static_cast.

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

        Don't flush compositing layers within FrameView::willPaintContents()
        https://bugs.webkit.org/show_bug.cgi?id=130627

        Reviewed by Sam Weinig.
        
        Make _flushCompositingChanges private so DRT can call it;
        moved it into the Private category.

        * WebView/WebView.mm:
        (-[WebView _flushCompositingChanges]):
        * WebView/WebViewPrivate.h:

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

        Remove duplicate line added during merging
        https://bugs.webkit.org/show_bug.cgi?id=130623

        Reviewed by Beth Dakin.
        
        Remove a duplicate call to -_viewWillDrawInternal which
        was added during merges.

        * WebView/WebView.mm:
        (LayerFlushController::flushLayers):

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.

        * WebView/WebHTMLRepresentation.mm:
        (regExpForLabels): Use StringBuilder.

2014-03-21  Darin Adler  <darin@apple.com>

        Add a combined decodeAndFlush to TextResourceDecoder
        https://bugs.webkit.org/show_bug.cgi?id=130560

        Reviewed by Andreas Kling.

        * WebView/WebView.mm:
        (+[WebView _decodeData:]): Use decodeAndFlush.

2014-03-20  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * MigrateHeaders.make:

2014-03-20  Pratik Solanki  <psolanki@apple.com>

        [iOS] Get code to compile on older iOS versions
        https://bugs.webkit.org/show_bug.cgi?id=130142
        <rdar://problem/16302908>

        Reviewed by Darin Adler.

        * History/WebHistory.mm:
        (getDayBoundaries):
        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (pluginView):
        * WebView/WebPreferences.mm:
        (-[WebPreferences _setAllowCompositingLayerVisualDegradation:]):
        * WebView/WebPreferencesPrivate.h:

2014-03-20  Lucas Forschler  <lforschler@apple.com>

    Rollout r165944.  Build break.
    
2014-03-19  Pratik Solanki  <psolanki@apple.com>

        [iOS] Get code to compile on older iOS versions
        https://bugs.webkit.org/show_bug.cgi?id=130142
        <rdar://problem/16302908>

        Reviewed by Darin Adler.

        * History/WebHistory.mm:
        (getDayBoundaries):
        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (pluginView):
        * WebView/WebPreferences.mm:
        (-[WebPreferences _setAllowCompositingLayerVisualDegradation:]):
        * WebView/WebPreferencesPrivate.h:

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.

        * WebCoreSupport/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.

        * Misc/WebSharingServicePickerController.h:
        * Misc/WebSharingServicePickerController.mm:
        (-[WebSharingServicePickerController sharingServicePicker:sharingServicesForItems:mask:proposedSharingServices:]):
          Filter out editing services based on the includeEditorServices flag.
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuForEvent):

2014-03-19  Jer Noble  <jer.noble@apple.com>

        [iOS] Disable the video plugin proxy by default on WK1.
        https://bugs.webkit.org/show_bug.cgi?id=130460

        Reviewed by Eric Carlson.

        Update the defaults to universally enable the AVFoundationEnabled preference, disable the
        VideoPluginProxyEnabled preference, and on iOS only enable the AVKitEnabled preference.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

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.

        * WebView/WebFrame.mm:
        (-[WebFrame enhancedAccessibilityEnabled]):
        (-[WebFrame setEnhancedAccessibility:]):
        * WebView/WebFramePrivate.h:

2014-03-17  Filip Pizlo  <fpizlo@apple.com>

        More FTL enabling.

        Rubber stamped by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2014-03-17  Andy Estes  <aestes@apple.com>

        Remove staging code added for <http://webkit.org/b/129358> [iOS] Support network state notification using CPNetworkObserver

        Reviewed by Enrica Casucci.

        * WebView/WebView.mm:

2014-03-17  Anders Carlsson  <andersca@apple.com>

        WebKitLegacy headers should #import the relevant WebKit headers
        https://bugs.webkit.org/show_bug.cgi?id=130372
        <rdar://problem/16349094>

        Reviewed by Dan Bernstein.

        Create forwarding headers instead.

        * WebKitLegacy/MigrateHeadersToLegacy.make:

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.

        * MigrateHeaders.make:

2014-03-17  David Farler  <dfarler@apple.com>

        REGRESSION: WebKitLegacy causes ASan build to fail
        <rdar://problem/16344326>

        Reviewed by David Kilzer.

        * Configurations/DebugRelease.xcconfig: Remove $(inherited) from
        OTHER_CFLAGS, OTHER_CPLUSPLUSFLAGS, OTHER_LDFLAGS to prevent
        double complete ASAN flags.

2014-03-16  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.

        * WebView/WebPreferenceKeysPrivate.h: Added new preference.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize preference to false.
        (-[WebPreferences isInheritURIQueryComponentEnabled]): Added.
        (-[WebPreferences setEnableInheritURIQueryComponent:]): Added.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Handle new preference.

2014-03-16  Darin Adler  <darin@apple.com>

        Remove all deprecatedCharacters use from WebKit directory
        https://bugs.webkit.org/show_bug.cgi?id=130305

        Reviewed by Andreas Kling.

        * History/BinaryPropertyList.cpp:
        (BinaryPropertyListSerializer::appendStringObject): Use operator[]
        instead of deprecatedCharacters.

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.

        * Carbon/CarbonUtils.h:
        * Carbon/CarbonUtils.m:
        * Carbon/CarbonWindowAdapter.h:
        * Carbon/CarbonWindowAdapter.mm:
        * Carbon/CarbonWindowContentView.h:
        * Carbon/CarbonWindowContentView.m:
        * Carbon/CarbonWindowFrame.h:
        * Carbon/CarbonWindowFrame.m:
        * Carbon/HIViewAdapter.h:
        * Carbon/HIViewAdapter.m:
        * Carbon/HIWebView.h:
        * Carbon/HIWebView.mm:
        * DOM/WebDOMOperations.h:
        * DOM/WebDOMOperations.mm:
        * DOM/WebDOMOperationsInternal.h:
        * DOM/WebDOMOperationsPrivate.h:
        * DefaultDelegates/WebDefaultContextMenuDelegate.h:
        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * DefaultDelegates/WebDefaultEditingDelegate.h:
        * DefaultDelegates/WebDefaultEditingDelegate.m:
        * DefaultDelegates/WebDefaultPolicyDelegate.h:
        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        * DefaultDelegates/WebDefaultUIDelegate.h:
        * DefaultDelegates/WebDefaultUIDelegate.m:
        * History/WebBackForwardList.h:
        * History/WebBackForwardList.mm:
        * History/WebBackForwardListInternal.h:
        * History/WebBackForwardListPrivate.h:
        * History/WebHistory.h:
        * History/WebHistory.mm:
        * History/WebHistoryInternal.h:
        * History/WebHistoryItem.h:
        * History/WebHistoryItem.mm:
        * History/WebHistoryItemInternal.h:
        * History/WebHistoryItemPrivate.h:
        * History/WebHistoryPrivate.h:
        * History/WebURLsWithTitles.h:
        * History/WebURLsWithTitles.m:
        * MigrateHeaders.make:
        * Misc/OldWebAssertions.c:
        * Misc/WebCache.h:
        * Misc/WebCache.mm:
        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        * Misc/WebDownload.h:
        * Misc/WebDownload.mm:
        * Misc/WebDownloadInternal.h:
        * Misc/WebElementDictionary.h:
        * Misc/WebElementDictionary.mm:
        * Misc/WebIconDatabase.h:
        * Misc/WebIconDatabase.mm:
        * Misc/WebIconDatabaseDelegate.h:
        * Misc/WebIconDatabaseInternal.h:
        * Misc/WebIconDatabasePrivate.h:
        * Misc/WebKit.h:
        * Misc/WebKitErrors.h:
        * Misc/WebKitErrors.m:
        * Misc/WebKitErrorsPrivate.h:
        * Misc/WebKitLogging.h:
        * Misc/WebKitLogging.m:
        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.mm:
        * Misc/WebKitStatistics.h:
        * Misc/WebKitStatistics.m:
        * Misc/WebKitStatisticsPrivate.h:
        * Misc/WebKitSystemBits.h:
        * Misc/WebKitSystemBits.m:
        * Misc/WebKitVersionChecks.h:
        * Misc/WebKitVersionChecks.m:
        * Misc/WebLocalizableStrings.h:
        * Misc/WebLocalizableStrings.mm:
        * Misc/WebNSArrayExtras.h:
        * Misc/WebNSArrayExtras.m:
        * Misc/WebNSControlExtras.h:
        * Misc/WebNSControlExtras.m:
        * Misc/WebNSDataExtras.h:
        * Misc/WebNSDataExtras.m:
        * Misc/WebNSDataExtrasPrivate.h:
        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        * Misc/WebNSEventExtras.h:
        * Misc/WebNSEventExtras.m:
        * Misc/WebNSFileManagerExtras.h:
        * Misc/WebNSFileManagerExtras.mm:
        * Misc/WebNSImageExtras.h:
        * Misc/WebNSImageExtras.m:
        * Misc/WebNSObjectExtras.h:
        * Misc/WebNSObjectExtras.mm:
        * Misc/WebNSPasteboardExtras.h:
        * Misc/WebNSPasteboardExtras.mm:
        * Misc/WebNSPrintOperationExtras.h:
        * Misc/WebNSPrintOperationExtras.m:
        * Misc/WebNSURLExtras.h:
        * Misc/WebNSURLExtras.mm:
        * Misc/WebNSURLRequestExtras.h:
        * Misc/WebNSURLRequestExtras.m:
        * Misc/WebNSUserDefaultsExtras.h:
        * Misc/WebNSUserDefaultsExtras.mm:
        * Misc/WebNSViewExtras.h:
        * Misc/WebNSViewExtras.m:
        * Misc/WebNSWindowExtras.h:
        * Misc/WebNSWindowExtras.m:
        * Misc/WebStringTruncator.h:
        * Misc/WebStringTruncator.mm:
        * Misc/WebTypesInternal.h:
        * Panels/WebAuthenticationPanel.h:
        * Panels/WebAuthenticationPanel.m:
        * Panels/WebPanelAuthenticationHandler.h:
        * Panels/WebPanelAuthenticationHandler.m:
        * Plugins/Hosted/ProxyRuntimeObject.h:
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebJavaPlugIn.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        * Plugins/WebNetscapeContainerCheckPrivate.mm:
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.mm:
        * Plugins/WebNetscapePluginStream.h:
        * Plugins/WebNetscapePluginStream.mm:
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        * Plugins/WebPlugin.h:
        * Plugins/WebPluginContainer.h:
        * Plugins/WebPluginContainerCheck.h:
        * Plugins/WebPluginContainerCheck.mm:
        * Plugins/WebPluginContainerPrivate.h:
        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        * Plugins/WebPluginDatabase.h:
        * Plugins/WebPluginDatabase.mm:
        * Plugins/WebPluginPackage.h:
        * Plugins/WebPluginPackage.mm:
        * Plugins/WebPluginRequest.h:
        * Plugins/WebPluginRequest.m:
        * Plugins/WebPluginViewFactory.h:
        * Plugins/WebPluginViewFactoryPrivate.h:
        * Plugins/WebPluginsPrivate.h:
        * Plugins/WebPluginsPrivate.m:
        * Plugins/npapi.mm:
        * Storage/WebDatabaseManager.mm:
        * Storage/WebDatabaseManagerInternal.h:
        * Storage/WebDatabaseManagerPrivate.h:
        * WebCoreSupport/SearchPopupMenuMac.mm:
        * WebCoreSupport/WebAlternativeTextClient.h:
        * WebCoreSupport/WebAlternativeTextClient.mm:
        * WebCoreSupport/WebCachedFramePlatformData.h:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebIconDatabaseClient.mm:
        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebCoreSupport/WebJavaScriptTextInputPanel.h:
        * WebCoreSupport/WebJavaScriptTextInputPanel.m:
        * WebCoreSupport/WebSecurityOrigin.mm:
        * WebCoreSupport/WebSecurityOriginInternal.h:
        * WebCoreSupport/WebSecurityOriginPrivate.h:
        * WebCoreSupport/WebSystemInterface.h:
        * WebCoreSupport/WebSystemInterface.mm:
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        * WebInspector/WebInspectorPrivate.h:
        * WebInspector/WebNodeHighlight.h:
        * WebInspector/WebNodeHighlight.mm:
        * WebInspector/WebNodeHighlightView.h:
        * WebInspector/WebNodeHighlightView.mm:
        * WebInspector/WebNodeHighlighter.h:
        * WebInspector/WebNodeHighlighter.mm:
        * WebKitLegacy/MigrateHeadersToLegacy.make:
        * WebKitPrefix.h:
        * WebView/WebArchive.h:
        * WebView/WebArchive.mm:
        * WebView/WebArchiveInternal.h:
        * WebView/WebClipView.h:
        * WebView/WebClipView.mm:
        * WebView/WebDashboardRegion.h:
        * WebView/WebDashboardRegion.mm:
        * WebView/WebDataSource.h:
        * WebView/WebDataSource.mm:
        * WebView/WebDataSourceInternal.h:
        * WebView/WebDataSourcePrivate.h:
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        * WebView/WebDocument.h:
        * WebView/WebDocumentInternal.h:
        * WebView/WebDocumentLoaderMac.h:
        * WebView/WebDocumentLoaderMac.mm:
        * WebView/WebDocumentPrivate.h:
        * WebView/WebDynamicScrollBarsViewInternal.h:
        * WebView/WebEditingDelegate.h:
        * WebView/WebEditingDelegatePrivate.h:
        * WebView/WebFormDelegate.h:
        * WebView/WebFormDelegate.m:
        * WebView/WebFormDelegatePrivate.h:
        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebFrameLoadDelegatePrivate.h:
        * WebView/WebFramePrivate.h:
        * WebView/WebFrameView.h:
        * WebView/WebFrameView.mm:
        * WebView/WebFrameViewInternal.h:
        * WebView/WebFrameViewPrivate.h:
        * WebView/WebHTMLRepresentation.h:
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebHTMLRepresentationPrivate.h:
        * WebView/WebHTMLView.h:
        * WebView/WebHTMLView.mm:
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebHTMLViewPrivate.h:
        * WebView/WebNotification.h:
        * WebView/WebNotification.mm:
        * WebView/WebNotificationInternal.h:
        * WebView/WebPDFRepresentation.h:
        * WebView/WebPDFRepresentation.mm:
        * WebView/WebPDFView.h:
        * WebView/WebPDFView.mm:
        * WebView/WebPolicyDelegate.h:
        * WebView/WebPolicyDelegate.mm:
        * WebView/WebPolicyDelegatePrivate.h:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebRenderLayer.h:
        * WebView/WebRenderLayer.mm:
        * WebView/WebRenderNode.h:
        * WebView/WebRenderNode.mm:
        * WebView/WebResource.h:
        * WebView/WebResource.mm:
        * WebView/WebResourceInternal.h:
        * WebView/WebResourceLoadDelegate.h:
        * WebView/WebResourceLoadDelegatePrivate.h:
        * WebView/WebResourcePrivate.h:
        * WebView/WebScriptDebugDelegate.h:
        * WebView/WebScriptDebugDelegate.mm:
        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        * WebView/WebTextCompletionController.mm:
        * WebView/WebUIDelegate.h:
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.h:
        * WebView/WebView.mm:
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2014-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r165385): [WebTextIterator currentRange] crashes
        https://bugs.webkit.org/show_bug.cgi?id=130271

        Reviewed by Anders Carlsson.

        After r165385, TextIterator::range no longer checked the nullity of m_positionNode. As a result,
        [WebTextIterator currentRange] which simply calls TextIterator::range crashes when an application
        that embeds WebKit doesn't check [WebTextIterator atEnd] first.

        Preserve the old public API behavior by checking atEnd in [WebTextIterator currentRange].

        * WebView/WebTextIterator.mm:
        (-[WebTextIterator currentRange]):

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.

        * History/WebBackForwardList.mm:
        (backForwardLists):
        * History/WebHistoryItem.mm:
        (historyItemWrappers):
        * Misc/WebNSPasteboardExtras.mm:
        (+[NSPasteboard _web_writableTypesForURL]):
        (_writableTypesForImageWithoutArchive):
        (_writableTypesForImageWithArchive):
        * Misc/WebStringTruncator.mm:
        (fontFromNSFont):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::shared):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::pluginProxyMap):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::globalExceptionString):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::proxyClass):
        * Plugins/WebNetscapePluginStream.mm:
        (streams):
        * Storage/WebDatabaseManager.mm:
        (transactionBackgroundTaskIdentifierLock):
        * WebCoreSupport/WebUserMediaClient.mm:
        (userMediaRequestsMap):
        * WebView/WebHTMLRepresentation.mm:
        (regExpForLabels):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2014-03-13  Tim Horton  <timothy_horton@apple.com>

        Fix relative paths to UseInternalSDK.xcconfig for ANGLE and WebKit/mac

        Rubber-stamped by Mark Rowe.

        One-too-few "..".

        * Configurations/Base.xcconfig:

2014-03-13  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * Misc/WebSharingServicePickerController.mm:

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.

        * WebView/WebFrame.mm:
        (-[WebFrame _documentFragmentWithNodesAsParagraphs:]):
        Use auto*. Also removed uneeded ASSERT_NO_EXCEPTION, which is already
        the default without specifying it explicitly.

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.

        * WebInspector/WebInspector.mm:
        (-[WebInspector evaluateInFrontend:script:]):
        * WebInspector/WebInspectorPrivate.h:

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 the webGLPolicyForURL methods, calling into WebKitSystemInterface.

        * Configurations/WebKit.xcconfig: Add MobileAsset to iOS config.
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

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:

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::indicate):
        (WebInspectorClient::hideIndication):
        Properly guard REMOTE_INSPECTOR only calls.

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

        Build fix for ENABLE(IMAGE_CONTROLS) after 165479

        * Misc/WebSharingServicePickerController.h:
        * Misc/WebSharingServicePickerController.mm:
        Don't use new-runtime features in code that has to build 32-bit.

2014-03-12  Anders Carlsson  <andersca@apple.com>

        <rdar://problem/16307346> Add new WebKitLegacy.framework.

        Reviewed by Dan Bernstein.

        * Configurations/WebKitLegacy.xcconfig:
        Add xcconfig file for the new framework.

        * WebKitLegacy/Info.plist:
        Add Info.plist for WebKitLegacy.framework.

        * WebKitLegacy/MigrateHeadersToLegacy.make:
        Add makefile that copies headers from WebKit to WebKitLegacy and rewrites includes from WebKit/ to WebKitLegacy/
        * WebKitLegacy/WebKitLegacy.cpp:
        Add an empty file so we'll have something to link.

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.

        * Misc/WebSharingServicePickerController.h: Added.
        * Misc/WebSharingServicePickerController.mm: Added.
        (-[WebSharingServicePickerController initWithImage:menuClient:]):
        (-[WebSharingServicePickerController menu]):
        (-[WebSharingServicePickerController sharingServicePicker:delegateForSharingService:]):
        (-[WebSharingServicePickerController sharingServicePicker:didChooseSharingService:]):
        (-[WebSharingServicePickerController sharingService:didShareItems:]):
        (-[WebSharingServicePickerController sharingService:didFailToShareItems:error:]):
        (-[WebSharingServicePickerController sharingService:sourceWindowForShareItems:sharingContentScope:]):
        Add a NSSharingServiceDelegate and NSSharingServicePickerDelegate, which will also
        provide a NSMenu instance for WebContextMenuClient to pop up when image controls are needed.
        When data is returned from the service, it is re-inserted into the image via replaceControlledImage.

        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::contextMenuForEvent):
        Factor out code to decide which NSMenu to use, so that we can use early-returns to simplify it.
        If we hit an image with image controls, use the WebSharingServicePickerController's menu.

        (WebContextMenuClient::showContextMenu):
        (WebContextMenuClient::clearSharingServicePickerController):

2014-03-10  Jer Noble  <jer.noble@apple.com>

        [iOS][WK1] Crash in HTMLMediaElement::createElementRenderer() - "-[NSSet addObject:]: object cannot be nil"
        https://bugs.webkit.org/show_bug.cgi?id=129634

        Reviewed by Eric Carlson.

        If a plugin fails to create a NSView, a nil object is inserted into the WebPluginController's
        pluginViews set. This is an exceptional case, so add an ASSERT so that this error will continue
        to occur in debug builds, but also add an early return so as not to crash release builds.

        * Plugins/WebPluginController.mm:
        (+[WebPluginController addPlugInView:]):

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.

        * WebCoreSupport/WebEditorClient.mm: (WebEditorClient::handleInputMethodKeydown):
        Added a FIXME. WebKit1/mac is the only port that uses this roundabout way to
        interpret events, so it would simplify code if we switched it to WebKit2/mac model.

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.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::forceLayoutOnRestoreFromPageCache):

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

        Add the remaining WebKit2 headers to WEBKIT2_HEADERS
        https://bugs.webkit.org/show_bug.cgi?id=129942
        <rdar://problem/15920020>

        Reviewed by Tim Horton.

        * MigrateHeaders.make:

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.

        * MigrateHeaders.make:
        Add WKPreferences.h to WEBKIT2_HEADERS. 
        Add a sed rule that deletes all lines that start with a # and contain <WebKit/*Ref.h>.

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

        Make it possible to copy WebKit2 headers to WebKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=129935
        <rdar://problem/15920020>

        Reviewed by Dan Bernstein.

        * MigrateHeaders.make:
        Gather a list of public and private WebKit2 headers and filter them against the WEBKIT2_HEADERS list.
        The matching headers are copied to the respective Headers or PrivateHeaders directories under WebKit.framework,
        and also have their #imports rewritten to reference WebKit instead of WebKit2.

        * migrate-headers.sh: Added.
        Set up the WEBKIT2_FRAMEWORKS_DIR if needed.

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

        Fix a typo
        <rdar://problem/15920020>

        Rubber-stamped by Dan Bernstein.

        * Configurations/WebKit.xcconfig:

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

        Tweak the WebKit2 frameworks directories
        https://bugs.webkit.org/show_bug.cgi?id=129910
        <rdar://problem/15920020>

        Reviewed by Dan Bernstein.

        Use an SDK relative directory for production builds.

        * Configurations/WebKit.xcconfig:

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

        Link WebKit.framework against WebKit2.framework and re-export all WebKit2 symbols
        https://bugs.webkit.org/show_bug.cgi?id=129901
        <rdar://problem/15920020>

        Reviewed by Andreas Kling.

        * Configurations/WebKit.xcconfig:

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.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        Update namespaces.

2014-03-05  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Show external device name/type in placeholder
        https://bugs.webkit.org/show_bug.cgi?id=129723

        Reviewed by Jer Noble.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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.
        
        Call URLByCanonicalizingURL() which is implemented in WebCore.

        * Misc/WebNSURLExtras.mm:
        (-[NSURL _webkit_canonicalize]):

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Enable device pixel repaint rect tracking.
        https://bugs.webkit.org/show_bug.cgi?id=129712

        Reviewed by Simon Fraser.

        Tracked repaint rects are device pixel snapped now to support hiDPI test cases.

        * WebView/WebView.mm:
        (-[WebView trackedRepaintRects]): Keep existing behavior for now.

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.

        * WebCoreSupport/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.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):

2014-03-02  Darin Adler  <darin@apple.com>

        Sort Mac platform export files so they merge better
        https://bugs.webkit.org/show_bug.cgi?id=129581

        Reviewed by Sam Weinig.

        * WebKit.exp: Ran the new sort-export-file on this.

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:
        (-[WebTextIterator initWithRange:]): Use make_unique instead of adoptPtr.
        (-[WebTextIterator advance]): Clear out the upconverted text since we are moving on to the
        next text.
        (-[WebTextIterator currentTextPointer]): Upconvert if we have 8-bit text.
        (-[WebTextIterator currentTextLength]): Call TextIterator::text().length() since we will
        probably be removing TextIterator::length eventually.

2014-03-01  Pratik Solanki  <psolanki@apple.com>

        [iOS] selectionImageForcingBlackText should return autoreleased object
        https://bugs.webkit.org/show_bug.cgi?id=129437
        <rdar://problem/15810384>

        Reviewed by Darin Adler.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView selectionImageForcingBlackText:selectionImageForcingBlackText:]):

2014-02-28  Dan Bernstein  <mitz@apple.com>

        [Mac] Remove MailQuirksUserScript.js
        https://bugs.webkit.org/show_bug.cgi?id=129536

        Reviewed by Andy Estes.

        * Configurations/WebKit.xcconfig: Removed from EXCLUDED_SOURCE_FILE_NAMES_iphoneos.
        * Misc/MailQuirksUserScript.js: Removed. This file has been unused since r147447.

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.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController inspectorTestPagePath]):
        (-[WebInspectorWindowController webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):

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(). Modify the navigation policy to check
        the URL against both normal and test inspector pages.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):
        (-[WebInspectorWindowController init]):
        (-[WebInspectorWindowController initWithInspectedWebView:isUnderTest:]):
        Move the initial navigation of the inspector page to this method, and change
        the URL based on the value of InspectorController::isUnderTest().

        (-[WebInspectorWindowController inspectorTestPagePath]): Added.
        (-[WebInspectorWindowController webView:decidePolicyForNavigationAction:request:frame:decisionListener:]):

2014-02-27  Pratik Solanki  <psolanki@apple.com>

        Assertion failure at CachedResource.h:196: ASSERT(!m_purgeableData)
        https://bugs.webkit.org/show_bug.cgi?id=129349
        <rdar://problem/14871837>

        Reviewed by Joseph Pecoraro.

        The code for clearing out memory mapped notification callbacks is only needed when loading
        PDFs. And in such cases, we always have dataSourceDelegate object. So make this code
        conditional on its presence so that we don't trigger the assert for non-PDF main resources.

        * WebView/WebDataSource.mm:
        (-[WebDataSource dealloc]):

2014-02-26  Andy Estes  <aestes@apple.com>

        [iOS] Support network state notification using CPNetworkObserver
        https://bugs.webkit.org/show_bug.cgi?id=129358

        Reviewed by Dan Bernstein.

        * WebView/WebView.mm:
        (-[WebView _setNetworkStateIsOnline:]): Retained an empty
        implementation for binary compatibility for UIKit.
        (+[WebView _doNotStartObservingNetworkReachability]): Called
        Settings::setShouldOptOutOfNetworkStateObservation(true).
        * WebView/WebViewPrivate.h: Removed declaration of
        _setNetworkStateIsOnline: and declared
        _doNotStartObservingNetworkReachability.

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

        Get rid of VisitedLinkStrategy
        https://bugs.webkit.org/show_bug.cgi?id=129324

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:

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:

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

        Add WebViewGroup
        https://bugs.webkit.org/show_bug.cgi?id=129280

        Reviewed by Dan Bernstein.

        This is a first step towards getting rid of page groups in WebCore. The idea is that
        everything that is per page group in WebCore will be per page. In order to retain WebKit1 compatibility
        WebViewGroup is going to take over more and more responsibility from WebCore::PageGroup.

        * WebCoreSupport/WebViewGroup.h: Added.
        * WebCoreSupport/WebViewGroup.mm: Added.
        (webViewGroups):
        (WebViewGroup::getOrCreate):
        (WebViewGroup::WebViewGroup):
        (WebViewGroup::~WebViewGroup):
        (WebViewGroup::addWebView):
        (WebViewGroup::removeWebView):
        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (-[WebView _close]):
        (-[WebView setGroupName:]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:

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  David Kilzer  <ddkilzer@apple.com>

        Remove redundant setting in FeatureDefines.xcconfig

        * Configurations/FeatureDefines.xcconfig:

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>

        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-21  Sam Weinig  <sam@webkit.org>

        Expose phase and momentum phase as SPI on DOMWheelEvent
        <rdar://problem/16110871>
        https://bugs.webkit.org/show_bug.cgi?id=129184

        Reviewed by Anders Carlsson.

        * DOM/WebDOMOperations.mm:
        (toNSEventPhase):
        (-[DOMWheelEvent _phase]):
        (-[DOMWheelEvent _momentumPhase]):
        * DOM/WebDOMOperationsPrivate.h:
        Expose _phase and _momentumPhase as SPI.

        * MigrateHeaders.make:
        Make DOMWheelEventInternal.h to WebKit.

2014-02-22  David Kilzer  <ddkilzer@apple.com>

        Revert r164434 since it actually broke ASan builds
        <http://webkit.org/b/128871>

        * Configurations/WebKit.xcconfig: This caused -asan-blacklist to
        be included twice on every compiler command, which caused clang
        to error out.

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-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.

        Expose the imageControlsEnabled setting to WebKit1 so DRT can use it.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences imageControlsEnabled]):
        (-[WebPreferences setImageControlsEnabled:]):
        * WebView/WebPreferencesPrivate.h:

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-02-20  David Kilzer  <ddkilzer@apple.com>

        [ASan] WebKit1 sources are not compiled using ASAN macros
        <http://webkit.org/b/128871>

        Reviewed by Brent Fulgham.

        * Configurations/WebKit.xcconfig: Use $inherited for
        OTHER_CFLAGS and OTHER_CPLUSPLUSFLAGS so that ASAN_OTHER_CFLAGS
        and ASAN_OTHER_CPLUSPLUSFLAGS are inherited from
        DebugRelease.xcconfig.

2014-02-19  Brady Eidson  <beidson@apple.com>

        Add FeatureDefines for image controls
        https://bugs.webkit.org/show_bug.cgi?id=129022

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:

2014-02-18  Sam Weinig  <sam@webkit.org>

        Simplify HTML tokenizer parameterization down to what is used
        https://bugs.webkit.org/show_bug.cgi?id=128977

        Reviewed by Alexey Proskuryakov.

        Remove unused _setCustomHTMLTokenizerTimeDelay and _setCustomHTMLTokenizerChunkSize SPI.

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2014-02-17  Anders Carlsson  <andersca@apple.com>

        Remove view source code
        https://bugs.webkit.org/show_bug.cgi?id=127233

        Reviewed by Antti Koivisto.

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2014-02-17  Sergio Correia  <sergio.correia@openbossa.org>

        Replace uses of PassOwnPtr/OwnPtr with std::unique_ptr in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=128681

        Reviewed by Timothy Hatcher.

        Another step towards getting rid of PassOwnPtr/OwnPtr, now targeting
        WebCore/inspector/*. Besides files in there, a few other files in
        JavaScriptCore/inspector, WebKit/, WebKit2/WebProcess/WebCoreSupport/
        and WebCore/testing were touched.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:

2014-02-15  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Remove WebSerializedJSValue SPI
        https://bugs.webkit.org/show_bug.cgi?id=128720

        Reviewed by Anders Carlsson.

        * WebKit.exp:
        * WebView/WebSerializedJSValue.h: Removed.
        * WebView/WebSerializedJSValue.mm: Removed.
        * WebView/WebSerializedJSValuePrivate.h: Removed.

2014-02-15  Alexey Proskuryakov  <ap@apple.com>

        [Mac] All WebKit clients should encrypt WebCrypto keys automatically
        https://bugs.webkit.org/show_bug.cgi?id=128852

        Reviewed by Oliver Hunt.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::wrapCryptoKey):
        (WebChromeClient::unwrapCryptoKey):
        Call the default implementation if key is not provided by a client.

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

        Control tints don't update inside WebViews
        https://bugs.webkit.org/show_bug.cgi?id=128862

        Reviewed by Ryosuke Niwa.

        * WebView/WebView.mm:
        (-[WebView _windowChangedKeyState]):
        Call [super _windowChangedKeyState].

2014-02-13  Myles C. Maxfield  <mmaxfield@apple.com>

        During a copy, position:fixed gets converted to position:absolute even if only part of the document is selected
        https://bugs.webkit.org/show_bug.cgi?id=128688

        Reviewed by Ryosuke Niwa.

        Renames the ConvertPositionStyleOnCopy setting to ShouldConvertPositionStyleOnCopy

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences shouldConvertPositionStyleOnCopy]):
        (-[WebPreferences setShouldConvertPositionStyleOnCopy:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-02-13  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add a WebKit1 SPI to get WebCrypto master key from a client
        https://bugs.webkit.org/show_bug.cgi?id=128725

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::wrapCryptoKey):
        (WebChromeClient::unwrapCryptoKey):
        * WebView/WebUIDelegatePrivate.h:
        Looks like UIDelegate is the closest we have to a reasonable place.

2014-02-13  Dan Bernstein  <mitz@apple.com>

        iOS build fix.

        * WebView/WebView.mm:
        (+[WebView registerForMemoryNotifications]):

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

        Wrap WebCrypto keys in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128680

        Reviewed by Anders Carlsson.

        Retrieve a master key (placeholder code for now), and use it to wrap key data.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::wrapCryptoKey):
        (WebChromeClient::unwrapCryptoKey):

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

        Frame::rectForSelection shouldn't instantiate FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=128587

        Reviewed by Enrica Casucci.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::respondToChangedSelection):

2014-02-10  Myles C. Maxfield  <mmaxfield@apple.com>

        Convert position:sticky and position:fixed properties to position:static and position:absolute upon copy
        https://bugs.webkit.org/show_bug.cgi?id=128194

        Reviewed by Simon Fraser.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences convertPositionStyleOnCopy]):
        (-[WebPreferences setConvertPositionStyleOnCopy:]):
        * WebView/WebPreferencesPrivate.h: Opt-in to new behavior
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        [Mac] connection:willStopBufferingData: no longer exists in NSURLConnectionDelegate
        https://bugs.webkit.org/show_bug.cgi?id=128583

        Reviewed by Anders Carlsson.

        The delegate method was removed in Snow Leopard.

        * Misc/WebDownload.mm:

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

        iOS build fix.

        * WebCoreSupport/WebChromeClient.mm: Fixed incorrectly nested ifdefs.

2014-02-10  Alexey Proskuryakov  <ap@apple.com>

        Add hooks for wrapping CryptoKeys in SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128567

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::wrapCryptoKey):
        (WebChromeClient::unwrapCryptoKey):
        Dummy implementation, to be filled in later.

2014-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup the interface of FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=128481

        Reviewed by Andreas Kling.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView selectionRect]):
        (-[WebHTMLView selectionImageRect]):

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

        Remove use of PLATFORM(MAC) from WebKit/mac
        https://bugs.webkit.org/show_bug.cgi?id=128476

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Remove client-drawn highlights (-webkit-highlight, WebHTMLHighlighter)
        https://bugs.webkit.org/show_bug.cgi?id=128456

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm: Removed customHighlightRect and paintCustomHighlight.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]): Removed highlighters ivar.
        (-[WebHTMLViewPrivate clear]): Ditto.
        * WebView/WebHTMLViewInternal.h: Removed declaration.
        * WebView/WebHTMLViewPrivate.h: Removed WebHTMLHighlighter protocol and method declarations.

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

        iOS build fix after r163712.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:

2014-02-08  Darin Adler  <darin@apple.com>

        Change TextIterator to use StringView, preparing to wean it from deprecatedCharacters
        https://bugs.webkit.org/show_bug.cgi?id=128233

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebEditorClient.h: Made most data members private. Moved inlines
        for iOS out of the class definition. Fixed formatting. Added missing virtual keyword.
        Changed interfaces to use StringView.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::checkTextOfParagraph): Use the new StringView::createNSStringWithoutCopying
        function instead of a similar function that was local in this file.
        (WebEditorClient::ignoreWordInSpellDocument): Tweaked formatting.
        (WebEditorClient::checkSpellingOfString): Changed to take a StringView.
        (WebEditorClient::checkGrammarOfString): Ditto.

        * WebView/WebTextIterator.mm:
        (-[WebTextIterator currentTextPointer]): Call TextIterator::deprecatedTextIteratorCharacters.
        (-[WebTextIterator currentText]): Convert a the text to an NSString with TextIterator::text
        instead of with TextIterator::characters/length.

2014-02-07  Gavin Barraclough  <barraclough@apple.com>

        Remove isInitialState flag from Page::setViewState
        https://bugs.webkit.org/show_bug.cgi?id=128428

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _updateVisibilityState]):
        (-[WebView _setIsVisible:]):
        (-[WebView _setVisibilityState:isInitialState:]):
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):
            - don't pass isInitialState to setViewState.

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

        More FTL build scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=128330

        Reviewed by Geoffrey Garen.

        * Configurations/FeatureDefines.xcconfig:

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

        iOS build fix.

        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initializeLookupTable]):
        (-[WebElementDictionary _image]):
        (-[WebElementDictionary _imageRect]):

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Console support to JSContext Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127941

        Reviewed by Geoffrey Garen.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageSource):
        (stringForMessageLevel):
        (WebChromeClient::addMessageToConsole):

2014-02-05  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebView/WebView.mm:
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):
            - remove calls to FocusController::setContentIsVisible, these are redundant
              (this is handled when page visibility is set).

2014-02-05  Andreas Kling  <akling@apple.com>

        Remove ENABLE(DIRECTORY_UPLOAD).
        <https://webkit.org/b/128275>

        Rubber-stamped by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2014-02-05  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2014-02-04  Andreas Kling  <akling@apple.com>

        Remove <iframe seamless> support.
        <https://webkit.org/b/128213>

        Rubber-stamped by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-02-03  Dean Jackson  <dino@apple.com>

        Feature flag for shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=128001

        Reviewed by Simon Fraser.

        Add CSS_SHAPE_INSIDE flag.

        * Configurations/FeatureDefines.xcconfig:

2014-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Remove inline member functions of FrameSelection that access m_selection
        https://bugs.webkit.org/show_bug.cgi?id=127986

        Reviewed by Enrica Casucci.

        * WebView/WebFrame.mm:
        (-[WebFrame hasEditableSelection]):
        (-[WebFrame selectionAffinity]):
        (-[WebFrame getDictationResultRanges:andMetadatas:]):
        (-[WebFrame hasRichlyEditableSelection]):
        (-[WebFrame focusedNodeHasContent]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView readSelectionFromPasteboard:]):
        (-[WebHTMLView _hasSelection]):
        (-[WebHTMLView _hasSelectionOrInsertionPoint]):
        (-[WebHTMLView _hasInsertionPoint]):
        (-[WebHTMLView _isEditable]):
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView maintainsInactiveSelection]):
        (isTextInput):
        (isInPasswordField):
        * WebView/WebView.mm:
        (-[WebView selectionAffinity]):

2014-01-31  Tim Horton  <timothy_horton@apple.com>

        [wk2] PlatformCALayerRemoteCustom doesn't work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=128025
        <rdar://problem/15950271>

        Reviewed by Simon Fraser.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView windowHostsLayersInWindowServer]):
        Use the new macro name.

2014-01-30  David Kilzer  <ddkilzer@apple.com>

        Add security-checked cast for WebCore::CachedImage
        <http://webkit.org/b/127967>

        Reviewed by Darin Adler.

        * Misc/WebCache.mm:
        (+[WebCache imageForURL:]):
        - Use WebCore::toCachedImage().

2014-01-30  David Kilzer  <ddkilzer@apple.com>

        De-virtual-ize CachedResource::isImage()
        <http://webkit.org/b/127936>

        Reviewed by Andreas Kling.

        Also replace explicit type() checks with isImage().

        * Misc/WebCache.mm:
        (+[WebCache imageForURL:]): Use !isImage().

2014-01-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=127371
        Explore new API that could be used to help build infinitely scrolling websites
        -and corresponding-
        <rdar://problem/15244768>

        Reviewed by Sam Weinig.

        FrameView::scrollPositionChangedViaPlatformWidget() now take two parameters 
        representing the old scroll position and the new position.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):

2014-01-30  Andrei Bucur  <abucur@adobe.com>

        Remove the ACCELERATED_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=127833

        Reviewed by Antti Koivisto.

        Remove the USE(ACCELERATED_COMPOSITING) conditionals from the code base and make AC
        mandatory.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        (-[WebHostedNetscapePluginView createPluginLayer]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        (-[WebNetscapePluginView getVariable:value:]):
        * Plugins/WebPluginController.mm:
        (-[WebPluginController superlayerForPluginView:]):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::allowedCompositingTriggers):
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (PluginWidgetIOS::detachPluginLayer):
        (NetscapePluginWidget::platformLayer):
        * WebView/WebClipView.mm:
        (-[WebClipView _immediateScrollToPoint:]):
        * WebView/WebHTMLView.mm:
        (setNeedsDisplayInRect):
        (+[WebHTMLViewPrivate initialize]):
        (-[WebHTMLViewPrivate clear]):
        (-[WebHTMLView _setAsideSubviews]):
        (-[WebHTMLView hitTest:]):
        (-[WebHTMLView _isUsingAcceleratedCompositing]):
        (-[WebHTMLView _compositingLayersHostingView]):
        (-[WebHTMLView viewDidMoveToSuperview]):
        (-[WebHTMLView drawRect:]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer compositingInfoForLayer:]):
        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView _setMediaLayer:forPluginView:]):
        (-[WebView _postsAcceleratedCompositingNotifications]):
        (-[WebView _setPostsAcceleratedCompositingNotifications:]):
        (-[WebView _isUsingAcceleratedCompositing]):
        (-[WebView _isSoftwareRenderable]):
        (-[WebView close]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (WebViewLayerFlushScheduler::WebViewLayerFlushScheduler):
        * WebView/WebViewInternal.h:

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

        Remove ENABLE(JAVASCRIPT_DEBUGGER) leftovers
        https://bugs.webkit.org/show_bug.cgi?id=127845

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

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

        Moved linking against common frameworks and a library from the .xcconfig file into the target.

        Reviewed by Tim Horton.

        * Configurations/WebKit.xcconfig:

2014-01-29  Ryosuke Niwa  <rniwa@webkit.org>

        checkTextOfParagraph releases NSString twice
        https://bugs.webkit.org/show_bug.cgi?id=127881
        <rdar://problem/15937446>

        Reviewed by Anders Carlsson.

        textString is released once by an explicit call to release and again by it going out of scope.
        Don't do the explicit release.

        The bug was spotted by Sam Weinig.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::checkTextOfParagraph):

2014-01-29  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebView/WebPDFView.mm:
        (_applicationInfoForMIMEType):

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

        <https://webkit.org/b/127767> Disable some deprecation warnings to fix the build.

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::populate):

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

        WebKit1: Enable -Wimplicit-fallthrough and add FALLTHROUGH annotation where needed
        https://bugs.webkit.org/show_bug.cgi?id=127664

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        * History/BinaryPropertyList.cpp:
        (BinaryPropertyListSerializer::appendObjectReference):
        (BinaryPropertyListSerializer::startObject):
        (BinaryPropertyListSerializer::addAggregateObjectReference):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2014-01-27  Andy Estes  <aestes@apple.com>

        Scrub WebKit API headers of WTF macros
        https://bugs.webkit.org/show_bug.cgi?id=127706

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_INSPECTOR.
        * WebView/WebPreferenceKeysPrivate.h: Changed ENABLE(REMOTE_INSPECTOR)
        to !defined(ENABLE_REMOTE_INSPECTOR) || ENABLE_REMOTE_INSPECTOR. We are
        in a TARGET_OS_IPHONE block, and ENABLE_REMOTE_INSPECTOR is enabled by
        default on iOS, so include this block unless the feature is explicitly
        disabled.
        * postprocess-headers.sh: Stopped processing ENABLE_IOS_TOUCH_EVENTS
        and ENABLE_IOS_GESTURE_EVENTS. These are now defined in DOMEvents.h.

2014-01-27  Tim Horton  <timothy_horton@apple.com>

        Another iOS build fix.

        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary _image]):
        We were apparently depending on Image::getNSImage() being defined
        (yet always returning nullptr) on iOS.

2014-01-26  David Kilzer  <ddkilzer@apple.com>

        Remove duplicate settings for ENABLE(DISK_IMAGE_CACHE)
        <http://webkit.org/b/127669>

        Reviewed by Joseph Pecoraro.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Remove duplicate code.

2014-01-24  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes in Tools/DumpRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=127412

        Reviewed by Simon Fraser.

        * Misc/WebCoreStatistics.h: Included CGContext.h.

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move history item visit count handling to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=127659

        Reviewed by Dan Bernstein.

        Move code to deal with visit count and visit dates here from WebCore.

        * History/HistoryPropertyList.mm:
        (HistoryPropertyListWriter::writeHistoryItem):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initWithURLString:title:lastVisitedTimeInterval:]):
        (-[WebHistoryItem copyWithZone:]):
        (-[WebHistoryItem lastVisitedTimeInterval]):
        (-[WebHistoryItem initWithURLString:title:displayTitle:lastVisitedTimeInterval:]):
        (-[WebHistoryItem setVisitCount:]):
        (-[WebHistoryItem _mergeAutoCompleteHints:]):
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        (-[WebHistoryItem _visitedWithTitle:increaseVisitCount:]):
        (-[WebHistoryItem _recordInitialVisit]):
        (timeToDay):
        (-[WebHistoryItem _padDailyCountsForNewVisit:]):
        (-[WebHistoryItem _collapseDailyVisitsToWeekly]):
        (-[WebHistoryItem _recordVisitAtTime:increaseVisitCount:]):
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
        * History/WebHistoryItemInternal.h:

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Fix build.

        Pass a WebHistoryItem to writeHistoryItem so we can extract _lastVisitWasHTTPNonGet from it.

        * History/HistoryPropertyList.h:
        * History/HistoryPropertyList.mm:
        (HistoryPropertyListWriter::HistoryPropertyListWriter):
        (HistoryPropertyListWriter::buffer):
        (HistoryPropertyListWriter::releaseData):
        (HistoryPropertyListWriter::writeObjects):
        (HistoryPropertyListWriter::writeHistoryItem):
        * History/WebHistory.mm:
        (WebHistoryWriter::writeHistoryItems):
        * History/WebHistoryItem.mm:

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move lastVisitWasHTTPNonGet out to WebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=127657

        Reviewed by Dan Bernstein.

        Keep track of _lastVisitWasHTTPNonGet inside WebHistoryItem.

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:increaseVisitCount:]):
        Set entry->_private->_lastVisitWasHTTPNonGet.

        * History/WebHistoryItem.h:
        Change @private to @package so we can get at WebHistoryItemPrivate from WebHistory.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem copyWithZone:]):
        Assign _private->_lastVisitWasHTTPNonGet.

        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        Set _private->_lastVisitWasHTTPNonGet.

        * History/WebHistoryItemInternal.h:
        Move WebHistoryItemPrivate interface here.

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Turn WebHistoryItemPrivate back into a real Objective-C class
        https://bugs.webkit.org/show_bug.cgi?id=127653

        Reviewed by Sam Weinig.

        This is a first step towards moving some history specific code from WebCore::HistoryItem back into WebKit.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem dealloc]):
        (-[WebHistoryItem finalize]):
        (-[WebHistoryItem initWithWebCoreHistoryItem:]):

2014-01-25  Sam Weinig  <sam@webkit.org>

        Remove unused support for DRAGGABLE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=127642

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-01-25  Anders Carlsson  <andersca@apple.com>

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

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebView/WebViewData.h:

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Get rid of BackForwardController::isActive()
        https://bugs.webkit.org/show_bug.cgi?id=127604

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canCachePage):
        Move isActive logic here.

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

        Remove back/forward list related functions from Page
        https://bugs.webkit.org/show_bug.cgi?id=127596

        Reviewed by Andreas Kling.

        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:keyDown:]):
        * WebView/WebView.mm:
        (-[WebView _loadBackForwardListFromOtherView:]):
        (-[WebView initWithCoder:]):
        (-[WebView encodeWithCoder:]):
        (-[WebView backForwardList]):
        (-[WebView setMaintainsBackForwardList:]):
        (-[WebView goBack]):
        (-[WebView goForward]):
        (-[WebView canGoBack]):
        (-[WebView canGoForward]):

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

        Get rid of monotonicallyIncreasingTimeMS and start using std::chrono instead
        https://bugs.webkit.org/show_bug.cgi?id=127571

        Reviewed by Antti Koivisto.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Convert the layout interval to std::chrono::milliseconds.

2014-01-24  Zan Dobersek  <zdobersek@igalia.com>

        Move HistoryItem to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127275

        Reviewed by Darin Adler.

        * History/WebHistoryItem.mm: The Vector object that's passed to HistoryItem::setRedirectURLs
        should now be handled by std::unique_ptr and passed on through move semantics.
        (-[WebHistoryItem initFromDictionaryRepresentation:]):

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

        Move RegularExpression into JavaScriptCore for inspector
        https://bugs.webkit.org/show_bug.cgi?id=127526

        Reviewed by Geoffrey Garen.

        * WebView/WebHTMLRepresentation.mm:

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

        Remote Inspector uses the Page pointer before the page is created on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127534

        Reviewed by Joseph Pecoraro.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

2014-01-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
        <https://bugs.webkit.org/show_bug.cgi?id=126761>
        <rdar://problem/15793540>

        Some areas of code were erroneously checking the value of
        RenderObject::isImage() rather than RenderObject::isRenderImage()
        before casting the object to RenderImage.

        This could lead to an assertion failure for RenderListMarkers, which
        may return true for isImage(), but are not RenderImages.

        Reviewed by Andy Estes.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
        Check isRenderImage() rather than isImage() before casting to
        RenderImage.

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

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Geoffrey Garen.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView:]):
        Include InspectorDisconnectReason.

2014-01-23  Max Vujovic  <mvujovic@adobe.com>

        Remove CSS Custom Filters code and tests
        https://bugs.webkit.org/show_bug.cgi?id=127382

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove CSS3_TEXT_DECORATION define
        https://bugs.webkit.org/show_bug.cgi?id=127333

        Reviewed by Simon Fraser.

        This is required for unprefixing the text-decoration-* CSS properties.

        * Configurations/FeatureDefines.xcconfig:

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

        Build fix for iOS clients of WebUIDelegatePrivate.h.

        * WebView/WebUIDelegatePrivate.h: Ensure that ENABLE_DASHBOARD_SUPPORT is defined on iOS.

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

        Added a method declaration that was missed in r161185.

        Reviewed by Sam Weinig.

        * WebView/WebViewPrivate.h: Declared -removeVisitedLink:.

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162452.
        http://trac.webkit.org/changeset/162452
        https://bugs.webkit.org/show_bug.cgi?id=127366

        broke a few tests on all Mac WebKit1 bots (Requested by
        thorton on #webkit).

        * WebView/WebView.mm:
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):

2014-01-21  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebView/WebView.mm:
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):
            - remove calls to FocusController::setContentIsVisible, these are redundant
              (this is handled when page visibility is set).

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

        Add AVKit fullscreen video interface.
        https://bugs.webkit.org/show_bug.cgi?id=126818

        Reviewed by Eric Carlson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullscreenForNode):
        Enable *FullscreenForNode for HTMLMediaElement for iOS

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences mediaPlaybackFullscreenAVKit]):
        (-[WebPreferences setMediaPlaybackFullscreenAVKit:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        (-[WebView _enterFullscreenForNode:WebCore::]):
        * WebView/WebViewInternal.h:
        Add a disabled pref mediaPlaybackFullscreenAVKit.
        Use WebVideoFullscreenControllerAVKit on iOS

2014-01-18  Brian Burg  <bburg@apple.com>

        Web Inspector: Page should use std::unique_ptr for InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=127068

        Reviewed by Joseph Pecoraro.

        Convert call sites to use a InspectorController reference.
        Convert instantiations of InspectorFrontendClient to use std::unique_ptr.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):
        (-[WebInspectorWindowController destroyInspectorView:]):
        * WebInspector/WebInspector.mm:
        (-[WebInspector showWindow]):
        (-[WebInspector isJavaScriptProfilingEnabled]):
        (-[WebInspector setJavaScriptProfilingEnabled:]):
        (-[WebInspector close:]):
        (-[WebInspector evaluateInFrontend:callId:script:]):
        * WebInspector/WebNodeHighlighter.mm:
        (-[WebNodeHighlighter highlight]):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_THREADED_HTML_PARSER defines everywhere
        https://bugs.webkit.org/show_bug.cgi?id=127225

        Reviewed by Andreas Kling.

        This concludes the removal of over 8.8 million lines of threaded parser code.

        * Configurations/FeatureDefines.xcconfig:

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Clean up PageCache classes
        https://bugs.webkit.org/show_bug.cgi?id=127202

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::savePlatformDataToCachedFrame):
        (WebFrameLoaderClient::transitionToCommittedFromCachedFrame):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove another unused FrameLoaderClient callback
        https://bugs.webkit.org/show_bug.cgi?id=127192

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Move didPerformFirstNavigation() logic to -[WebView _didCommitLoadForFrame:]
        https://bugs.webkit.org/show_bug.cgi?id=127189

        Reviewed by Dan Bernstein.

        This is a first step towards completely eliminating the didPerformFirstNavigation() client callback.
        
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Remove didPerformFirstNavigation() implementation.

        * WebView/WebView.mm:
        (-[WebView _checkDidPerformFirstNavigation]):
        Check if we have both a current item and a previous item which indicates that we've navigated once.
        The old code was called before there was a current item but since this is called from _didCommitLoadForFrame
        we have to check that there's a current item as well.

        (-[WebView _didCommitLoadForFrame:]):
        Call _didCommitLoadForFrame.

        * WebView/WebViewData.h:
        Add new ivar.

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

        More iOS build fix.

        * WebView/WebPreferences.mm: (-[WebPreferences _synchronizeWebStoragePolicyWithCookiePolicy]):
        NSHTTPCookieAcceptPolicyExclusivelyFromMainDocumentDomain is not part of NSHTTPCookieAcceptPolicy enum.

2014-01-16  Daniel Bates  <dabates@apple.com>

        [iOS] MobileSafari build fix. Declare iOS-specific method mainFrameIconURL

        For now, add mainFrameIconURL() to WebView.h. We should further investigate its
        usage and API/SPI status.

        * WebView/WebView.h:

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

        [Mac] [iOS] Add support for CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain
        https://bugs.webkit.org/show_bug.cgi?id=127139

        Reviewed by Brady Eidson.

        * WebView/WebPreferences.mm: (-[WebPreferences _synchronizeWebStoragePolicyWithCookiePolicy]):
        Handle the new case.

2014-01-16  Daniel Bates  <dabates@apple.com>

        [iOS] Fix UIKit build warning about undefined macro ENABLE_NETSCAPE_PLUGIN_API

        * WebView/WebFramePrivate.h: Wrap use of ENABLE_NETSCAPE_PLUGIN_API in TARGET_OS_IPHONE.

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Change all uses of FINAL to final now that all our compilers support it
        https://bugs.webkit.org/show_bug.cgi?id=127142

        Reviewed by Benjamin Poulain.

        * WebCoreSupport/WebUserMediaClient.h:
        * WebView/WebScriptDebugger.h:

2014-01-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting explicit override control
        https://bugs.webkit.org/show_bug.cgi?id=127111

        Reviewed by Anders Carlsson.

        Now all compilers support explicit override control, this workaround can be removed.

        * Storage/WebDatabaseManagerClient.h:
        * Storage/WebStorageTrackerClient.h:
        * WebCoreSupport/WebAlternativeTextClient.h:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebDeviceOrientationClient.h:
        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebGeolocationClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebProgressTrackerClient.h:
        * WebCoreSupport/WebUserMediaClient.h:
        * WebView/WebScriptDebugger.h:
        * WebView/WebViewData.h:

2014-01-16  Andy Estes  <aestes@apple.com>

        [iOS] Fix build issues with exported headers

        * DOM/WebDOMOperationsPrivate.h: Changed PLATFORM(IOS) to
        TARGET_OS_IPHONE.
        * MigrateHeaders.make: Excluded WAKScrollView.h from normal replacement
        rules so that WebCoreFrameScrollView won't inadvertently get changed to
        WebKitFrameScrollView.
        * Plugins/WebPlugin.h: Moved contents of WebPluginPrivate.h to here in
        order to maintain source compatibility.
        * Plugins/WebPluginController.mm: Removed an import of WebPluginPrivate.h.
        * Plugins/WebPluginPrivate.h: Removed.
        * Storage/WebDatabaseManagerPrivate.h: Replaced ENABLE(SQL_DATABASE)
        with ENABLE_SQL_DATABASE.
        * WebView/WebViewPrivate.h: Added declaration of
        -[WebView _touchEventRegions] for source compatibility.

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

        Fix the iOS build after r162114

        Unreviewed.

        * WebView/WebViewPrivate.h: I forgot to remove the declaration, fix that.

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

        Move user agent code to WebCore and unify some code between OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=127080

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebView.mm:
        (userVisibleWebKitVersionString):
        (+[WebView _standardUserAgentWithApplicationName:]):
        (-[WebView _setUIWebViewUserAgentWithBuildVersion:]):

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

        [iOS] Clean up REMOTE_INSPECTOR code in OpenSource after the iOS merge
        https://bugs.webkit.org/show_bug.cgi?id=127069

        Reviewed by Timothy Hatcher.

        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):
        (+[WebView _enableRemoteInspector]):
        (+[WebView _disableRemoteInspector]):
        (+[WebView _disableAutoStartRemoteInspector]):
        (+[WebView _isRemoteInspectorEnabled]):
        (+[WebView _hasRemoteInspectorSession]):
        (-[WebView allowsRemoteInspection]):
        Implement with RemoteInspector.h SPIs.

        (-[WebView setAllowsRemoteInspection:]):
        (-[WebView setHostApplicationBundleId:name:]):
        Still unimplemented, update comment.

        (-[WebView _didCommitLoadForFrame:]):
        Remove dead path, WebCore now pushes updates on navigations.

        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        Remove now unused ivar.

2014-01-15  Alexey Proskuryakov  <ap@apple.com>

        More iOS build fixing.

        * WebView/WebPreferences.mm: (-[WebPreferences _invalidateCachedPreferences]):
        Removed a now unused local variable.

2014-01-15  Alexey Proskuryakov  <ap@apple.com>

        Build fix for iOS.

        * WebView/WebPreferences.mm: (-[WebPreferences _invalidateCachedPreferences]):
        Update a remaining call site of _updatePrivateBrowsingStateFram:to:.

2014-01-15  Alexey Proskuryakov  <ap@apple.com>

        Crash when multiple WebView instances have different PrivateBrowsing settings
        https://bugs.webkit.org/show_bug.cgi?id=127019

        * WebView/WebPreferences.mm: (-[WebPreferences _updatePrivateBrowsingStateTo:]):
        Added a null check to fix Safari crash on startup when extensions are enabled.

2014-01-15  Alexey Proskuryakov  <ap@apple.com>

        Crash when multiple WebView instances have different PrivateBrowsing settings
        https://bugs.webkit.org/show_bug.cgi?id=127019

        Reviewed by Sam Weinig.

        * WebView/WebView.mm: (-[WebView _preferencesChanged:]): Don't delete a private
        browsing session simply because one preferences object doesn't use private browsing.
        There could be others that do.

        * WebView/WebPreferences.mm: Track how many WebPreferences objects use private
        browsing, and only delete the private session when there are none any more.

2014-01-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Missing RenderObject::style() symbol in WebDOMOperations.mm

        Fixes the following linker error:

            Undefined symbols for architecture x86_64:
              "__ZNK7WebCore12RenderObject5styleEv", referenced from:
                  -[DOMNode(WebDOMNodeOperations) isHorizontalWritingMode] in WebDOMOperations.o

        * DOM/WebDOMOperations.mm: Include RenderElement.h instead of
        RenderObject.h since the inline RenderObject::style() method
        moved to the former header.

2014-01-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162054.
        http://trac.webkit.org/changeset/162054
        https://bugs.webkit.org/show_bug.cgi?id=127053

        Causes assertion failures in DumpRenderTree (Requested by ap
        on #webkit).

        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:sendChangeNotification:initWithIdentifier:]):
        (-[WebPreferences initWithCoder:]):
        (+[WebPreferences standardPreferences]):
        (-[WebPreferences dealloc]):
        (-[WebPreferences setPrivateBrowsingEnabled:]):
        (-[WebPreferences _invalidateCachedPreferences]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2014-01-14  Alexey Proskuryakov  <ap@apple.com>

        Crash when multiple WebView instances have different PrivateBrowsing settings
        https://bugs.webkit.org/show_bug.cgi?id=127019

        Reviewed by Sam Weinig.

        * WebView/WebView.mm: (-[WebView _preferencesChanged:]): Don't delete a private
        browsing session simply because one preferences object doesn't use private browsing.
        There could be others that do.

        * WebView/WebPreferences.mm: Track how many WebPreferences objects use private
        browsing, and only delete the private session when there are none any more.

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build after r162034.

        * WebCoreSupport/WebProgressTrackerClient.mm:
        * WebView/WebView.mm:
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

2014-01-14  Mark Rowe  <mrowe@apple.com>

        Stop cmp from spewing useless info during postprocess-headers.sh.

        * postprocess-headers.sh: Pass -s to silence cmp since we only care about the
        exit status.

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

        [iOS] Crash in NavigatorBase::vendor loading apple.com
        https://bugs.webkit.org/show_bug.cgi?id=127028

        Reviewed by Daniel Bates.

        Fill in iOS WebKitSystemInterface functions.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Create separate progress tracker clients
        https://bugs.webkit.org/show_bug.cgi?id=127025

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebProgressTrackerClient.h: Copied from Source/WebCore/loader/ProgressTrackerClient.h.
        * WebCoreSupport/WebProgressTrackerClient.mm: Added.
        (WebProgressTrackerClient::WebProgressTrackerClient):
        (WebProgressTrackerClient::progressTrackerDestroyed):
        (WebProgressTrackerClient::willChangeEstimatedProgress):
        (WebProgressTrackerClient::didChangeEstimatedProgress):
        (WebProgressTrackerClient::progressStarted):
        (WebProgressTrackerClient::progressEstimateChanged):
        (WebProgressTrackerClient::progressFinished):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]):

2014-01-14  Dean Jackson  <dino@apple.com>

        Correct grave mistake in updating the pbxproj file rather than xcconfig.

        * Configurations/WebKit.xcconfig:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        #define ENABLE_DASHBOARD_SUPPORT for iOS.

        * WebView/WebViewPrivate.h:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up exports and headers for iOS.
        
        Need to export WebArchivePboardType on Mac and iOS.

        * WebKit.exp:
        * WebKit.mac.exp:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Fix header availability checks on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127016

        Reviewed by Andy Estes.

        Make DOMTouch* and DOMGesture* headers public headers on iOS,
        and fix MigrateHeaders.make to skip availability checks when
        building for iOS.

        * MigrateHeaders.make:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Need to #import <WebCore/QuickLook.h>.

        * WebView/WebDataSource.mm:

2014-01-14  Daniel Bates  <dabates@apple.com>

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

        Reviewed by David Kilzer.

        Remove empty implementation for quickLookContentForURL: since we always enable QuickLook on iOS.

        * WebView/WebView.mm:
        (-[WebView quickLookContentForURL:]):

2014-01-14  Dean Jackson  <dino@apple.com>

        Move some Mac-only exports to WebKit.mac.exp for iOS build.

        * WebKit.exp:
        * WebKit.mac.exp:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Move some Mac-only exports to WebKit.mac.exp for iOS build.

        * WebKit.exp:
        * WebKit.mac.exp:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS WK1 linking.

        * Configurations/WebKit.xcconfig: We do need WebOpenPanelResultListener
        on iOS.
        * WebCoreSupport/WebOpenPanelResultListener.mm: Need <WebCore/Icon.h>

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        iOS build fixing: link WebKit against Security.framework on iOS.

        * Configurations/WebKit.xcconfig:

2014-01-14  Dean Jackson  <dino@apple.com>

        [WK1] Allow generated export files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127008

        Reviewed by Simon Fraser.

        Add a new Mac-only symbol file.

        * WebKit.exp: To begin, move the WebIcon* into the Mac-specific exports.
        * WebKit.mac.exp: Added. New file holds Mac-only symbols.

2014-01-14  Brian J. Burg  <burg@cs.washington.edu>

        Add ENABLE(WEB_REPLAY) feature flag to the build system
        https://bugs.webkit.org/show_bug.cgi?id=126949

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Fix the Mac build. WebViewPrivate.h declares quickLookContentForURL:
        for iOS, but the implementation conditionalizes on USE(QUICK_LOOK),
        which we are confused about.

        * WebView/WebView.mm:
        (-[WebView quickLookContentForURL:]):
        * WebView/WebViewPrivate.h:

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Fix the remaining compiler errors in iOS WK1.

        * WebView/WebFrame.mm:
        (vectorForDictationPhrasesArray): Need this function on iOS.
        (-[WebFrame setSelectedDOMRange:affinity:closeTyping:]): We're already inside
        a huge if PLATFORM(IOS) block.
        (-[WebFrame resetTextAutosizingBeforeLayout]): Document now exposes RenderView.
        * WebView/WebFrameInternal.h: Declare vectorForDictationPhrasesArray() (not a good place for it!)
        * WebView/WebView.mm: #import cleanup for iOS.
        (-[WebView initSimpleHTMLDocumentWithStyle:frame:preferences:groupName:]): Declare autoStartRemoteInspector
        here but this needs cleaning up (<rdar://problem/15810991>).
        (-[WebView setHostApplicationBundleId:name:]): No [WebView sharedWebInspectorServer] any more.
        (-[WebView _didCommitLoadForFrame:]): Ditto.
        * WebView/WebViewData.h: Add allowsRemoteInspection.
        * WebView/WebViewData.mm: Initialize allowsRemoteInspection
        (-[WebViewPrivate init]):
        * WebView/WebViewPrivate.h: Fumbled #ifdef.

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        More work towards getting iOS WK1 building.

        * DOM/WebDOMOperations.mm: Need RenderObject.h.
        * DOM/WebDOMOperationsPrivate.h:
        * History/WebBackForwardList.mm: Need Foundation/NSGeometry.h for NSRect
        (-[WebBackForwardList dictionaryRepresentation]): Fix array iteration to match
        other code.
        * Misc/WebIconDatabase.h: #ifdef out functions that return NSImages.
        * Plugins/WebPluginController.mm: Need <WebCore/AudioSession.h>
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Some new code to
        handle the error case.
        * WebView/WebFrameView.mm: Avoid including some headers which pull in AppKit classes.
        * WebView/WebHTMLView.mm: Ditto.
        (-[WebHTMLView selectionImageForcingBlackText:selectionImageForcingBlackText:]): Handle
        different return type of createDragImageForSelection().
        * WebView/WebPolicyDelegatePrivate.h:
        * WebView/WebPreferences.mm: <WebCore/AudioSession.h> and <AudioToolbox/AudioSession.h>

2014-01-13  Daniel Bates  <dabates@apple.com>

        [iOS] Remove duplicate inclusions of header WAKView.h
        following <http://trac.webkit.org/changeset/161910>

        * WebView/WebFrameView.h:
        * WebView/WebHTMLView.h:

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Various iOS WebKit1 build fixes.

        * Configurations/WebKit.xcconfig: Add more Mac-only files
        to the excluded files list for iOS.
        * DefaultDelegates/WebDefaultUIDelegate.m: Don't include WebJavaScriptTextInputPanel.h
        on iOS
        * History/WebHistory.h: NSCalendarDate doesn't exist on iOS.
        * Misc/WebDownload.h: Need WAKAppKitStubs.h
        * Misc/WebNSViewExtras.m: No WebNSPasteboardExtras on iOS
        * Storage/WebDatabaseManagerClient.mm: Need DatabaseTracker.h, no harm
        in including it for all platforms.
        * WebCoreSupport/WebEditorClient.h: Remove useless comment.
        * WebCoreSupport/WebEditorClient.mm:
        (nsStringWithoutCopying): Moved
        (WebEditorClient::checkTextOfParagraph): Modernized.
        * WebInspector/WebNodeHighlightView.mm: Need FloatQuad.h.
        * WebView/WebDataSource.mm: Need WebFrameViewInternal.h
        * WebView/WebDocument.h: Needs WAKView.h.
        * WebView/WebFrameView.h: Ditto.
        * WebView/WebHTMLView.h: Ditto.
        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument): No PDFDocument on iOS.
        * WebView/WebPolicyDelegate.h:
        * WebView/WebView.h: Fix incorrect #if.

2014-01-13  Daniel Bates  <dabates@apple.com>

        [iOS] More build fixes for WebKit

        * Configurations/Base.xcconfig: Removed extraneous definition of SUPPORTED_PLATFORMS.
        * Configurations/WebKit.xcconfig: Exclude more Mac-specific files when building for iOS:
        CarbonUtils.m, CarbonWindowAdapter.mm, CarbonWindowContentView.m, CarbonWindowFrame.m,
        HIViewAdapter.m, HIWebView.mm, MailQuirksUserScript.js, OutlookQuirksUserScript.js,
        PopupMenuMac.mm, SearchPopupMenuMac.mm, WebClipView.mm, WebInspectorClient.mm,
        WebNetscapeContainerCheckContextInfo.mm, WebNetscapeContainerCheckPrivate.mm, WebRenderNode.mm,
        WebStringTruncator.mm, and WebTextCompletionController.mm. I haven't verified the Mac-specific
        nature of each of these files. We may be able to reduce this list upon further investigation.
        * WebView/WebDocument.h: Include header <WebKit/WAKView.h> for definition of WAKView.
        * WebView/WebFrameView.h: Ditto.
        * WebView/WebUIDelegate.h: Ditto.
        * WebView/WebView.h: Ditto.

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Include WAKAppKitStubs.h to get NSSelectionAffinity.

        * WebView/WebEditingDelegate.h:

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        DOMTouch* etc should not be public headers on iOS.
        
        * MigrateHeaders.make:

2014-01-13  Andy Estes  <aestes@apple.com>

        [iOS] Build Fix: switch back to calling postprocess-headers.sh

        * postprocess-headers.sh:

2014-01-13  Zalan Bujtas  <zalan@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        <https://webkit.org/b/126283>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-01-12  Darin Adler  <darin@apple.com>

        Add deprecatedCharacters as a synonym for characters and convert most call sites
        https://bugs.webkit.org/show_bug.cgi?id=126858

        Reviewed by Anders Carlsson.

        * History/BinaryPropertyList.cpp:
        (BinaryPropertyListSerializer::appendStringObject):
        Use deprecatedCharacters instead of characters.

2014-01-12  Darin Adler  <darin@apple.com>

        Add type checking to isEqual methods
        https://bugs.webkit.org/show_bug.cgi?id=126862

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin isEqual:]): Added a FIXME about the lack of a hash method
        override. Tweaked formatting.

        * WebView/WebDashboardRegion.mm:
        (-[WebDashboardRegion isEqual:]): Added type checking on the argument. Added a
        FIXME about the lack of a hash method override.

2014-01-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] [Windows] Stop scheduling network requests in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126789
        <rdar://problem/15114727>

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Updated
        for new WKSI function names.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tweak ProgressTrackerClient functions
        https://bugs.webkit.org/show_bug.cgi?id=126808

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::progressStarted):
        (WebFrameLoaderClient::progressEstimateChanged):
        (WebFrameLoaderClient::progressFinished):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Move progress tracking functions from FrameLoaderClient to a new ProgressTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=126801

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        Clean up architectures in xcconfig files
        <http://webkit.org/b/126794>

        Reviewed by Andy Estes.

        * Configurations/WebKit.xcconfig: Remove armv6, armv7f, ppc.
        - Add new arch.

2014-01-10  Yongjun Zhang  <yongjun_zhang@apple.com>

        Clear unparented tiled layers on memory pressure.
        https://bugs.webkit.org/show_bug.cgi?id=126737

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (+[WebView _handleMemoryWarning]): Clear all unparented tiles when under memory pressure.

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the WebCore, WebKit build targets following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Tell Xcode that the supported platforms for all WebCore targets are iOS and OS X.

        * Configurations/Base.xcconfig:

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream iOS changes to MigrateHeaders.make
        https://bugs.webkit.org/show_bug.cgi?id=126731

        Reviewed by David Kilzer.

        * MigrateHeaders.make: Migrate iOS-specific headers when building for iOS.

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore and Tools miscellaneous changes
        https://bugs.webkit.org/show_bug.cgi?id=126698

        Reviewed by David Kilzer.

        * MigrateHeaders.make:

2014-01-08  Anders Carlsson  <andersca@apple.com>

        Add WTF::StringView and use it for grammar checking
        https://bugs.webkit.org/show_bug.cgi?id=126644

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::checkTextOfParagraph):
        Update to match the new signature.

        (nsStringWithoutCopying):
        New function that creates an NSString that references StringView data
        without copying the data. (If this function proves to be useful elsewhere, it could
        potentially be added to StringView).

2014-01-02  Andy Estes  <aestes@apple.com>

        [iOS] Clean up some exported headers
        https://bugs.webkit.org/show_bug.cgi?id=126403

        Reviewed by Simon Fraser.

        Public header files that are completely excluded on iOS don't need
        !TARGET_OS_IPHONE guards since they are already listed in
        EXCLUDED_SOURCE_FILE_NAMES.

        I also took the opportunity to sort EXCLUDED_SOURCE_FILE_NAMES and to
        clean up some #imports.

        * Configurations/WebKit.xcconfig:
        * Misc/WebCache.h:
        * Misc/WebIconDatabasePrivate.h:
        * Misc/WebLocalizableStrings.h:
        * Misc/WebNSEventExtras.h:
        * Misc/WebNSPasteboardExtras.h:
        * Misc/WebNSWindowExtras.h:
        * Panels/WebPanelAuthenticationHandler.h:
        * Plugins/WebPluginsPrivate.h:
        * Storage/WebDatabaseManagerPrivate.h:
        * WebCoreSupport/WebJavaScriptTextInputPanel.h:
        * WebCoreSupport/WebKeyGenerator.h:
        * WebCoreSupport/WebSecurityOriginPrivate.h:
        * WebView/WebDashboardRegion.h:
        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebFrameView.h:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebResourceLoadDelegatePrivate.h:
        * WebView/WebView.h:

2014-01-07  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover 'device metrics' code
        https://bugs.webkit.org/show_bug.cgi?id=126607

        Reviewed by Joseph Pecoraro.

        * WebKit.order: Update after removing InspectorClient::overrideDeviceMetrics().

2014-01-02  Andy Estes  <aestes@apple.com>

        [iOS] Upstream WebKit support for various features
        https://bugs.webkit.org/show_bug.cgi?id=126413

        Reviewed by Sam Weinig.

        Upstream iOS WebKit changes needed for these features:

        - ENABLE(DELETION_UI)
        - ENABLE(TOUCH_EVENTS)
        - USE(QUICK_LOOK)
        - USE(UIKIT_EDITING)
        - ENABLE(DISK_IMAGE_CACHE)
        - ENABLE(IOS_TEXT_AUTOSIZING)
        - ENABLE(ICONDATABASE)
        - ENABLE(DASHBOARD_SUPPORT)

        * DefaultDelegates/WebDefaultEditingDelegate.m:
        * Misc/WebCache.mm:
        * WebCoreSupport/WebChromeClient.h:
        * WebView/WebDataSource.mm:
        (-[WebDataSource dealloc]):
        * WebView/WebEditingDelegatePrivate.h:
        * WebView/WebFrame.mm:
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView maintainsInactiveSelection]):
        (-[WebHTMLView touch:]):
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        (-[WebView _cacheFrameLoadDelegateImplementations]):
        (-[WebView quickLookContentForURL:]):
        (-[WebView _touchEventRegions]):
        * WebView/WebViewPrivate.h:

2014-01-02  Andy Estes  <aestes@apple.com>

        [iOS] Upstream a bug fix for plugin-backed media elements
        https://bugs.webkit.org/show_bug.cgi?id=126412

        Reviewed by Eric Carlson.

        Media elements backed by plug-ins should outlive being removed from the
        document, like their native counterparts do.

        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (-[NSView isMediaPlugInProxyView]):
        (-[NSView setIsMediaPlugInProxyView:]):
        (-[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (-[WebPluginController mediaPlugInProxyViewCreated:]):
        (-[WebPluginController destroyPlugin:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (pluginView):

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

        <https://webkit.org/b/126562> DOMProgressEvent has unspecified availability

        Reviewed by Ryosuke Niwa.

        * MigrateHeaders.make: Ensure that public DOM headers do not have unspecified availability.

2014-01-06  Mark Rowe  <mrowe@apple.com>

        Mountain Lion build fix after r161332.

        * Carbon/HIWebView.h: Mountain Lion's version of CF_AVAILABLE_MAC doesn't accept a message
        argument so remove it.

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126499> Move WebKit off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        Since WebKit1 is API on OS X but SPI on iOS, some indirection is still needed in the
        availability macros to allow the headers to advertise the API as unavailable on OS X
        without interfering with the ability to build on iOS. This is achieved by defining
        WEBKIT-prefixed versions of the Foundation availability macros that are defined to
        their NS-prefixed equivalents. The installed headers are post-processed to map these
        macros back to their Foundation equivalents.

        Part of <rdar://problem/15512304>.

        The OS X version used in the new availability macros is based on the mapping in
        JavaScriptCore/WebKitAvailability.h.

        Reviewed by Sam Weinig.

        * Carbon/CarbonUtils.h:
        * Carbon/HIWebView.h:
        * MigrateHeaders.make: Migrate WebKitAvailability.h from WebCore as an API header.
        * Plugins/WebPlugin.h:
        * Plugins/WebPluginViewFactory.h:
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebResourceLoadDelegatePrivate.h:
        * WebView/WebUIDelegate.h:
        * postprocess-headers.sh: Added. Extracted from the Xcode project. Extended to map the
        WEBKIT-prefixed macros to their NS-prefixed equivalents on OS X and to remove them on iOS.

2014-01-04  Zan Dobersek  <zdobersek@igalia.com>

        Explicitly use the std:: nested name specifier when using std::pair, std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=126439

        Reviewed by Andreas Kling.

        Instead of relying on std::pair and std::make_pair symbols being present in the current scope
        through the pair and make_pair symbols, the std:: specifier should be used explicitly.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Remove WindowIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=126270

        Reviewed by Tim Horton.

        We currently track visibility in two ways - ViewState::IsVisible and ViewState::WindowIsVisible.
        The latter detects that the content is hidden in fewer cases than the former, and as such, the
        former is always preferable.

        This affects the hidden state provided to FocusController::contentAreaDidShowOrHide and to
        Plugin::windowVisibilityChanged.

        * WebView/WebView.mm:
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):
            - rename ContainingWindowIsVisible -> ContentIsVisible.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Merge didMoveOnscreen / page visibility to isVisible
        https://bugs.webkit.org/show_bug.cgi?id=126268

        Reviewed by Tim Horton.

        The onscreen state most closely tracks view visibility (though currently
        also tracks a mix of in-window state). Make more consistent, simplify,
        and move all animation suspension logic to Page, so it can be controlled
        by the PageThrottler.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _updateVisibilityState]):
            - _setVisibilityState:isInitialState: -> _setIsVisibile:isInitialState:.
        (-[WebView _setIsVisible:isInitialState:]):
            - added.
        (-[WebView _setVisibilityState:isInitialState:]):
            - setVisibilityState -> setIsVisible/setIsPrerender.
        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewDidMoveToWindow]):
            - remove redundant calls to willMoveOffscreen/didMoveOnscreen
              (this is handled by _updateVisibilityState).

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by Antti Koivisto.

        Update for new method signatures.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::setProperty):

2013-12-31  Andy Estes  <aestes@apple.com>

        [iOS] Upstream PLATFORM(IOS) changes to Source/WebKit/
        https://bugs.webkit.org/show_bug.cgi?id=125746

        Reviewed by David Kilzer.

        This is a straight upstreaming of the various PLATFORM(IOS) changes
        made to Source/WebKit/ with the following modifications:

        - Includes of <Cocoa/Cocoa.h> were generally replaced with an include
        of <Foundation/Foundation.h> followed by an include of
        <AppKit/AppKit.h> on non-iOS platforms. This assumes that nobody was
        relying on <Cocoa/Cocoa.h>'s inclusion of <CoreData/CoreData.h>.

        - Includes of <Cocoa/Cocoa.h> and <Foundation/Foundation.h> were
        removed from files that include WebKitPrefix.h.

        - Instances of 'iPhone (OS)' in comments were replaced with 'iOS', and
        other sensitive terms were elided.

        - Various PLATFORM(IOS) blocks were simplified. For instance:

            #if !PLATFORM(IOS)
            ...
            #endif
            #if PLATFORM(IOS)
            ...
            #endif

        Was simplified to:

            #if !PLATFORM(IOS)
            ...
            #else
            ...
            #endif

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit.xcconfig:
        * Configurations/iOS.xcconfig: Added.
        * DOM/WebDOMOperations.mm:
        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * DefaultDelegates/WebDefaultEditingDelegate.m:
        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        * DefaultDelegates/WebDefaultUIDelegate.h:
        * DefaultDelegates/WebDefaultUIDelegate.m:
        * History/WebBackForwardList.mm:
        * History/WebHistory.mm:
        * History/WebHistoryItem.mm:
        * History/WebURLsWithTitles.m:
        * Misc/WebCache.mm:
        * Misc/WebDownload.mm:
        * Misc/WebElementDictionary.mm:
        * Misc/WebIconDatabase.mm:
        * Misc/WebIconDatabaseInternal.h:
        * Misc/WebKitNSStringExtras.mm:
        * Misc/WebKitSystemBits.m:
        * Misc/WebKitVersionChecks.h:
        * Misc/WebKitVersionChecks.m:
        * Misc/WebLocalizableStrings.mm:
        * Misc/WebNSArrayExtras.h:
        * Misc/WebNSArrayExtras.m:
        * Misc/WebNSControlExtras.h:
        * Misc/WebNSControlExtras.m:
        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        * Misc/WebNSEventExtras.m:
        * Misc/WebNSFileManagerExtras.mm:
        * Misc/WebNSImageExtras.h:
        * Misc/WebNSImageExtras.m:
        * Misc/WebNSPasteboardExtras.mm:
        * Misc/WebNSPrintOperationExtras.h:
        * Misc/WebNSPrintOperationExtras.m:
        * Misc/WebNSURLExtras.mm:
        * Misc/WebNSViewExtras.m:
        * Misc/WebNSWindowExtras.m:
        * Panels/WebAuthenticationPanel.h:
        * Panels/WebAuthenticationPanel.m:
        * Panels/WebPanelAuthenticationHandler.m:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebJavaPlugIn.h:
        * Plugins/WebPluginContainerCheck.mm:
        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        * Plugins/WebPluginDatabase.mm:
        * Plugins/WebPluginPackage.mm:
        * Plugins/WebPluginsPrivate.m:
        * Storage/WebDatabaseManager.mm:
        * Storage/WebDatabaseManagerClient.h:
        * Storage/WebDatabaseManagerClient.mm:
        * Storage/WebDatabaseManagerInternal.h: Added.
        * Storage/WebStorageManager.mm:
        * WebCoreSupport/CorrectionPanel.h:
        * WebCoreSupport/WebAlternativeTextClient.h:
        * WebCoreSupport/WebApplicationCache.mm:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebContextMenuClient.mm:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebCoreSupport/WebGeolocationClient.h:
        * WebCoreSupport/WebGeolocationClient.mm:
        * WebCoreSupport/WebJavaScriptTextInputPanel.m:
        * WebCoreSupport/WebKeyGenerator.mm:
        * WebCoreSupport/WebNotificationClient.mm:
        * WebCoreSupport/WebOpenPanelResultListener.mm:
        * WebCoreSupport/WebSecurityOrigin.mm:
        * WebCoreSupport/WebSystemInterface.mm:
        * WebKitPrefix.h:
        * WebView/WebArchive.mm:
        * WebView/WebClipView.h:
        * WebView/WebDataSource.mm:
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        * WebView/WebDeviceOrientation.mm:
        * WebView/WebDocumentInternal.h:
        * WebView/WebDocumentLoaderMac.mm:
        * WebView/WebDynamicScrollBarsViewInternal.h:
        * WebView/WebFormDelegate.m:
        * WebView/WebFrame.mm:
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameView.mm:
        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebPDFDocumentExtras.h:
        * WebView/WebPDFDocumentExtras.mm:
        * WebView/WebPDFRepresentation.h:
        * WebView/WebPDFRepresentation.mm:
        * WebView/WebPDFView.h:
        * WebView/WebPDFView.mm:
        * WebView/WebPreferences.mm:
        * WebView/WebResource.mm:
        * WebView/WebTextCompletionController.h:
        * WebView/WebTextIterator.mm:
        * WebView/WebView.mm:
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        * WebView/WebViewInternal.h:

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

        Unreviewed, rolling out r161033 and r161074.
        http://trac.webkit.org/changeset/161033
        http://trac.webkit.org/changeset/161074
        https://bugs.webkit.org/show_bug.cgi?id=126240

        Oliver says that a rollout would be better (Requested by ap on
        #webkit).

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::setProperty):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by msaboff.

        Update for new method signatures.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::setProperty):

2013-12-23  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/15682948> Update copyright strings

        Reviewed by Dan Bernstein.

        * Info.plist:

2013-12-19  Andy Estes  <aestes@apple.com>

        Remove WebFilterEvaluator wrappers from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=126028

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Don't INIT() removed function pointers.

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

        Remove PageVisibilityStateUnloaded
        https://bugs.webkit.org/show_bug.cgi?id=125869

        Reviewed by Anders Carlsson.

        This is not currently supported by WebKit, remove this enum value.
        We can always add this back later if/when we add support for this state.

        * WebView/WebView.mm:
        (core):
        (kit):
        * WebView/WebViewPrivate.h:
            - removed PageVisibilityStateUnloaded/WebPageVisibilityStateUnloade

2013-12-14  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes to WebKit Public and Private headers
        https://bugs.webkit.org/show_bug.cgi?id=125745

        Reviewed by Dan Bernstein.

        * Configurations/WebKit.xcconfig: Ignore headers that are completely
        excluded on iOS. This prevents empty headers from being installed into
        the iOS SDK.
        * DOM/WebDOMOperationsPrivate.h: Upstream iOS changes.
        * History/WebBackForwardListPrivate.h: Ditto.
        * History/WebHistoryItem.h: Ditto.
        * History/WebHistoryItemPrivate.h: Ditto.
        * Misc/WebCache.h: Ditto.
        * Misc/WebIconDatabase.h: Ditto.
        * Misc/WebIconDatabasePrivate.h: Ditto.
        * Misc/WebKitNSStringExtras.h: Ditto.
        * Misc/WebLocalizableStrings.h: Ditto.
        * Misc/WebNSEventExtras.h: Ditto.
        * Misc/WebNSFileManagerExtras.h: Ditto.
        * Misc/WebNSPasteboardExtras.h: Ditto.
        * Misc/WebNSURLExtras.h: Ditto.
        * Misc/WebNSViewExtras.h: Ditto.
        * Misc/WebNSWindowExtras.h: Ditto.
        * Panels/WebPanelAuthenticationHandler.h: Ditto.
        * Plugins/WebPlugin.h: Ditto.
        * Plugins/WebPluginContainer.h: Ditto.
        * Plugins/WebPluginContainerPrivate.h: Ditto.
        * Plugins/WebPluginDatabase.h: Ditto.
        * Plugins/WebPluginPrivate.h: Ditto.
        * Plugins/WebPluginViewFactory.h: Ditto.
        * Plugins/WebPluginsPrivate.h: Ditto.
        * Storage/WebDatabaseManagerPrivate.h: Ditto.
        * WebCoreSupport/WebApplicationCache.h: Ditto.
        * WebCoreSupport/WebJavaScriptTextInputPanel.h: Ditto.
        * WebCoreSupport/WebKeyGenerator.h: Ditto.
        * WebCoreSupport/WebSecurityOriginPrivate.h: Ditto.
        * WebView/WebDashboardRegion.h: Ditto.
        * WebView/WebDataSource.h: Ditto.
        * WebView/WebDataSourcePrivate.h: Ditto.
        * WebView/WebDocument.h: Ditto.
        * WebView/WebDocumentPrivate.h: Ditto.
        * WebView/WebDynamicScrollBarsView.h: Ditto.
        * WebView/WebEditingDelegate.h: Ditto.
        * WebView/WebEditingDelegatePrivate.h: Ditto.
        * WebView/WebFormDelegate.h: Ditto.
        * WebView/WebFrameLoadDelegate.h: Ditto.
        * WebView/WebFramePrivate.h: Ditto.
        * WebView/WebFrameView.h: Ditto.
        * WebView/WebFrameViewPrivate.h: Ditto.
        * WebView/WebHTMLRepresentation.h: Ditto.
        * WebView/WebHTMLView.h: Ditto.
        * WebView/WebHTMLViewPrivate.h: Ditto.
        * WebView/WebPolicyDelegate.h: Ditto.
        * WebView/WebPreferenceKeysPrivate.h: Ditto.
        * WebView/WebPreferences.h: Ditto.
        * WebView/WebPreferencesPrivate.h: Ditto.
        * WebView/WebRenderLayer.h: Ditto.
        * WebView/WebResourceLoadDelegatePrivate.h: Ditto.
        * WebView/WebResourcePrivate.h: Ditto.
        * WebView/WebUIDelegate.h: Ditto.
        * WebView/WebUIDelegatePrivate.h: Ditto.
        * WebView/WebView.h: Ditto.
        * WebView/WebViewPrivate.h: Ditto.

2013-12-15  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=125742

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2013-12-14  Andy Estes  <aestes@apple.com>

        Unify FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=125741

        Rubber-stamped by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig: Remove a stray space in
        FEATURE_DEFINES.

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

        Web Inspector: Push More Inspector Required Classes Down into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125324

        Reviewed by Timothy Hatcher.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebView/WebFrame.mm:
        * WebView/WebView.mm:

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

        <https://webkit.org/b/125139> Modernize the WebKit API headers
        <rdar://problem/15540175>

        This consists of three main changes:
        1) Converting the return type of initializer methods to instancetype.
        2) Declaring properties rather than getters and setters.
        3) Declaring explicitly sized enums.

        Changing the declarations from getters and setters to properties also required
        updating the headerdoc in a number of places.

        Reviewed by Anders Carlsson.

        * DOM/WebDOMOperations.h:
        * History/WebBackForwardList.h:
        * History/WebHistory.h:
        * History/WebHistoryItem.h:
        * History/WebHistoryItem.mm:
        * Plugins/WebPlugin.h:
        * Plugins/WebPluginContainer.h:
        * WebView/WebArchive.h:
        * WebView/WebArchive.mm:
        * WebView/WebDataSource.h:
        * WebView/WebDataSource.mm:
        * WebView/WebEditingDelegate.h:
        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        * WebView/WebFrameView.h:
        * WebView/WebPolicyDelegate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences cacheModel]): Cast to the enum.
        * WebView/WebResource.h:
        * WebView/WebResource.mm:
        * WebView/WebUIDelegate.h:
        * WebView/WebView.h:
        * WebView/WebView.mm:
        (+[WebView _didSetCacheModel]): Fix the return type.

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

        <http://webkit.org/b/125556> WebKit doesn't deal with longer bundle versions correctly
        <rdar://problem/15634192>

        Reviewed by Dan Bernstein.

        * WebView/WebView.mm:
        (createUserVisibleWebKitVersionString): Strip as many leading digits as is necessary to
        bring the major component of the version down to 3 digits.

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

        Fix the build of projects including <WebKit/WebUIDelegatePrivate.h>

        Rubber-stamped by Dan Bernstein.

        * WebView/WebAllowDenyPolicyListener.h:
        Use TARGET_OS_IPHONE rather than PLATFORM(IOS) in an exposed header.

2013-12-05  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a runtime-setting for the MediaSource constructor.
        https://bugs.webkit.org/show_bug.cgi?id=125336

        Reviewed by Eric Carlson.

        Add a private WebPreference which controls the WebCore mediaSourceEnabled setting.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences mediaSourceEnabled]):
        (-[WebPreferences setMediaSourceEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2013-12-05  Mark Lam  <mark.lam@apple.com>

        C Loop LLINT layout test regressions.
        https://bugs.webkit.org/show_bug.cgi?id=125314.

        Reviewed by Geoffrey Garen.

        The regression was due to the ENABLE_LLINT_C_LOOP flag not being included
        in the build of the WebKit and WebKit2 components. As a result, some fields
        in JSC::VM were ifdef'ed out in WebCore and JSC, but not in WebKit and
        WebKit2. This resulted in VM::m_initializingObjectClass having 2 different
        offsets depending on whether it is accessed from WebCore and JSC or from
        WebKit and WebKit2, and chaos ensued.

        This issue will manifest when we pass --cloop to build-webkit.
        The fix is simply to add ENABLE_LLINT_C_LOOP to FEATURE_DEFINES for WebKit
        and WebKit2.

        * Configurations/FeatureDefines.xcconfig:

2013-12-04  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Darin Adler.

        Use new platform-independent methods instead of Mac methods.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionDraggingImage]):
        (-[WebHTMLView selectionImageForcingBlackText:]):

2013-12-04  Andy Estes  <aestes@apple.com>

        [iOS] Build projects with $(ARCHS_STANDARD_32_64_BIT)
        https://bugs.webkit.org/show_bug.cgi?id=125236

        Reviewed by Sam Weinig.

        $(ARCHS_STANDARD_32_64_BIT) is what we want for both device and simulator builds.

        * Configurations/DebugRelease.xcconfig:

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

        Web Inspector: Push Remote Inspector debugging connection management into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=124613

        Reviewed by Timothy Hatcher.

        Remove the old ENABLE(REMOTE_INSPECTOR) connection management implementation.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::indicate):
        (WebInspectorClient::hideIndicate):
        Hook up WebView indication through this new path.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::inspectorDestroyed):
        * WebInspector/remote/WebInspectorClientRegistry.h: Removed.
        * WebInspector/remote/WebInspectorClientRegistry.mm: Removed.
        * WebInspector/remote/WebInspectorRelayDefinitions.h: Removed.
        * WebInspector/remote/WebInspectorRemoteChannel.h: Removed.
        * WebInspector/remote/WebInspectorRemoteChannel.mm: Removed.
        * WebInspector/remote/WebInspectorServer.h: Removed.
        * WebInspector/remote/WebInspectorServer.mm: Removed.
        * WebInspector/remote/WebInspectorServerWebViewConnection.h: Removed.
        * WebInspector/remote/WebInspectorServerWebViewConnection.mm: Removed.
        * WebInspector/remote/WebInspectorServerWebViewConnectionController.h: Removed.
        * WebInspector/remote/WebInspectorServerWebViewConnectionController.mm: Removed.
        * WebInspector/remote/WebInspectorXPCWrapper.h: Removed.
        * WebInspector/remote/WebInspectorXPCWrapper.m: Removed.
        * WebKit.exp:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (+[WebView _enableRemoteInspector]):
        (+[WebView _disableRemoteInspector]):
        (+[WebView _disableAutoStartRemoteInspector]):
        (+[WebView _isRemoteInspectorEnabled]):
        (+[WebView _hasRemoteInspectorSession]):
        (-[WebView allowsRemoteInspection]):
        (-[WebView setAllowsRemoteInspection:]):
        (-[WebView setIndicatingForRemoteInspector:]):
        (-[WebView setHostApplicationBundleId:name:]):
        (-[WebView _didCommitLoadForFrame:]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        (-[WebViewPrivate dealloc]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:
        Remove old REMOTE_INSPECTOR.

2013-12-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash in accessibilityRoot when Document goes away
        https://bugs.webkit.org/show_bug.cgi?id=125113

        Reviewed by Tim Horton.

        The AXObjectCache can sometimes be null if the render tree has been detached from the document.

        * WebView/WebFrame.mm:
        (-[WebFrame accessibilityRoot]):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Remove feature: CSS variables
        https://bugs.webkit.org/show_bug.cgi?id=114119

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

2013-11-27  Sam Weinig  <sam@webkit.org>

        Fix the iOS build.

        * WebView/WebAllowDenyPolicyListener.h: Added.
        * WebView/WebUIDelegatePrivate.h:
        Move the WebAllowDenyPolicyListener protocol to its own file.

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124702> Stop overriding VALID_ARCHS.

        All modern versions of Xcode set it appropriately for our needs.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124701> Fix an error in a few Xcode configuration setting files.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124700> Fix some deprecation warnings.

        Reviewed by Anders Carlsson.

        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::startStream): Move off a deprecated NSData method.
        * WebView/WebDataSource.mm:
        (-[WebDataSource _fileWrapperForURL:]): Move off a deprecated NSFileWrapper method.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): Ditto.

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Introducing VMEntryScope to update the VM stack limit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Reviewed by Geoffrey Garen.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::sourceParsed):

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

        Enable HTMLTemplateElement on Mac port
        https://bugs.webkit.org/show_bug.cgi?id=124637

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

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

        Unreviewed, rolling out r159455.
        http://trac.webkit.org/changeset/159455
        https://bugs.webkit.org/show_bug.cgi?id=124568

        broke two api tests (see bug 124564) (Requested by thorton on
        #webkit).

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionDraggingImage]):
        (-[WebHTMLView selectionImageForcingBlackText:]):

2013-11-18  Mark Rowe  <mrowe@apple.com>

        Disable deprecation warnings related to NSCalendarDate in WebHistory.

        Reviewed by Anders Carlsson.

        * History/WebHistory.h: Use a #pragma to have the compiler treat this header as
        a system header, even when not included from a system location. This has the effect
        of suppressing warnings when including this header. It's a more general effect than
        we're after but is also less invasive than disabling deprecation warnings around
        the APIs that are defined in terms of NSCalendarDate. We'll hopefully revisit this
        in the future.
        * History/WebHistory.mm: Disable deprecation warnings around uses of NSCalendarDate.

2013-11-18  David Hyatt  <hyatt@apple.com>

        Add a quirk to not respect center text-align when positioning

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

        Reviewed by Simon Fraser.

        Added fast/block/legacy-text-align-position-quirk.html

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences useLegacyTextAlignPositionedElementBehavior]):
        (-[WebPreferences setUseLegacyTextAlignPositionedElementBehavior:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2013-11-18  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Timothy Hatcher.

        Use new platform-independent methods instead of Mac methods.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionDraggingImage]):
        (-[WebHTMLView selectionImageForcingBlackText:]):

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

        Remove unnecessary COMPILER(CLANG) #ifdefs in Mac-only code
        https://bugs.webkit.org/show_bug.cgi?id=124523

        Reviewed by Dan Bernstein.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::didCreateWindow):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::makeCurrentProcessFrontProcess):
        (WebKit::NetscapePluginHostProxy::makePluginHostProcessFrontProcess):
        (WebKit::NetscapePluginHostProxy::isPluginHostProcessFrontProcess):

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

        Ignore deprecation warnings for now.

        * History/WebHistory.h:

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

        Reimplement getDayBoundaries using NSCalendar on 10.9
        https://bugs.webkit.org/show_bug.cgi?id=124379

        Reviewed by Dan Bernstein.

        * History/WebHistory.mm:
        (getDayBoundaries):

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

        Stop using deprecated NSPropertyListSerialization methods
        https://bugs.webkit.org/show_bug.cgi?id=124377

        Reviewed by Mark Rowe.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCIdentifierInfo):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        (WebKit::NetscapePluginInstanceProxy::marshalValues):
        (WebKit::NetscapePluginInstanceProxy::demarshalValue):
        (WebKit::NetscapePluginInstanceProxy::demarshalValues):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::getPropertyNames):

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

        Unreviewed rollout of r159271, broke Mountain Lion build.

        * History/WebHistory.h:
        * History/WebHistory.mm:

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

        Deprecate WebHistory methods that use NSCalendarDate
        https://bugs.webkit.org/show_bug.cgi?id=124329
        <rdar://problem/15441122>

        Reviewed by Mark Rowe.

        * History/WebHistory.h:
        Add NS_DEPRECATED_MAC to orderedLastVisitedDays and orderedItemsLastVisitedOnDay:.
        In order to not break the Mountain Lion build, define __NSd_10_9 if necessary.
        
        * History/WebHistory.mm:
        Ignore deprecation warnings in methods where NSCalendarDate is used.

2013-11-13  Gordon Sheridan  <gordon_sheridan@apple.com>

        Removed deprecated download delegates.
        https://bugs.webkit.org/show_bug.cgi?id=124309
        <rdar://problem/13570414>

        Reviewed by Anders Carlsson.

        * Misc/WebDownload.mm:
        (-[WebDownloadInternal respondsToSelector:]):
        Removed download:shouldBeginChildDownloadOfSource:delegate and
        download:didBeginChildDownload.

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

        Disable WebCrypto on Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=124261

        Rubber-stamped by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2013-11-12  Andy Estes  <aestes@apple.com>

        [Mac] Fix some deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=124252

        Reviewed by Mark Rowe.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage pListForPath:createFile:]): Use +[NSPropertyListSerialization propertyListWithData:options:format:error:] instead of +[NSPropertyListSerialization propertyListFromData:mutabilityOption:format:errorDescription:].

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

        Remove -[WebHistoryItem _lastVisitedDate]
        https://bugs.webkit.org/show_bug.cgi?id=124250

        Reviewed by Mark Rowe.

        This method is not called by anyone and NSCalendarDate is deprecated so get rid of it.

        * History/WebHistoryItem.mm:
        * History/WebHistoryItemPrivate.h:

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

        FrameFilter can just be an std::function instead
        https://bugs.webkit.org/show_bug.cgi?id=124176

        Reviewed by Tim Horton.

        * DOM/WebDOMOperations.mm:
        (-[DOMNode webArchiveByFilteringSubframes:]):

2013-11-11  Dan Bernstein  <mitz@apple.com>

        [Mac] .exp files are not source code
        https://bugs.webkit.org/show_bug.cgi?id=124154

        Reviewed by Andy Estes.

        * Configurations/WebKit.xcconfig: Removed WebKit.iOS.exp from
        EXCLUDED_SOURCE_FILE_NAMES_macosx.

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

        Move RunLoop from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=116606

        Reviewed by Anders Carlsson.

        * Carbon/CarbonWindowAdapter.mm:
        (+[CarbonWindowAdapter initialize]):
        * History/WebBackForwardList.mm:
        (+[WebBackForwardList initialize]):
        * History/WebHistoryItem.mm:
        (+[WebHistoryItem initialize]):
        * Misc/WebCache.mm:
        (+[WebCache initialize]):
        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initialize]):
        * Misc/WebIconDatabase.mm:
        (+[WebIconDatabase initialize]):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (+[WebHostedNetscapePluginView initialize]):
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebNetscapePluginView.mm:
        (+[WebNetscapePluginView initialize]):
        * WebCoreSupport/WebEditorClient.mm:
        (+[WebUndoStep initialize]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebArchive.mm:
        (+[WebArchivePrivate initialize]):
        * WebView/WebDataSource.mm:
        (+[WebDataSource initialize]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLViewPrivate initialize]):
        (+[WebHTMLView initialize]):
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebResource.mm:
        (+[WebResourcePrivate initialize]):
        * WebView/WebTextIterator.mm:
        (+[WebTextIteratorPrivate initialize]):
        * WebView/WebView.mm:
        (+[WebView initialize]):
        * WebView/WebViewData.mm:
        (+[WebViewPrivate initialize]):

2013-11-08  Mark Lam  <mark.lam@apple.com>

        Move breakpoint (and exception break) functionality into JSC::Debugger.
        https://bugs.webkit.org/show_bug.cgi?id=121796.

        Reviewed by Geoffrey Garen.

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):
        (WebScriptDebugger::handlePause):

2013-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Remove a PLATFORM(IOS) from WebKit Private Header
        https://bugs.webkit.org/show_bug.cgi?id=124014

        Reviewed by Timothy Hatcher.

        Make the previously iOS only WebInspectorDidStartSearchingForNode
        and WebInspectorDidStopSearchingForNode notifications non iOS specific.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::didSetSearchingForNode):
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        * WebKit.exp:

2013-11-07  Mark Lam  <mark.lam@apple.com>

        Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId.
        https://bugs.webkit.org/show_bug.cgi?id=123945.

        Reviewed by Geoffrey Garen.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::exception):

2013-11-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream Letterpress effect
        https://bugs.webkit.org/show_bug.cgi?id=123932

        Reviewed by Sam Weinig.

        Add feature define ENABLE_LETTERPRESS disabled by default. We only enable
        letterpress on iOS.

        * Configurations/FeatureDefines.xcconfig:

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

        DumpRenderTree should reset its preferences file on launch
        https://bugs.webkit.org/show_bug.cgi?id=29751

        Reviewed by Dan Bernstein.

        * WebView/WebView.mm:
        (-[WebView _retrieveKeyboardUIModeFromPreferences:]):
        Further fix reading of AppleKeyboardUIMode - reading it from kCFPreferencesAnyApplication
        domain meant that current application's domain was explcitly ignored, and the only
        way to override the setting in DRT was through argument domain.

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

        [PluginProxy] Add a setting to disable video plugin proxy support in HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=123621

        Reviewed by Eric Carlson.

        Add a new isVideoPluginProxyEnabled setting.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set isVideoPluginProxyEnabled preference.
        (-[WebPreferences isVideoPluginProxyEnabled]): Pass through to Settings.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Set isVideoPluginProxyEnabled preference.

2013-11-01  Andy Estes  <aestes@apple.com>

        [iOS] Make some headers Private
        https://bugs.webkit.org/show_bug.cgi?id=123626

        Reviewed by Andreas Kling.

        * Configurations/WebKit.xcconfig: Exclude iOS Private headers from the Mac build.

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

        Enable WebCrypto on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123587

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig: Do it.

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove code for Mac Lion
        https://bugs.webkit.org/show_bug.cgi?id=123542

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attachRootLayer:]):
        * WebView/WebView.mm:

2013-10-29  Andy Estes  <aestes@apple.com>

        [iOS] Upstream Source/WebKit/ios/
        https://bugs.webkit.org/show_bug.cgi?id=123470

        Reviewed by Sam Weinig.

        * Configurations/WebKit.xcconfig: Excluded some iOS files from the Mac build.

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

        Result of focus-option-control-on-page.html depends on system preferences
        https://bugs.webkit.org/show_bug.cgi?id=123304

        Reviewed by Simon Fraser.

        * WebView/WebView.mm: (-[WebView _retrieveKeyboardUIModeFromPreferences:]):
        Read the preference from its correct domain. This doesn't affect behavior in practice
        and isn't part of the fix, but it's a good opportunity to correct this code.

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream remaining PLATFORM(IOS) and ENABLE(REMOTE_INSPECTOR) pieces
        https://bugs.webkit.org/show_bug.cgi?id=123411

        Reviewed by Timothy Hatcher.

        Upstream iOS node highlighting and view indication.

        * WebCoreSupport/WebInspectorClient.h:
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        * WebInspector/WebNodeHighlight.h:
        * WebInspector/WebNodeHighlight.mm:
        (-[WebHighlightLayer initWithHighlightView:webView:]):
        (-[WebHighlightLayer layoutSublayers]):
        (-[WebHighlightLayer actionForKey:]):
        (-[WebNodeHighlight initWithTargetView:inspectorController:]):
        (-[WebNodeHighlight dealloc]):
        (-[WebNodeHighlight attach]):
        * WebInspector/WebNodeHighlightView.h:
        * WebInspector/WebNodeHighlightView.mm:
        (-[WebNodeHighlightView initWithWebNodeHighlight:]):
        (-[WebNodeHighlightView dealloc]):
        (-[WebNodeHighlightView _attach:numLayers:]):
        (findIntersectionOnLineBetweenPoints):
        (quadIntersection):
        (layerPathWithHole):
        (layerPath):
        (-[WebNodeHighlightView _layoutForNodeHighlight:parent:]):
        (-[WebNodeHighlightView _layoutForRectsHighlight:parent:]):
        (-[WebNodeHighlightView layoutSublayers:]):
        * WebInspector/WebNodeHighlighter.mm:
        (-[WebNodeHighlighter highlight]):
        * WebView/WebIndicateLayer.h: Added.
        * WebView/WebIndicateLayer.mm: Added.
        (-[WebIndicateLayer layoutSublayers]):
        (-[WebIndicateLayer actionForKey:]):
        * WebView/WebView.mm:
        (-[WebView setIndicatingForRemoteInspector:]):
        (-[WebView setHostApplicationBundleId:name:]):
        (-[WebView hostApplicationBundleId]):
        (-[WebView hostApplicationName]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):

2013-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for -webkit-text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=123358

        Reviewed by Dean Jackson.

        Adding ENABLE(CSS3_TEXT_DECORATION)

        * Configurations/FeatureDefines.xcconfig:

2013-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream ENABLE(REMOTE_INSPECTOR) and enable on iOS and Mac
        https://bugs.webkit.org/show_bug.cgi?id=123111

        Reviewed by Timothy Hatcher.

        The actual implementation at the WebCoreSupport/WebInspectorClient level
        is the same as INSPECTOR_SERVER. Give debuggable pages a pageIdentifer.

        * Configurations/FeatureDefines.xcconfig:
        * Misc/WebKitLogging.h:
        Misc.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient::pageId):
        (WebInspectorClient::setPageId):
        Give WebInspectorClient's a page identifier.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::sendMessageToFrontend):
        (WebInspectorClient::sendMessageToBackend):
        (WebInspectorClient::setupRemoteConnection):
        (WebInspectorClient::teardownRemoteConnection):
        (WebInspectorClient::hasLocalSession):
        (WebInspectorClient::canBeRemotelyInspected):
        (WebInspectorClient::inspectedWebView):
        A WebInspectorClient can be either local or remote. Add handling
        for remote connections.

        * WebInspector/remote/WebInspectorClientRegistry.h: Added.
        * WebInspector/remote/WebInspectorClientRegistry.mm: Added.
        (+[WebInspectorClientRegistry sharedRegistry]):
        (-[WebInspectorClientRegistry init]):
        (-[WebInspectorClientRegistry _getNextAvailablePageId]):
        (-[WebInspectorClientRegistry registerClient:]):
        (-[WebInspectorClientRegistry unregisterClient:]):
        (-[WebInspectorClientRegistry clientForPageId:]):
        (-[WebInspectorClientRegistry inspectableWebViews]):
        Registry for all potentially debuggable pages. All WebInspectorClient instances.

        * WebInspector/remote/WebInspectorRelayDefinitions.h: Added.
        Constants (message keys) shared between WebKit and the XPC process.

        * WebInspector/remote/WebInspectorServer.h: Added.
        * WebInspector/remote/WebInspectorServer.mm: Added.
        (-[WebInspectorServer init]):
        (-[WebInspectorServer dealloc]):
        (-[WebInspectorServer start]):
        (-[WebInspectorServer stop]):
        (-[WebInspectorServer isEnabled]):
        (-[WebInspectorServer xpcConnection]):
        (-[WebInspectorServer setupXPCConnectionIfNeeded]):
        (-[WebInspectorServer pushListing]):
        (-[WebInspectorServer hasActiveDebugSession]):
        (-[WebInspectorServer setHasActiveDebugSession:]):
        (-[WebInspectorServer xpcConnection:receivedMessage:userInfo:]):
        (-[WebInspectorServer xpcConnectionFailed:]):
        (-[WebInspectorServer didRegisterClient:]):
        (-[WebInspectorServer didUnregisterClient:]):
        Singleton to start/stop remote inspection. Handles the connection to the XPC
        and hands off connections to the connection controller.

        * WebInspector/remote/WebInspectorServerWebViewConnection.h: Added.
        * WebInspector/remote/WebInspectorServerWebViewConnection.mm: Added.
        (-[WebInspectorServerWebViewConnection initWithController:connectionIdentifier:destination:identifier:]):
        (-[WebInspectorServerWebViewConnection setupChannel]):
        (-[WebInspectorServerWebViewConnection dealloc]):
        (-[WebInspectorServerWebViewConnection connectionIdentifier]):
        (-[WebInspectorServerWebViewConnection identifier]):
        (-[WebInspectorServerWebViewConnection clearChannel]):
        (-[WebInspectorServerWebViewConnection sendMessageToFrontend:]):
        (-[WebInspectorServerWebViewConnection sendMessageToBackend:]):
        (-[WebInspectorServerWebViewConnection receivedData:]):
        (-[WebInspectorServerWebViewConnection receivedDidClose:]):
        An individual remote debug session connection.

        * WebInspector/remote/WebInspectorServerWebViewConnectionController.h: Added.
        * WebInspector/remote/WebInspectorServerWebViewConnectionController.mm: Added.
        (-[WebInspectorServerWebViewConnectionController initWithServer:]):
        (-[WebInspectorServerWebViewConnectionController dealloc]):
        (-[WebInspectorServerWebViewConnectionController closeAllConnections]):
        (-[WebInspectorServerWebViewConnectionController _listingForWebView:pageId:registry:]):
        (-[WebInspectorServerWebViewConnectionController _pushListing:]):
        (-[WebInspectorServerWebViewConnectionController pushListing:]):
        (-[WebInspectorServerWebViewConnectionController pushListing]):
        (-[WebInspectorServerWebViewConnectionController _receivedSetup:]):
        (-[WebInspectorServerWebViewConnectionController _receivedData:]):
        (-[WebInspectorServerWebViewConnectionController _receivedDidClose:]):
        (-[WebInspectorServerWebViewConnectionController _receivedGetListing:]):
        (-[WebInspectorServerWebViewConnectionController _receivedIndicate:]):
        (-[WebInspectorServerWebViewConnectionController _receivedConnectionDied:]):
        (-[WebInspectorServerWebViewConnectionController receivedMessage:userInfo:]):
        (-[WebInspectorServerWebViewConnectionController connectionClosing:]):
        (-[WebInspectorServerWebViewConnectionController sendMessageToFrontend:userInfo:]):
        ConnectionController:
          - Holds all the current ongoing remote debug connections.
          - Simplifies multi-threaded work on iOS.
          - Dispatches incoming messages from the remote connection.

        * WebInspector/remote/WebInspectorRemoteChannel.h: Added.
        * WebInspector/remote/WebInspectorRemoteChannel.mm: Added.
        (+[WebInspectorRemoteChannel createChannelForPageId:connection:]):
        (-[WebInspectorRemoteChannel initWithRemote:local:]):
        (-[WebInspectorRemoteChannel closeFromLocalSide]):
        (-[WebInspectorRemoteChannel closeFromRemoteSide]):
        (-[WebInspectorRemoteChannel sendMessageToFrontend:]):
        (-[WebInspectorRemoteChannel sendMessageToBackend:]):
        Thin interface between the remote connection and web inspector client.
        This simplifies breaking the connection from either side, e.g. the
        page closing, or the remote connection disconnecting.

        * WebInspector/remote/WebInspectorXPCWrapper.h: Added.
        * WebInspector/remote/WebInspectorXPCWrapper.m: Added.
        (-[WebInspectorXPCWrapper initWithConnection:]):
        (-[WebInspectorXPCWrapper close]):
        (-[WebInspectorXPCWrapper dealloc]):
        (-[WebInspectorXPCWrapper _deserializeMessage:]):
        (-[WebInspectorXPCWrapper _handleEvent:]):
        (-[WebInspectorXPCWrapper sendMessage:userInfo:]):
        (-[WebInspectorXPCWrapper available]):
        * WebKit.exp:
        XPC Connection wrapper handling a simple message format.

        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        (-[WebViewPrivate dealloc]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (+[WebView sharedWebInspectorServer]):
        (+[WebView _enableRemoteInspector]):
        (+[WebView _disableRemoteInspector]):
        (+[WebView _disableAutoStartRemoteInspector]):
        (+[WebView _isRemoteInspectorEnabled]):
        (+[WebView _hasRemoteInspectorSession]):
        (-[WebView canBeRemotelyInspected]):
        (-[WebView allowsRemoteInspection]):
        (-[WebView setAllowsRemoteInspection:]):
        (-[WebView setIndicatingForRemoteInspector:]):
        (-[WebView setRemoteInspectorUserInfo:]):
        (-[WebView remoteInspectorUserInfo]):
        Remote inspector private API.
          - Enable / disable globally
          - Allow / disallow per webview
          - Optionally attach a userInfo dictionary on the WebView that is published with listing.
          - Indicate a WebView (implementation to land later)

        (-[WebView _didCommitLoadForFrame:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        Pages changed, pushed page listing.

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

        Fix or disable some deprecation warnings.

        Reviewed by Darin Adler.

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel cancel:]): On newer OS versions, use the modern API.
        (-[WebAuthenticationPanel logIn:]): Ditto.
        (-[WebAuthenticationPanel runAsSheetOnWindow:withChallenge:]): Ditto. Translate the
        response code in to the form that -sheetDidEnd:responseCode:contextInfo: expects.
        * WebView/WebClipView.mm:
        (-[WebClipView initWithFrame:]): Disable deprecation warnings since it's not obvious
        how to avoid calling -releaseGState here.

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

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.

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

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

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.

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

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

        Stop bringing in the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=123273

        Reviewed by Andreas Kling.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _verticalPageScrollDistance]):
        (-[WebFrameView _horizontalPageScrollDistance]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):
        (+[WebView _maxCacheModelInAnyInstance]):
        (+[WebView _cacheModelChangedNotification:]):
        (+[WebView _preferencesRemovedNotification:]):

2013-10-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement a software rendering option on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123177

        Reviewed by Tim Horton.

        Implement a way to force software OpenGL rendering
        for WebGL, via a Setting/Preference.

        * WebView/WebPreferenceKeysPrivate.h: New WebKitForceSoftwareWebGLRendering key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences forceSoftwareWebGLRendering]):
        (-[WebPreferences setForceSoftwareWebGLRendering:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Add a version of WebKitSystemInterface for Mavericks.

        Reviewed by Ryosuke Niwa.

        * Configurations/DebugRelease.xcconfig:

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

        Remove platform #ifdefs from WebDataSourcePrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=123120
        <rdar://problem/15275533>

        Reviewed by Anders Carlsson.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _setAllowToBeMemoryMapped]): Define empty implementation when building without
        disk image cache enabled.
        (-[WebDataSource setDataSourceDelegate:]): Ditto.
        (-[WebDataSource dataSourceDelegate]): Return nullptr when building without disk image cache
        enabled on iOS.
        * WebView/WebDataSourcePrivate.h: Removed platform #ifdefs added in
        <http://trac.webkit.org/changeset/156918> (https://bugs.webkit.org/show_bug.cgi?id=121985)

2013-10-20  Mark Lam  <mark.lam@apple.com>

        Avoid JSC debugger overhead unless needed.
        https://bugs.webkit.org/show_bug.cgi?id=123084.

        Reviewed by Geoffrey Garen.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):

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

        Unreviewed roll out of r157695; broke Mac builds.

        * Configurations/FeatureDefines.xcconfig:

2013-10-07  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-19  Andreas Kling  <akling@apple.com>

        Attempt to get Lion building.

        * WebView/WebDataSource.mm:

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

        Remove spaces between template angle brackets
        https://bugs.webkit.org/show_bug.cgi?id=123040

        Reviewed by Andreas Kling.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate rebuildHistoryByDayIfNeeded:]):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
        (WebKit::NetscapePluginInstanceProxy::stopAllStreams):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView destroyPlugin]):
        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager origins]):
        * Storage/WebStorageManager.mm:
        (-[WebStorageManager origins]):
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache originsWithCache]):
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::getClientPasteboardDataForRange):
        (WebEditorClient::documentFragmentFromAttributedString):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::clearNotifications):
        * WebView/WebArchive.mm:
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
        (-[WebArchive subresources]):
        (-[WebArchive subframeArchives]):
        * WebView/WebDataSource.mm:
        (-[WebDataSource subresources]):
        * WebView/WebViewData.h:

2013-10-16  Jochen Eisinger  <jochen@chromium.org>

        A page should exit fullscreen mode if it opens a new popup
        https://bugs.webkit.org/show_bug.cgi?id=122865

        Reviewed by Jer Noble.

        If a fullscreen page opens a popup, the popup would be hidden and
        therefore invisible to the user. To avoid this, exit fullscreen mode
        before opening a new window.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):

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

        Add ENABLE_WEB_ANIMATIONS flag
        https://bugs.webkit.org/show_bug.cgi?id=122871

        Reviewed by Tim Horton.

        Eventually might be http://dev.w3.org/fxtf/web-animations/
        but this is just engine-internal work at the moment.

        * Configurations/FeatureDefines.xcconfig:

2013-10-15  Andy Estes  <aestes@apple.com>

        Expose -[WebPluginPackage bundle] as SPI
        https://bugs.webkit.org/show_bug.cgi?id=122814

        Reviewed by Anders Carlsson.

        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage bundle]): Defined.
        * Plugins/WebPluginPackagePrivate.h: Declared bundle as a method in a
        category on NSObject.

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

        Get rid of the toHTMLElement helper for casting FormAssociatedElement to HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=122713

        Reviewed by Sam Weinig.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]): Use asHTMLElement.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.

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

        WebViews inside OS X screen savers have large caches, but should not
        https://bugs.webkit.org/show_bug.cgi?id=122604

        We use WebCacheModelDocumentViewer by default for apps linked against
        modern WebKit, and WebCacheModelDocumentBrowser for apps linked
        against legacy WebKit. ScreenSaverEngine.app doesn't link against
        WebKit at all, and thus falls into the legacy case by accident because
        NSVersionOfLinkTimeLibrary("WebKit") returns -1.

        But WebViews inside screen savers are almost certainly not being used
        as browsers, so this large-ish cache specified by
        WebCacheModelDocumentBrowser is wasteful. This is likely true for all
        apps that don't directly link against WebKit, so now we use
        WebCacheModelDocumentViewer by default for those apps.

        Reviewed by Darin Adler.

        * WebView/WebPreferences.mm:
        (cacheModelForMainBundle): Use WebCacheModelDocumentViewer by default
        for apps that don't link against WebKit directly. Also converted to
        use @autoreleasepool {} and early returns while I was in here.

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

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

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Anders Carlsson.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate init]): Use make_unique.
        (-[WebHistoryPrivate dealloc]): Don't delete.
        (-[WebHistoryPrivate finalize]): Don't delete.
        (-[WebHistoryPrivate data]): Use get.

        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (privateSession): Use NeverDestroyed here instead of a raw pointer.
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession): Use the
        new function instead of direct global variable access.
        (WebFrameNetworkingContext::destroyPrivateBrowsingSession): Ditto.
        (WebFrameNetworkingContext::storageSession): Ditto.

        * WebView/WebFrame.mm:
        (-[WebFramePrivate dealloc]): Don't delete.
        (-[WebFramePrivate finalize]): Don't delete.
        (-[WebFrame _attachScriptDebugger]): Use make_unique.
        (-[WebFrame _detachScriptDebugger]): Don't delete.
        * WebView/WebFrameInternal.h: Use unique_ptr.

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

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

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::localizedStringsURL):
        (-[WebInspectorWindowController inspectorPagePath]):

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

        Always force layout before flushing compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=122626

        Reviewed by Tim Horton.
        
        [m_webView _flushCompositingChanges] only actually flushes compositing
        layers if the FrameView does not need layout (FrameView::flushCompositingStateForThisFrame()
        returns in this case). In this situation, flushLayers() does actually try
        to force a layout, but on some platforms it's possible for something else
        to dirty layout before the runloop observer fires again. This can result
        in flushLayers() never actually managing to flush, which stalls visual
        updates.
        
        Fix by always calling -viewWillDraw (which updates layout) before flushing
        layers. This now matches WebKit2 behavior.

        * WebView/WebView.mm:
        (LayerFlushController::flushLayers):

2013-10-10  Andy Estes  <aestes@apple.com>

        Add SPI for telling WebKit to prefer pictograph glyphs over monochrome ones
        https://bugs.webkit.org/show_bug.cgi?id=122608

        Reviewed by Dan Bernstein.

        Based on patches by Dan Bernstein.

        * WebView/WebView.mm:
        (-[WebView _setFontFallbackPrefersPictographs:]): Called
        WebCore::Settings::setFontFallbackPrefersPictographs().
        * WebView/WebViewPrivate.h:

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

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

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

        Reviewed by Dan Bernstein.

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

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

        WebNetscapePluginView should no longer use deleteAllValues
        https://bugs.webkit.org/show_bug.cgi?id=122495

        Reviewed by Anders Carlsson.

        * Plugins/WebNetscapePluginView.h: Use unique_ptr for both the pointer to
        the timers hash table, and for the values in the hash table.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]): Rewrote loop so it works with unique_ptr.
        (-[WebNetscapePluginView startTimers]): Ditto.
        (-[WebNetscapePluginView fini]): Removed unneeded code to delete timers.
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]): Make
        the timers hash table with make-unique. Fixed the loop that chooses the timer
        ID so it won't ever try to use a deleted value, although that never happens
        in practice. Use HashMap::add instead of using both contains and set.
        Rearranged code so we don't need to make a raw pointer for the timer.
        (-[WebNetscapePluginView unscheduleTimer:]): Use remove instead of take/delete,
        since remove takes care of the deletion automatically since we are using the
        unique_ptr class.

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

        Eliminate use of deleteAllValues in ProxyInstance
        https://bugs.webkit.org/show_bug.cgi?id=122499

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/ProxyInstance.h: Use unique_ptr for map values in m_fields and m_methods.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::~ProxyInstance): Removed calls to deleteAllValues.
        (WebKit::ProxyInstance::methodNamed): Use make_unique and get to deal with map entries
        that are unique_ptr. Also fixed a bug where this would do an expensive no-op if the map
        already had an entry with a null in it. We would call the plug-in, but eventually
        isNewEntry would be false so we would return null.
        (WebKit::ProxyInstance::fieldNamed): Use make_unique and get to deal with map entries
        that are unique_ptr.

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

        Change NetscapePluginInstanceProxy::m_replies to use unique_ptr instead of deleteAllValues
        https://bugs.webkit.org/show_bug.cgi?id=122492

        Reviewed by Andreas Kling.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin): Use auto so this works with
        unique_ptr instead of auto_ptr.
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCGetScriptableNPObjectReply): Use make_unique instead of using new directly.
        (WKPCBooleanReply): Ditto.
        (WKPCBooleanAndDataReply): Ditto.
        (WKPCInstantiatePluginReply): Ditto.
        * Plugins/Hosted/NetscapePluginInstanceProxy.h: Changed m_replies to map to unique_ptr
        instead of to a raw pointer.
        (WebKit::NetscapePluginInstanceProxy::setCurrentReply): Changed to take a unique_ptr
        instead of a raw pointer since this takes ownership of the pointer.
        (WebKit::NetscapePluginInstanceProxy::waitForReply): Changed to return a unique_ptr
        instead of a auto_ptr because that's better. Use unique_ptr inside the function
        too to avoid the need for an explicit delete.
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::~NetscapePluginInstanceProxy): Removed the call to
        deleteAllValues.
        (WebKit::NetscapePluginInstanceProxy::cancelStreamLoad): Removed unneeded initialization
        of a local variable that was already set in all code paths.
        (WebKit::NetscapePluginInstanceProxy::wheelEvent): Use auto so this works with unique_ptr
        instead of auto_ptr.
        (WebKit::NetscapePluginInstanceProxy::print): Ditto.
        (WebKit::NetscapePluginInstanceProxy::snapshot): Ditto. Ditto.
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply): Changed to return
        a unique_ptr. Also removed an unneeded assertion.
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance): Use auto so this works
        with unique_ptr instead of auto_ptr.

        * Plugins/Hosted/ProxyInstance.h: Changed return type of waitForReply to unique_ptr.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke): Use auto so this works with unique_ptr instead of auto_ptr.
        (WebKit::ProxyInstance::supportsInvokeDefaultMethod): Ditto.
        (WebKit::ProxyInstance::supportsConstruct): Ditto.
        (WebKit::ProxyInstance::getPropertyNames): Ditto.
        (WebKit::ProxyInstance::methodNamed): Ditto.
        (WebKit::ProxyInstance::fieldNamed): Ditto.
        (WebKit::ProxyInstance::fieldValue): Ditto.
        (WebKit::ProxyInstance::setFieldValue): Ditto.

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

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

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::actionMaskForDrag):
        (WebDragClient::willPerformDragDestinationAction):
        (WebDragClient::willPerformDragSourceAction):
        (WebDragClient::startDrag):
        (WebDragClient::declareAndWriteDragImage):
        * WebView/WebFrame.mm:
        (-[WebFrame _replaceSelectionWithText:selectReplacement:smartReplace:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):
        * WebView/WebView.mm:
        (-[WebView draggingEntered:]):
        (-[WebView draggingUpdated:]):
        (-[WebView draggingExited:]):
        (-[WebView performDragOperation:]):

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

        CTTE: Thread references through markup.h
        https://bugs.webkit.org/show_bug.cgi?id=122403

        Reviewed by Darin Adler and Andreas Kling.

        * DOM/WebDOMOperations.mm:
        (-[DOMNode markupString]):
        (-[DOMRange markupString]):
        * WebView/WebFrame.mm:
        (-[WebFrame _documentFragmentWithMarkupString:baseURLString:]):
        (-[WebFrame _documentFragmentWithNodesAsParagraphs:]):

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

        CTTE: Pass DocumentWriter around as a reference
        https://bugs.webkit.org/show_bug.cgi?id=122396

        Reviewed by Andreas Kling.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):

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

        Don't preflight spell checker when calling -setContinuousSpellCheckingEnabled repeatedly
        https://bugs.webkit.org/show_bug.cgi?id=122329

        Reviewed by Darin Adler.

        * WebView/WebView.mm: (-[WebView setContinuousSpellCheckingEnabled:]): Don't do any
        work if preference didn't change (continuousSpellCheckingEnabled is a static that
        starts with false).

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

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebFrameLoaderClient::dispatchWillSubmitForm):

2013-10-04  Mark Lam  <mark.lam@apple.com>

        Change ScriptDebugServer to use DebuggerCallFrame instead of JavaScriptCallFrame.
        https://bugs.webkit.org/show_bug.cgi?id=121969.

        Reviewed by Geoffrey Garen.

        1. Make JavaScriptCallFrame a thin shell around the DebuggerCallFrame.
           DebuggerCallFrame now tracks whether it is valid instead of needing
           JavaScriptCallFrame do it.
        2. ScriptDebugServer now only instantiates an DebuggerCallFrame when needed
           just before it pauses and calls back to its client, and then invalidates
           it immediately when the callback returns. Every subsequent callback to
           the client will use a new instance of the DebuggerCallFrame.
        3. Similarly, ScriptDebugServer now only creates a JavaScriptCallFrame when
           it "pauses".
        4. DebuggerCallFrame only creates its caller DebuggerCallFrame when
           it is needed i.e. when the client calls callerFrame(). Similarly,
           JavaScriptCallFrame only creates its caller when it's requested.
        5. DebuggerCallFrame's line() and column() now returns a base-zero int.
        6. WebScriptDebugDelegate now only caches the functionName of the frame
           instead of the entire DebuggerCallFrame because that is all that is
           needed.
        7. Also removed evaluateInGlobalCallFrame() which is not used anywhere.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFramePrivate dealloc]):
        (-[WebScriptCallFrame _initWithGlobalObject:functionName:exceptionValue:JSC::]):
        (-[WebScriptCallFrame functionName]):
        (-[WebScriptCallFrame exception]):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::exception):

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

        Remove some unneeded code from WidgetMac
        https://bugs.webkit.org/show_bug.cgi?id=122355

        Reviewed by Dan Bernstein.

        Remove code to handle the visible rect changing, it's not needed anymore since we always put Netscape plug-ins into their own layers now.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:

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

        [iOS] Upstream disk image cache
        https://bugs.webkit.org/show_bug.cgi?id=121985

        Reviewed by Joseph Pecoraro.

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        * WebView/WebDataSource.mm:
        (BufferMemoryMapped): Added.
        (-[WebDataSource _setAllowToBeMemoryMapped]): Added.
        (-[WebDataSource setDataSourceDelegate:]): Added.
        (-[WebDataSource dataSourceDelegate]): Added.
        (-[WebDataSource dealloc]):
        * WebView/WebDataSourcePrivate.h: Declared private delegate
        protocol, WebDataSourcePrivateDelegate.
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences diskImageCacheEnabled]): Added.
        (-[WebPreferences setDiskImageCacheEnabled:]): Added.
        (-[WebPreferences diskImageCacheMinimumImageSize]): Added.
        (-[WebPreferences setDiskImageCacheMinimumImageSize:]): Added.
        (-[WebPreferences diskImageCacheMaximumCacheSize]): Added.
        (-[WebPreferences setDiskImageCacheMaximumCacheSize:]): Added.
        (-[WebPreferences _diskImageCacheSavedCacheDirectory]): Added.
        (-[WebPreferences _setDiskImageCacheSavedCacheDirectory:]): Added.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _preferencesChanged:]):

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

        Remove WebAssertions.h
        https://bugs.webkit.org/show_bug.cgi?id=122328

        Reviewed by Jessie Berlin.

        * Misc/WebAssertions.h: Removed.

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

        Remove WebNSNotificationCenterExtras
        https://bugs.webkit.org/show_bug.cgi?id=122316

        Reviewed by Dan Bernstein.

        Use dispatch_async to ensure that notifications are posted on the main thread.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _sendNotificationForURL:]):
        (-[WebIconDatabase _sendDidRemoveAllIconsNotification]):
        * Misc/WebNSNotificationCenterExtras.h: Removed.
        * Misc/WebNSNotificationCenterExtras.m: Removed.

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

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

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebChromeClient.h:

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

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

        Reviewed by Mark Rowe.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _scaleIcon:toSize:]):
        (webGetNSImage):
        * Misc/WebNSImageExtras.m:
        (-[NSImage _web_scaleToMaxSize:]):
        (-[NSImage _web_dissolveToFraction:]):
        * Misc/WebNSViewExtras.m:
        (-[NSView _web_DragImageForElement:rect:event:pasteboard:source:offset:]):
        (-[NSView _web_convertRect:toView:]):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::mouseEvent):
        * Plugins/Hosted/WebTextInputWindowController.m:
        (-[WebTextInputPanel _interpretKeyEvent:string:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView convertFromX:andY:space:toX:andY:space:]):
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::startDrag):
        * WebInspector/WebNodeHighlight.mm:
        (-[WebNodeHighlight _computeHighlightWindowFrame]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _startEnterFullScreenAnimationWithDuration:]):
        (-[WebFullScreenController _startExitFullScreenAnimationWithDuration:]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLView _postFlagsChangedEvent:]):
        (-[WebHTMLView _updateMouseoverWithFakeEvent]):
        (-[WebHTMLView _autoscroll]):
        (-[WebHTMLView mouseDown:]):
        (-[WebHTMLView mouseDragged:]):
        (-[WebHTMLView mouseUp:]):
        (-[WebHTMLView accessibilityHitTest:]):
        (-[WebHTMLView _executeSavedKeypressCommands]):
        (-[WebHTMLView attachRootLayer:]):
        (-[WebHTMLView textStorage]):
        (-[WebHTMLView _updateSelectionForInputManager]):
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _buildUI]):
        (-[WebTextCompletionController _placePopupWindow:]):

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

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

        Reviewed by Andreas Kling.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        (-[WebFrame _globalContextForScriptWorld:]):
        (-[WebFrame jsWrapperForNode:inScriptWorld:]):
        * WebView/WebScriptWorld.mm:
        (+[WebScriptWorld standardWorld]):
        (+[WebScriptWorld findOrCreateWorld:]):
        * WebView/WebScriptWorldInternal.h:
        * WebView/WebView.mm:
        (-[WebView _injectOutlookQuirksScript]):
        (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:injectedFrames:]):
        (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:injectedFrames:]):
        (+[WebView _removeUserScriptFromGroup:world:url:]):
        (+[WebView _removeUserStyleSheetFromGroup:world:url:]):
        (+[WebView _removeUserScriptsFromGroup:world:]):
        (+[WebView _removeUserStyleSheetsFromGroup:world:]):

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

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

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

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

        Fix the build when building against an SDK.

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

        * Configurations/WebKit.xcconfig:

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

        Fix the Lion build.

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

        * Configurations/WebKit.xcconfig:

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

        Fix some failures with newer versions of clang.

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

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/WebKit.xcconfig:

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

        Take Xcode's advice and enable some extra warnings.

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:

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

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

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canHandleRequest):
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _install]):
        Call isMainFrame.

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

        WebKit fails to build with newer versions of clang.

        Reviewed by Sam Weinig.

        * Carbon/HIWebView.mm: Remove an unused function.
        * History/BinaryPropertyList.cpp: #if a constant that's only used in 64-bit.
        * Misc/WebIconDatabase.mm: Remove two unused constants.
        * Plugins/WebBaseNetscapePluginView.mm: Remove an unused constant.
        * WebCoreSupport/WebEditorClient.mm: Ditto.

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

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

        Reviewed by Benjamin Poulain.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::writeToPasteboard):
        (WebPlatformStrategies::getPasteboardItemsCount):
        (WebPlatformStrategies::readBufferFromPasteboard):
        (WebPlatformStrategies::readURLFromPasteboard):
        (WebPlatformStrategies::readStringFromPasteboard):
        (WebPlatformStrategies::changeCount):

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

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

        Reviewed by Andreas Kling.

        * many files: Renamed, using script.

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

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

        Reviewed by Dean Jackson.

        Define and turn on ENABLE_MEDIA_CONTROLS_SCRIPT.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebDragClient.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebCoreSupport/WebPlatformStrategies.mm:
        * WebView/WebFrame.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebView.mm:
        Include MainFrame.h instead of Frame.h as needed.

2013-09-26  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] make MediaStream testable
        https://bugs.webkit.org/show_bug.cgi?id=121967

        Reviewed by Dean Jackson.

        * WebCoreSupport/WebUserMediaClient.h: Added.
        * WebCoreSupport/WebUserMediaClient.mm: Added.

        * WebView/WebUIDelegatePrivate.h: Declare decidePolicyForUserMediaRequestFromOrigin:listener:

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Register WebUserMediaClient.
        (-[WebView _setUserMediaClient:]): New.
        (-[WebView _userMediaClient]): New.
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

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

        Pass a JSC::VM& to JS bindings object creation functions, rather than a JSC::ExecState*
        https://bugs.webkit.org/show_bug.cgi?id=121934

        Reviewed by Geoffrey Garen.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::newRuntimeObject):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::create):
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::finishCreation):

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

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

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

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

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

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

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Alexey Proskuryakov.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Jer Noble.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Use singleton accessor.
        (-[WebView _setDashboardBehavior:to:]): Ditto.

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

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

        Reviewed by Mark Rowe.

        * Configurations/FeatureDefines.xcconfig:

2013-09-24  Mark Lam  <mark.lam@apple.com>

        Change JSC debug hooks to pass a CallFrame* instead of a DebuggerCallFrame.
        https://bugs.webkit.org/show_bug.cgi?id=121867.

        Reviewed by Geoffrey Garen.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _initWithGlobalObject:debuggerCallFrame:exceptionValue:JSC::]):
        (-[WebScriptCallFrame exception]):
        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::exception):

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

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::writeToPasteboard):

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

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

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2013-09-21  Mark Lam  <mark.lam@apple.com>

        Remove unused code in WebKit/mac's WebScriptDebugDelegate.
        https://bugs.webkit.org/show_bug.cgi?id=121706.

        Reviewed by Timothy Hatcher.

        WebScriptDebugDelegate's didEnterCallFrame, willExecuteStatement,
        and willLeaveCallFrame are not in use. Removed them and all methods
        and fields used for supporting them.

        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebScriptDebugDelegate.h:
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFramePrivate dealloc]):
        (-[WebScriptCallFrame _initWithGlobalObject:debuggerCallFrame:]):
        * WebView/WebScriptDebugger.h:
        (WebScriptDebugger::globalObject):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):
        (WebScriptDebugger::didReachBreakpoint):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):
        (WebScriptDebugger::exception):
        * WebView/WebView.mm:
        (-[WebView _cacheScriptDebugDelegateImplementations]):

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

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

        Reviewed by Andreas Kling.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodNamed):
        (WebKit::ProxyInstance::fieldNamed):

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

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

        Reviewed by Darin Adler.

        This method was only implemented in WebEditorClient.mm for Mac where it was
        calling a private delegate that is no longer in use.

        * DefaultDelegates/WebDefaultEditingDelegate.m:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebEditingDelegatePrivate.h:

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

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

        Reviewed by Sam Weinig.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):

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

        [mac WK1] Introduce WebViewWillCloseNotification
        https://bugs.webkit.org/show_bug.cgi?id=121321

        Reviewed by Sam Weinig.

        * WebKit.exp: Exported WebViewWillCloseNotification.
        * WebView/WebView.mm:
        (-[WebView _close]): Send WebViewWillCloseNotification before closing the WebView.
        * WebView/WebViewPrivate.h: Declared WebViewWillCloseNotification.

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

        REGRESSION (r155615): Lots of reftests fail with single line or single pixel differences
        https://bugs.webkit.org/show_bug.cgi?id=121245

        Reviewed by Darin Adler.

        Similar to https://bugs.webkit.org/show_bug.cgi?id=120963,
        we need to manually ensure that some pieces of persistent
        CoreGraphics state are restored after PDFKit changes them.

        In this case, we bookend our restoration around the various
        _recursiveDisplay... functions that we also use in WebHTMLView.

        * WebView/WebPDFView.mm:
        (-[WebPDFView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        (-[WebPDFView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):
        (-[WebPDFView _recursive:displayRectIgnoringOpacity:inContext:topView:]):
        (-[WebPDFView _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:]):

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

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

        Reviewed by Darin Adler.

        Update for WebCore changes. This also fixes a leak where we'd create an NSFileWrapper from NSData but never release the data.

        * WebView/WebDataSource.mm:
        (-[WebDataSource data]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation documentSource]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
        * WebView/WebResource.mm:
        (-[WebResource encodeWithCoder:]):
        (-[WebResource data]):

2013-09-12  Mark Lam  <mark.lam@apple.com>

        Change debug hooks to pass sourceID and position info via the DebuggerCallFrame.
        https://bugs.webkit.org/show_bug.cgi?id=121214.

        Reviewed by Geoffrey Garen.

        * webview/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):
        (WebScriptDebugger::didReachBreakpoint):

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

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

        Reviewed by Andreas Kling.

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

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

        No new tests, no behavior change.

        * Plugins/WebPluginController.mm:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullscreenForNode):
        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:WebCore::]):

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

        [iOS] Upstream text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=121111

        Reviewed by Andy Estes and Sam Weinig.

        * WebView/WebFrame.mm:
        (-[WebFrame resetTextAutosizingBeforeLayout]): Added.
        (-[WebFrame _setVisibleSize:]): Added.
        (-[WebFrame _setTextAutosizingWidth:]): Added.
        * WebView/WebFramePrivate.h:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences _setMinimumZoomFontSize:]): Added.
        (-[WebPreferences _minimumZoomFontSize]): Added.

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

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

        Reviewed by Simon Fraser.

        Expose a new preference "multithreadedWebGLEnabled".

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences multithreadedWebGLEnabled]):
        (-[WebPreferences setMultithreadedWebGLEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

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

        Reviewed by Beth Dakin.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set WebPreference to YES.

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

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

        Reviewed by Andreas Kling.

        * WebView/WebPDFView.mm:
        (isFrameInRange):

2013-09-05  Andreas Kling  <akling@apple.com>

        ScrollView::children() should return a reference.
        <https://webkit.org/b/120795>

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView _addScrollerDashboardRegionsForFrameView:dashboardRegions:]):

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

        <https://webkit.org/b/120707> Make WebKit's localizable strings mechanism usable under ARC

        WebKit's localizable strings mechanism is also used outside of WebKit so it needs to work
        both with and without ARC.

        Reviewed by Anders Carlsson.

        * Misc/WebLocalizableStrings.h: Mark the bundle member as unretained. This matches how the
        member is used within WebLocalizableStrings.mm.

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

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

        Reviewed by Andy Estes.

        * Misc/WebNSFileManagerExtras.mm:
        (-[NSFileManager _webkit_startupVolumeName]): Removed some unneeded locals.
        Got rid of the pointless ref/leakRef/HardAutorelease dance, and replaced it
        with a [[x copy] autorelease].

        * Misc/WebNSURLExtras.mm:
        (-[NSURL _web_URLWithLowercasedScheme]): Use CFBridgingRelease, and got rid
        of unneeded type casts.

        * Plugins/WebBasePluginPackage.mm:
        (+[WebBasePluginPackage preferredLocalizationName]): Use CFBridgingRelease.
        * WebView/WebPDFRepresentation.mm:
        (-[WebPDFRepresentation convertPostScriptDataSourceToPDF:]): Ditto.

        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]): Use CFBridgingRelease and got rid of unneeded
        type cast.

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

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

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Andreas Kling.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Timothy Hatcher.

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

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::save):

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

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

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

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invokeMethod):

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

        Fix build.

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodNamed):
        (WebKit::ProxyInstance::fieldNamed):

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

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

        Reviewed by Darin Adler.

        * Misc/WebNSFileManagerExtras.mm:
        (-[NSFileManager _webkit_startupVolumeName]): Used HardAutorelease()
        instead of WebCFAutorelease().
        * Misc/WebNSObjectExtras.h: Removed definition of WebCFAutorelease().
        * Misc/WebNSURLExtras.mm:
        (-[NSURL _web_URLWithLowercasedScheme]): Used HardAutorelease()
        instead of WebCFAutorelease().
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPluginLayer]): Stop leaking
        CGColors (CALayer retains its backgroundColor property despite the
        property attributes claiming otherwise).
        * Plugins/WebBasePluginPackage.mm:
        (+[WebBasePluginPackage preferredLocalizationName]): Used
        HardAutorelease() instead of WebCFAutorelease().
        * WebView/WebDeviceOrientationProviderMock.mm:
        (-[WebDeviceOrientationProviderMockInternal lastOrientation]): Stop
        leaking WebDeviceOrientations.
        * WebView/WebPDFRepresentation.mm:
        (-[WebPDFRepresentation convertPostScriptDataSourceToPDF:]): Used
        HardAutorelease() instead of WebCFAutorelease().
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]): Ditto.
        (-[WebView _removeObjectForIdentifier:]): Ditto.

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

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

        Reviewed by Darin Adler.

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

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::copy):
        (WebPlatformStrategies::changeCount):
        (WebPlatformStrategies::addTypes):
        (WebPlatformStrategies::setTypes):
        (WebPlatformStrategies::setBufferForType):
        (WebPlatformStrategies::setPathnamesForType):
        (WebPlatformStrategies::setStringForType):

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

        Unreviewed build fix.

        * WebView/WebFrame.mm:
        (+[WebFrame _createMainFrameWithPage:frameName:frameView:]):

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

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

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::setWebFrame):

            Make it possible to construct a WebFrameLoaderClient with a null WebFrame*.
            A WebFrame* is later hooked up with a call to setWebFrame().

        * WebView/WebFrame.mm:
        (+[WebFrame _createMainFrameWithPage:frameName:frameView:]):

            Customized this method to wrap the Page::mainFrame() instead of creating a
            new Frame.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

            Add a WebFrameLoaderClient to the PageClients passed to Page().

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

        Frame should not have a documentTypeString member function
        https://bugs.webkit.org/show_bug.cgi?id=120262

        Reviewed by Andreas Kling.

        * WebView/WebFrame.mm: Removed _stringWithDocumentTypeStringAndMarkupString:
        internal method, which was not used anywhere in WebKit. Internal methods are
        only for use within WebKit, as opposed to public and private methods that can
        be used outside.
        * WebView/WebFrameInternal.h: Ditto.

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

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

        Reviewed by Andreas Kling.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView resolvedURLStringForURL:target:]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadPluginRequest:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (applyAppleDictionaryApplicationQuirkNonInlinePart):
        (WebFrameLoaderClient::prepareForDataSourceReplacement):
        (WebFrameLoaderClient::createFrame):
        * WebView/WebFrame.mm:
        (+[WebFrame _createFrameWithPage:frameName:frameView:ownerElement:]):
        (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]):
        (-[WebFrame _unmarkAllBadGrammar]):
        (-[WebFrame _unmarkAllMisspellings]):
        (-[WebFrame _atMostOneFrameHasSelection]):
        (-[WebFrame _findFrameWithSelection]):
        (-[WebFrame _drawRect:contentsOnly:]):
        (-[WebFrame _isDescendantOfFrame:]):
        (-[WebFrame _recursive_resumeNullEventsForAllNetscapePlugins]):
        (-[WebFrame _recursive_pauseNullEventsForAllNetscapePlugins]):
        (-[WebFrame name]):
        (-[WebFrame findFrameNamed:]):
        (-[WebFrame parentFrame]):
        (-[WebFrame childFrames]):
        * WebView/WebView.mm:
        (-[WebView _attachScriptDebuggerToAllFrames]):
        (-[WebView _detachScriptDebuggerFromAllFrames]):
        (-[WebView _clearMainFrameName]):
        (-[WebView _isUsingAcceleratedCompositing]):
        (-[WebView _isSoftwareRenderable]):
        (-[WebView setHostWindow:]):
        (incrementFrame):
        Use tree(). instead of tree()->.

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

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

        Reviewed by Anders Carlsson.

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

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        <https://webkit.org/b/120029> Document::markers() should return a reference

        Reviewed by Andreas Kling.

        Document::m_markers is never NULL so return a reference from Document::markers(). Also mark
        m_markers as const and initialize it in member initialization.

        * WebView/WebFrame.mm:
        (-[WebFrame _unmarkAllBadGrammar]):
        (-[WebFrame _unmarkAllMisspellings]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView unmarkAllTextMatches]):
        (-[WebHTMLView rectsForTextMatches]):

2013-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        <https://webkit.org/b/120049> Delete code for Snow Leopard

        Reviewed by Benjamin Poulain.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]):
        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]):
        * Misc/WebNSFileManagerExtras.mm:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        (WebEditorClient::getGuessesForWord):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebKitPrefix.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]):
        * WebView/WebFullScreenController.mm:
        (convertRectToScreen):
        (-[WebFullScreenController finishedEnterFullScreenAnimation:]):
        (-[WebFullScreenController exitFullScreen]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        (-[WebHTMLView removeMouseMovedObserver]):
        (-[WebHTMLView windowDidBecomeKey:]):
        (-[WebHTMLView windowDidResignKey:]):
        * WebView/WebView.mm:
        (-[WebView _deviceScaleFactor]):

2013-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        <https://webkit.org/b/120051> Remove the Mail thread workaround

        Reviewed by Sam Weinig.

        Remove the workaround for a very old version of Mail added in r39455.

        * WebView/WebArchive.mm:
        (-[WebArchive initWithMainResource:subresources:subframeArchives:]):
        (-[WebArchive mainResource]):
        (-[WebArchive subresources]):
        (-[WebArchive subframeArchives]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]):
        * WebView/WebResource.mm:
        (-[WebResource data]):
        (-[WebResource URL]):
        (-[WebResource MIMEType]):
        (-[WebResource textEncodingName]):
        (-[WebResource frameName]):
        (-[WebResource _ignoreWhenUnarchiving]):
        (-[WebResource _initWithData:URL:MIMEType:textEncodingName:frameName:response:copyData:]):
        (-[WebResource _suggestedFilename]):
        (-[WebResource _response]):
        (-[WebResource _stringValue]):

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

        <https://webkit.org/b/119918> Frame::selection() should return a reference

        Reviewed by Darin Adler.

        m_selection is never NULL so return a reference from Frame::selection(). Also removed some
        unnecessary null checks and assert diff ts exposed as a result.

        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame _hasSelection]):
        (-[WebFrame _rangeByAlteringCurrentSelection:FrameSelection::direction:granularity:]):
        (-[WebFrame _selectionGranularity]):
        (-[WebFrame _convertToNSRange:]):
        (-[WebFrame _convertToDOMRange:]):
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]):
        (-[WebFrame _typingStyle]):
        (-[WebFrame _selectedNSRange]):
        (-[WebFrame _selectNSRange:]):
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        (-[WebFrame _replaceSelectionWithText:selectReplacement:smartReplace:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation currentForm]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView readSelectionFromPasteboard:]):
        (-[WebHTMLView _selectedRange]):
        (-[WebHTMLView _hasSelection]):
        (-[WebHTMLView _hasSelectionOrInsertionPoint]):
        (-[WebHTMLView _hasInsertionPoint]):
        (-[WebHTMLView _isEditable]):
        (-[WebHTMLView jumpToSelection:]):
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView maintainsInactiveSelection]):
        (isTextInput):
        (isInPasswordField):
        (-[WebHTMLView centerSelectionInVisibleArea:]):
        (-[WebHTMLView _canSmartCopyOrDelete]):
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView _updateSelectionForInputManager]):
        (-[WebHTMLView selectionRect]):
        (-[WebHTMLView selectionTextRects]):
        (-[WebHTMLView selectionImageRect]):
        (-[WebHTMLView selectAll]):
        (-[WebHTMLView deselectAll]):
        (-[WebHTMLView selectedAttributedString]):
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):
        * WebView/WebView.mm:
        (-[WebView setSelectedDOMRange:affinity:]):
        (-[WebView selectedDOMRange]):
        (-[WebView selectionAffinity]):
        (-[WebView setEditable:]):
        (-[WebView _selectionIsCaret]):
        (-[WebView _selectionIsAll]):

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

        <https://webkit.org/b/119941> Make Page::dragController return a reference

        Reviewed by Andreas Kling.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _setDocumentView:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView draggingSourceOperationMaskForLocal:]):
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):
        * WebView/WebView.mm:
        (-[WebView _setInitiatedDrag:]):
        (-[WebView draggingEntered:]):
        (-[WebView draggingUpdated:]):
        (-[WebView draggingExited:]):
        (-[WebView performDragOperation:]):
        (-[WebView moveDragCaretToPoint:]):
        (-[WebView removeDragCaret]):
        Updated call sites.

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

        <https://webkit.org/b/119852> Frame::scriptController() should return a reference

        Reviewed by Andreas Kling.

        m_script is never NULL so we can just return a reference. Also remove some pointless null
        checks as a result of doing this.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::cleanup):
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:value:]):
        (-[WebNetscapePluginView _destroyPlugin]):
        * Plugins/WebPluginController.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::save):
        (WebInspectorFrontendClient::append):
        * WebView/WebFrame.mm:
        (-[WebFrame _attachScriptDebugger]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        (-[WebFrame _globalContextForScriptWorld:]):
        (-[WebFrame jsWrapperForNode:inScriptWorld:]):
        (-[WebFrame windowObject]):
        (-[WebFrame globalContext]):
        (-[WebFrame javaScriptContext]):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::initGlobalCallFrame):
        (WebScriptDebugger::callEvent):
        * WebView/WebView.mm:
        (-[WebView windowScriptObject]):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):

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

        <https://webkit.org/b/119859> Frame::loader() should return a reference

        Reviewed by Andreas Kling.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::performRequest):
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginView:receivedResponse:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView requestWithURLCString:]):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadStream]):
        (-[WebNetscapePluginView pluginView:receivedResponse:]):
        (-[WebNetscapePluginView loadPluginRequest:]):
        (-[WebNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        * Plugins/WebPluginController.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebFrameLoaderClient::restoreViewState):
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebFrameLoaderClient::createFrame):
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::blockedError):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):
        * WebView/WebFrame.mm:
        (kit):
        (-[WebFrame _dataSource]):
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _commitData:]):
        (-[WebFrame _firstLayoutDone]):
        (-[WebFrame _loadType]):
        (-[WebFrame _cacheabilityDictionary]):
        (-[WebFrame _clearOpener]):
        (-[WebFrame provisionalDataSource]):
        (-[WebFrame dataSource]):
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):
        (-[WebFrame loadArchive:]):
        (-[WebFrame stopLoading]):
        (-[WebFrame reload]):
        (-[WebFrame reloadFromOrigin]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation receivedData:withDataSource:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):
        * WebView/WebRenderLayer.mm:
        (-[WebRenderLayer initWithWebFrame:]):
        * WebView/WebRenderNode.mm:
        (-[WebRenderNode _initWithCoreFrame:]):
        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView _loadBackForwardListFromOtherView:]):
        (-[WebView _cachedResponseForURL:]):
        (-[WebView setCustomTextEncodingName:]):
        (-[WebView shouldClose]):

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

        <https://webkit.org/b/119854> REGRESSION (r153379): Serious drawing issues with WebViews
        <rdar://problem/14698870>

        Reviewed by Simon Fraser.

        Don't set aside subviews if they have already been set aside.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:]):

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

        [Mac] Remove "legacy" media UI
        https://bugs.webkit.org/show_bug.cgi?id=119752

        Reviewed by Jer Noble.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove MediaControllerThemeAvailable.

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

        Remotely hosted plugins don’t work in window-server-hosted WebKit1 views
        https://bugs.webkit.org/show_bug.cgi?id=119709
        <rdar://problem/14717572>

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/NetscapePluginHostManager.h:
        Add hostLayersInWindowServer argument to instantiatePlugin.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Add hostLayersInWindowServer argument to instantiatePlugin, and pass it through to WebKitPluginHost.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLayerHostingModeChanged):
        Forward the notification that the plugin host changed its layer hosting mode
        to the instance proxy.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::setShouldHostLayersInWindowServer):
        Ask the plugin host to re-host its layers when the layer hosting mode changes.

        (WebKit::NetscapePluginInstanceProxy::layerHostingModeChanged):
        Inform the WebHostedNetscapePluginView of the new layer hosting mode
        when it changes. Also, store the new CAContext ID.

        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView windowHostsLayersInWindowServer]):
        Determine whether the WebView's current window uses window-server hosting for its layers.

        (-[WebHostedNetscapePluginView createPlugin]):
        Drive-by spelling fix.
        Factor _pluginLayer initialization out into createPluginLayer.
        Instantiate the plugin with the appropriate layer hosting mode.

        (-[WebHostedNetscapePluginView createPluginLayer]):

        (-[WebHostedNetscapePluginView setHostsLayersInWindowServer:]):
        Create a new _pluginLayer if the layer hosting mode changes.
        Attach the new _pluginLayer to our parent layer.

        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        Inform the NetscapePluginInstanceProxy if the layer hosting mode changes,
        so it can inform the plugin host. We will asynchronously receive a reply
        with the new hosting mode and renderContextID and switch to the new CAContext,
        in setHostsLayersInWindowServer:.

        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

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

        REGRESSION (r153877): Plugin scanning slows creation of WebViews
        https://bugs.webkit.org/show_bug.cgi?id=119665
        <rdar://problem/14716549>

        Reviewed by Darin Adler.

        * Plugins/WebPluginDatabase.h:
        * Plugins/WebPluginDatabase.mm:
        (+[WebPluginDatabase sharedDatabaseIfExists]): Added.

        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::refreshPlugins):
        Only refresh the plugin database if it's already been loaded.

2013-08-14  Jer Noble  <jer.noble@apple.com>

        Revert r154019; causes >50 tests to fail on WebKit1 bots.

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebHostedNetscapePluginView createPlugin]):
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

2013-08-13  Filip Pizlo  <fpizlo@apple.com>

        Foo::s_info should be Foo::info(), so that you can change how the s_info is actually linked
        https://bugs.webkit.org/show_bug.cgi?id=119770

        Reviewed by Mark Hahnenberg.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::getObjectID):
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject):
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::finishCreation):
        (WebKit::ProxyInstance::invokeMethod):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

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

        <https://webkit.org/b/119777> Get rid of two gotos

        Reviewed by Tim Horton.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView mouseDown:]):
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):

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

        Remotely hosted plugins don’t work in window-server-hosted WebKit1 views
        https://bugs.webkit.org/show_bug.cgi?id=119709
        <rdar://problem/14717572>

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/NetscapePluginHostManager.h:
        Add hostLayersInWindowServer argument to instantiatePlugin.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        Add hostLayersInWindowServer argument to instantiatePlugin, and pass it through to WebKitPluginHost.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCLayerHostingModeChanged):
        Forward the notification that the plugin host changed its layer hosting mode
        to the instance proxy.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::setShouldHostLayersInWindowServer):
        Ask the plugin host to re-host its layers when the layer hosting mode changes.

        (WebKit::NetscapePluginInstanceProxy::layerHostingModeChanged):
        Inform the WebHostedNetscapePluginView of the new layer hosting mode
        when it changes. Also, store the new CAContext ID.

        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView windowHostsLayersInWindowServer]):
        Determine whether the WebView's current window uses window-server hosting for its layers.

        (-[WebHostedNetscapePluginView createPlugin]):
        Drive-by spelling fix.
        Factor _pluginLayer initialization out into createPluginLayer.
        Instantiate the plugin with the appropriate layer hosting mode.

        (-[WebHostedNetscapePluginView createPluginLayer]):

        (-[WebHostedNetscapePluginView setHostsLayersInWindowServer:]):
        Create a new _pluginLayer if the layer hosting mode changes.
        Attach the new _pluginLayer to our parent layer.

        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        Inform the NetscapePluginInstanceProxy if the layer hosting mode changes,
        so it can inform the plugin host. We will asynchronously receive a reply
        with the new hosting mode and renderContextID and switch to the new CAContext,
        in setHostsLayersInWindowServer:.

        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:

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

        navigator.plugins has plugins in it when plugins are disabled
        https://bugs.webkit.org/show_bug.cgi?id=119607
        <rdar://problem/14678030>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):
        If plugins are disabled for the given page, give WebCore an empty list of
        plugins. If WebKit1 had any application plugins, we'd return just them
        instead.

2013-08-06  Stephanie Lewis  <slewis@apple.com>

        Update Order Files for Safari
        <rdar://problem/14517392>

        Unreviewed.

        * WebKit.order:

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

        Remove support for HTML5 MicroData
        https://bugs.webkit.org/show_bug.cgi?id=119480

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:

2013-07-23  David Farler  <dfarler@apple.com>

        Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=117762

        Reviewed by Mark Rowe.

        * Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.
        * Configurations/WebKit.xcconfig:
        Add ASAN_OTHER_LDFLAGS.

2013-07-26  Mark Rowe  <mrowe@apple.com>

        Logging should be configurable using human-readable channel names rather than crazy bitmasks
        <http://webkit.org/b/119031>

        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.

        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
        for history and loading being enabled.

        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
        the old user defaults to remain set for those people that need to switch between version of WebKit before and
        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.

        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
        consistency with the other platforms and to enable more code sharing.

        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
        adding a new logging channel. Now only the header in the relevant project needs to be updated.

        Reviewed by Sam Weinig.

        * Misc/WebKitLogging.h: Declare a WEBKIT_LOG_CHANNELS macro that can be used to apply a preprocessor macro
        across the set of all logging channels. Use this macro to declare the logging channels.
        * Misc/WebKitLogging.m: Use WEBKIT_LOG_CHANNELS to define all of the channels. Pass the channels and the
        preference value to the new WTF function that handles the initialization.
        * WebView/WebPreferenceKeysPrivate.h: Remove a key that does not need to be here.
        * WebView/WebView.mm: Switch from WebCore's InitializeLogging.h to Logging.h.

2013-08-01  Ruth Fong  <ruth_fong@apple.com>

        [Forms: color] <input type='color'> popover color well implementation
        <rdar://problem/14411008> and https://bugs.webkit.org/show_bug.cgi?id=119356

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig: Added and enabled INPUT_TYPE_COLOR_POPOVER.

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

        Remove didFinishLoad order quirk
        https://bugs.webkit.org/show_bug.cgi?id=119354
        <rdar://problem/11510686>

        Reviewed by Alexey Proskuryakov.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Don't set the now-removed preference.

2013-07-31  Kwang Yul Seo  <skyul@company100.net>

        Use emptyString instead of String("")
        https://bugs.webkit.org/show_bug.cgi?id=119335

        Reviewed by Darin Adler.

        Use emptyString() instead of String("") because it is better style and
        faster. This is a followup to r116908, removing all occurrences of
        String("") from WebKit.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::userAgent):

2013-07-31  Ruth Fong  <ruth_fong@apple.com>

        <input type=color> Mac UI behaviour
        <rdar://problem/10269922> and https://bugs.webkit.org/show_bug.cgi?id=61276

        Reviewed by Brady Eidson.

        * Configurations/FeatureDefines.xcconfig: Enabled INPUT_TYPE_COLOR.
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createColorPicker): Added stub implementation.

2013-07-26  Dean Jackson  <dino@apple.com>

        Allow new transitions to run even when controller is suspended
        https://bugs.webkit.org/show_bug.cgi?id=119171
        <rdar://problem/14511404>

        Reviewed by Simon Fraser.

        Expose a new SPI on WebView that triggers the (buggy) old behaviour
        for animations, such that any newly created animations will start even
        when the document is supposedly suspended. It turns out that client content was
        unknowingly relying on this behaviour - e.g. suspending a view, loading a
        bunch of new content, bringing the view on screen and then unsuspending. In this
        situation, we were not running CSS transitions, because the page was suspended.
        However, JS was still triggering them, and content was expecting a transitionEnd event.

        * WebView/WebView.mm:
        (-[WebView allowsNewCSSAnimationsWhileSuspended]): Calls into AnimationController.
        (-[WebView setAllowsNewCSSAnimationsWhileSuspended:]): Ditto.
        * WebView/WebViewPrivate.h: New methods listed above.

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

        Add another method that we need to set aside subviews for
        https://bugs.webkit.org/show_bug.cgi?id=119157
        <rdar://problem/14554723>

        Reviewed by Beth Dakin.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inContext:topView:]):
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:]):

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

        ChromeClient::focusedNodeChanged() should be focusedElementChanged().
        <http://webkit.org/b/119110>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedElementChanged):

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

        Rolled back in r149527 with crash fixed.

        Reviewed by Oliver Hunt.

            Rationalized 'this' value conversion
            https://bugs.webkit.org/show_bug.cgi?id=115542

2013-07-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152701, r152703, r152739, r152754,
        and r152756.
        http://trac.webkit.org/changeset/152701
        http://trac.webkit.org/changeset/152703
        http://trac.webkit.org/changeset/152739
        http://trac.webkit.org/changeset/152754
        http://trac.webkit.org/changeset/152756
        https://bugs.webkit.org/show_bug.cgi?id=118821

        this was a buggy fix and we're going to try something
        different (Requested by thorton on #webkit).

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldUnavailablePluginMessageBeButton):

2013-07-17  Kangil Han  <kangil.han@samsung.com>

        Use toHTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=118727

        Reviewed by Ryosuke Niwa.

        To avoid direct use of static_cast, this patch uses toHTMLMediaElement for code cleanup.

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:WebCore::]):

2013-07-16  Simon Fraser  <simon.fraser@apple.com>

        Protect against the LayerFlushController being deleted inside its flushLayers() callback
        https://bugs.webkit.org/show_bug.cgi?id=118741
        <rdar://problem/14402651>

        Reviewed by Tim Horton.
        
        It's possible (especially on iOS) for the LayerFlushController to be destroyed
        inside its callback, via -[WebView _close]. Protect against this by making
        it refcounted, and holding a ref across the callback.
        
        Due to the odd relationship in which LayerFlushController owns its LayerFlushScheduler
        by value, we achieve this by allowing subclasses of LayerFlushScheduler
        to override runLoopObserverCallback(). WebViewLayerFlushScheduler uses the
        override to protect the owner of the LayerFlushScheduler, which is the
        LayerFlushController, when the callback is firing.

        * WebView/WebView.mm:
        (-[WebView _close]):
        * WebView/WebViewData.h:
        (WebViewLayerFlushScheduler::~WebViewLayerFlushScheduler):
        (LayerFlushController::create):
        * WebView/WebViewData.mm:
        (LayerFlushController::invalidate):
        (WebViewLayerFlushScheduler::WebViewLayerFlushScheduler):

2013-07-16  Jessie Berlin  <jberlin@apple.com>

        Fix some NSDictionary misuse pointed out by the clang static analyzer
        https://bugs.webkit.org/show_bug.cgi?id=118736

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        Explicitly cast the CFStringRef to an NSString *.
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::documentFragmentFromAttributedString):
        Do not put a key with a nil value pair into the NSDictionary.

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

        Update blocked/missing plug-in UI
        https://bugs.webkit.org/show_bug.cgi?id=118347
        <rdar://problem/14209318>

        Reviewed by Sam Weinig.
        Patch by Antoine Quint, Anders Carlsson, Sam Weinig, and myself.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldUnavailablePluginMessageIncludeButton):
        Rename from shouldUnavailablePluginMessageBeButton to
        shouldUnavailablePluginMessageIncludeButton for accuracy.

2013-07-14  Jon Lee  <jonlee@apple.com>

        [WK2] Calling Notification.requestPermission() without a callback crashes
        https://bugs.webkit.org/show_bug.cgi?id=118654
        <rdar://problem/14293352>

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebNotificationClient.mm:
        (-[WebNotificationPolicyListener initWithCallback:]): The callback can be NULL, so remove the ASSERT.
        (-[WebNotificationPolicyListener allow]): Check for the callback before asking it to handle the event.
        (-[WebNotificationPolicyListener deny]): Ditto.

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

        Remove some dead stores pointed out by the clang static analyzer.
        https://bugs.webkit.org/show_bug.cgi?id=118608

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        kr is never read after this point, so there is no reason to assign to it.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        The extensions array is only used in the while loop. Move the declaration to the first place
        it is used in the while loop. Since it is always reassigned at that location, and since it
        is never read after the subsequent for loop, the assignment to an array containing the empty
        string is never used. Remove it.
        Similarly, the value of the description is always overwritten before used to assign to
        mimeClassInfo.desc or to pluginInfo.desc, so the code to assign it to the empty string is
        never used. Remove it.

        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _placePopupWindow:]):
        maxWidth is never read (and never was since it was added in r7311) after it is used on the
        line above to set windowFrame.size.width.

2013-07-11  Dan Bernstein  <mitz@apple.com>

        [mac] No API for getting the page visibility state of a WebView
        https://bugs.webkit.org/show_bug.cgi?id=118578

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (kit): Added. Converts from WebCore::PageVisibilityState to WebPageVisibilityState.
        (-[WebView _visibilityState]): Added.
        * WebView/WebViewPrivate.h: Declared -_visibilityState.

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

        Revert r152267 and soft link WebInspectorUI.framework again.

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

        Reviewed by David Kilzer.

        * Configurations/WebKit.xcconfig:
        * WebCoreSupport/WebInspectorClient.mm:
        (useWebKitWebInspector):

2013-07-10  Jessie Berlin  <jberlin@apple.com>

        Remove some dead code from WebNSURLExtras _web_hostString
        https://bugs.webkit.org/show_bug.cgi?id=118519

        Reviewed by Anders Carlsson.

        * Misc/WebNSURLExtras.mm:
        (-[NSURL _web_hostString]):
        NSString initWithData:encoding: does not throw an exception when passing nil for the data, so
        just delete the code that wasn't being run.

2013-07-09  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Remember the scroll position and restore after exiting full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=61956
        <rdar://problem/9544461>

        Call into the main FrameView to save the scroll position before swapping the
        WebView into the full-screen window, and restore the scroll position after 
        swapping the WebView back into the browser window.

        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController windowDidEnterFullscreen:]): Save the scroll position.
        (-[WebFullScreenController exitFullscreen]): Restore the scroll position.

2013-07-04  Yongjun Zhang  <yongjun_zhang@apple.com>

        Add a method to get unreachable URL from WebFrame.
        https://bugs.webkit.org/show_bug.cgi?id=118399

        Normally we could use [[WebFrame dataSource] unreachableURL] to get the failed URL.  However, if the frame has not
        loaded (FrameLoader::frameHasLoaded() is false), we will get a nil dataSource and we won't be able to get unreachableURL.
        We can add a method to always return the unreachableURL regardless if the frame has loaded or not.

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        (-[WebFrame _unreachableURL]):
        * WebView/WebFramePrivate.h:

2013-07-03  Zalan Bujtas  <zalan@apple.com>

        H&R Block 2010 Help window can not be reopened.
        https://bugs.webkit.org/show_bug.cgi?id=118342

        Reviewed by Antti Koivisto.

        http://trac.webkit.org/changeset/118916 changed the window.focus() behaviour so that
        only the opener can (re)focus() a particular window.
        H&R Block app relies on the relaxed window.focus() rules.

        * WebView/WebView.mm:
        (shouldRestrictWindowFocus):
        (-[WebView _preferencesChanged:]):

2013-07-01  Timothy Hatcher  <timothy@apple.com>

        Link to WebInspectorUI.framework at build time instead of soft linking.

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

        Reviewed by Joseph Pecoraro.

        * Configurations/WebKit.xcconfig:
        * WebCoreSupport/WebInspectorClient.mm:
        (useWebKitWebInspector):

2013-07-01  Jochen Eisinger  <jochen@chromium.org>

        Remove support for consumable user gestures
        https://bugs.webkit.org/show_bug.cgi?id=118247

        Reviewed by Geoffrey Garen.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):

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

        Audio in apps which embed WebViews is corrupted.
        https://bugs.webkit.org/show_bug.cgi?id=118163

        Reviewed by Maciej Stachowiak.

        Expose the WebCore lowPowerVideoAudioBufferSizeEnabled setting to WebKit clients.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences lowPowerVideoAudioBufferSizeEnabled]):
        (-[WebPreferences setLowPowerVideoAudioBufferSizeEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2013-07-01  Kangil Han  <kangil.han@samsung.com>

        Adopt toHTMLTextAreaElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118226

        Reviewed by Andreas Kling.

        To enhance readability, this patch adopts toHTMLTextAreaElement.
        This also helps out to reduce duplicated use of static_cast.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textDidChangeInTextArea):

2013-06-27  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLInputElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118130

        Reviewed by Antti Koivisto.

        To enhance readability, this patch adopts is/toHTMLInputElement.
        This also helps out to reduce duplicated use of static_cast.

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setAutofilled:]):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedNodeChanged):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        * WebView/WebHTMLRepresentation.mm:
        (inputElementFromDOMElement):

2013-06-26  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLAudioElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=117985

        Reviewed by Jer Noble.

        To enhance readibility, this patch adopts is/toHTMLAudioElement.
        This also helps out to reduce duplicated use of static_cast.

        * Plugins/WebPluginController.mm:

2013-06-24  Simon Fraser  <simon.fraser@apple.com>

        Move displayID stuff from Widget to Chrome
        https://bugs.webkit.org/show_bug.cgi?id=117944

        Reviewed by Anders Carlsson.

        In r151877 I polluted Widget with displayID-related stuff. This would
        be better on HostWindow, so move it there. This is a net code reduction,
        and eliminates PlatformScreenMac.h, and the NSScreen category.

        * WebView/WebView.mm:
        (-[WebView doWindowDidChangeScreen]): Go via chrome().

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

        REGRESSION (r150663): Using webkitAudioContext in Inspector makes it undefined everywhere
        https://bugs.webkit.org/show_bug.cgi?id=117825

        Reviewed by Kentaro Hara.

        Use Settings to enable Web Audio instead of RuntimeEnabledFeatures.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        FrameView needs to initialize paintsEntireContents on creation
        https://bugs.webkit.org/show_bug.cgi?id=117844

        Reviewed by Anders Carlsson.
        
        In WebKit1, if the WebView is layer-backed, WebHTMLView gets a layer.
        In this mode, FrameView::paintsEntireContents() is true. However,
        we would only call setPaintsEntireContents(true) on the FrameView
        when the view's layer-backed status changes. FrameView also needs
        to fetch this state when it is initialized, because we may be creating
        a new FrameView for an already layer-backed WebHTMLView.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldPaintEntireContents):

2013-06-19  Benjamin Poulain  <bpoulain@apple.com>

        Use the PlatformEvent timestamp when creating a DOM Event
        https://bugs.webkit.org/show_bug.cgi?id=117179

        Reviewed by Darin Adler.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix for Mac.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Re-implement WebFrameNetworkingContext.
        <rdar://problem/13174821>.

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebFrameNetworkingContext.h: Added.
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebFrameNetworkingContext::userAgent):
        * WebCoreSupport/WebFrameNetworkingContext.mm: Added.
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebFrameNetworkingContext::destroyPrivateBrowsingSession):
        (WebFrameNetworkingContext::needsSiteSpecificQuirks):
        (WebFrameNetworkingContext::localFileContentSniffingEnabled):
        (WebFrameNetworkingContext::scheduledRunLoopPairs):
        (WebFrameNetworkingContext::sourceApplicationAuditData):
        (WebFrameNetworkingContext::blockedError):
        (WebFrameNetworkingContext::storageSession):

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

        <rdar://problem/13174821> Remove files with an incorrect license.

        Rubber-stamped by Maciej Stachowiak.

        This will break the build, stay tuned for a fix coming soon.

        * WebCoreSupport/WebFrameNetworkingContext.h: Removed.
        * WebCoreSupport/WebFrameNetworkingContext.mm: Removed.

2013-06-17  Michael Brüning  <michael.bruning@digia.com>

        [Qt] Remove Qt specific QTKIT flagged code.
        https://bugs.webkit.org/show_bug.cgi?id=117635

        Reviewed by Simon Hausmann.

        Due to disabling QTKIT for Qt in r151546, the
        code the flags that are not taken into account
        anymore and the code that has been rendered
        unreachable by this are removed.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2013-06-17  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Unreviewed, rolling out r151632.
        http://trac.webkit.org/changeset/151632
        https://bugs.webkit.org/show_bug.cgi?id=117585

        Debug build error ASSERT(WTF_USE_GRAMMAR_CHECKING) for non MAC
        platforms

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients):

2013-06-14  Grzegorz Czajkowski  <g.czajkowski@samsung.com>

        Context menu grammar checking items are available when GRAMMAR_CHECKING macro is off
        https://bugs.webkit.org/show_bug.cgi?id=117585

        Reviewed by Anders Carlsson.

        Add GRAMMAR_CHECKING guard to the context menu grammar items.

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients):

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

        Add support for AVFoundation-backed HTMLMediaElements in the WebVideoFullScreenController.
        https://bugs.webkit.org/show_bug.cgi?id=117597

        Reviewed by Eric Carlson.

        Allow AVFoundation to be enabled even when the FullScreen API is disabled.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): 

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

        Remove the notion of inactive plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=117570
        <rdar://problem/13484213>

        Reviewed by Tim Horton.

        Remove code that deals with inactive plug-ins.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldUnavailablePluginMessageBeButton):
        (WebChromeClient::unavailablePluginButtonClicked):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove memoryInfoEnabled, quantizedMemoryInfoEnabled settings
        https://bugs.webkit.org/show_bug.cgi?id=117512

        Reviewed by Darin Adler.

        * WebKit.order: Remove the memoryInfoEnabled entry.
        * WebView/WebPreferenceKeysPrivate.h: Remove WebKitMemoryInfoEnabledPreferenceKey.
        * WebView/WebPreferences.mm: Remove memoryInfoEnabled, setMemoryInfoEnabled methods.
        (+[WebPreferences initialize]): Don't set the default value for the WebKitMemoryInfoEnabledPreferenceKey, the preference is being removed.
        * WebView/WebPreferencesPrivate.h: Remove memoryInfoEnabled, setMemoryInfoEnabled method declarations.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Remove the call to Settings::setMemoryInfoEnabled, the setting is being removed.

2013-06-06  Timothy Hatcher  <timothy@apple.com>

        Update the framework bundle identifier for the Web Inspector.

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebInspectorClient.mm:
        (useWebKitWebInspector):
        (WebInspectorFrontendClient::localizedStringsURL):
        (-[WebInspectorWindowController inspectorPagePath]):

2013-06-05  Bear Travis  <betravis@adobe.com>

        [CSS Exclusions][CSS Shapes] Split CSS Exclusions & Shapes compile & runtime flags
        https://bugs.webkit.org/show_bug.cgi?id=117172

        Reviewed by Alexandru Chiculita.

        Adding the CSS_SHAPES compile flag.

        * Configurations/FeatureDefines.xcconfig:

2013-06-01  Andreas Kling  <akling@apple.com>

        Remove unnused WebDOMNodeOperationsInternal category.
        <http://webkit.org/b/117105>

        Reviewed by Ryosuke Niwa.

        _subresourceURLs had no clients.

        * DOM/WebDOMOperations.mm:

2013-06-01  Andreas Kling  <akling@apple.com>

        Move Node::hasID() and hasClass() to Element.
        <http://webkit.org/b/117104>

        Reviewed by Ryosuke Niwa.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):

2013-05-31  Stephanie Lewis  <slewis@apple.com>

        Update low memory handler to use new memory pressure notifications on new OS versions.
        <rdar://problem/14027095> 

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2013-05-29  Jeffrey Pfau  <jpfau@apple.com>

        [Mac] Enable cache partitioning and the public suffix list on 10.8
        <rdar://problem/13679019>

        Rubber-stamped by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        Web Inspector: get rid of obsolete InspectorFrontendHost.hiddenPanels()
        https://bugs.webkit.org/show_bug.cgi?id=60152

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebInspectorClient.mm:

2013-05-28  Joseph Pecoraro  <pecoraro@apple.com>

        Drag to move DOM nodes does not work
        https://bugs.webkit.org/show_bug.cgi?id=116865

        Do not block drag events on the WebKit 1 Web Inspector WebView.

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.mm:

2013-05-28  Andreas Kling  <akling@apple.com>

        Document::setFocusedNode() should be setFocusedElement().
        <http://webkit.org/b/116857>

        Reviewed by Antti Koivisto.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView clearFocus]):
        (-[WebHTMLView becomeFirstResponder]):

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

        Remove Document::getFocusableNodes().
        <http://webkit.org/b/116773>

        Reviewed by Joseph Pecoraro.

        Remove the private _focusableNodes API on DOMDocument, it has no clients.

        * DOM/WebDOMOperations.mm:
        * DOM/WebDOMOperationsPrivate.h:

2013-05-25  Simon Fraser  <simon.fraser@apple.com>

        Unprefix Page Visibility API
        https://bugs.webkit.org/show_bug.cgi?id=102340

        Reviewed by Tim Horton.

        Renaming of the "preview" state to "unloaded".

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2013-05-25  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/13924889> -webView:didPerformClientRedirectFromURL:toURL:inFrame: should be given the redirecting URL as the “from” URL
        https://bugs.webkit.org/show_bug.cgi?id=116733

        Reviewed by Adele Peterson.

        By the time the history controller calls updateGlobalHistoryRedirectLinks(), the document
        loader already reflects the destination URL. In order to be able to provide the immediate
        source URL to the delegate, we make WebFrame track a URL and provisional URL, updating them
        in response to FrameLoader callbacks in exactly the same way WebFrameProxy maintains its
        m_url and m_provisionalURL member variables.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad): Update
        provisionalURL.
        (WebFrameLoaderClient::dispatchDidChangeLocationWithinPage): Update url.
        (WebFrameLoaderClient::dispatchDidPushStateWithinPage): Ditto.
        (WebFrameLoaderClient::dispatchDidReplaceStateWithinPage): Ditto.
        (WebFrameLoaderClient::dispatchDidPopStateWithinPage): Ditto.
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad): Update provisionalURL.
        (WebFrameLoaderClient::dispatchDidCommitLoad): Update URL and provisionalURL.
        (WebFrameLoaderClient::dispatchDidFailProvisionalLoad): Clear provisionalURL.
        (WebFrameLoaderClient::dispatchDidFailLoad): Added an assertion.
        (WebFrameLoaderClient::dispatchDidFinishLoad): Ditto.
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks): Pass the last committed URL as the
        source, rather than clientRedirectSourceForHistory().
        * WebView/WebFrameInternal.h: Added url and provisionalURL ivars to WebFramePrivate.

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

        Remove using namespace std from Mac WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=116747

        Reviewed by Sam Weinig.

        Use explicit std:: qualifiers instead.

        * History/BinaryPropertyList.cpp:
        (IntegerArray::deletedValueSize):
        (BinaryPropertyListPlan::invalidObjectReference):
        (bytesNeeded):
        * History/WebHistory.mm:
        (-[WebHistoryPrivate orderedLastVisitedDays]):
        (WebHistoryWriter::WebHistoryWriter):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::wheelEvent):
        (WebKit::NetscapePluginInstanceProxy::print):
        (WebKit::NetscapePluginInstanceProxy::snapshot):
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::supportsInvokeDefaultMethod):
        (WebKit::ProxyInstance::supportsConstruct):
        (WebKit::ProxyInstance::getPropertyNames):
        (WebKit::ProxyInstance::methodNamed):
        (WebKit::ProxyInstance::fieldNamed):
        (WebKit::ProxyInstance::fieldValue):
        (WebKit::ProxyInstance::setFieldValue):
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::deliverData):
        * Plugins/WebNetscapePluginView.mm:
        (PluginTimer::start):
        (-[WebNetscapePluginView _postURL:target:len:buf:file:notifyData:sendNotification:allowHeaders:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebFrame.mm:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _adjustedBottomOfPageWithTop:bottom:limit:]):
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _placePopupWindow:]):

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

        Move history property list writer to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116746

        Reviewed by Tim Horton.

        Move WebCore history files to WebKit since they're only used by WebKit now.

        * History/BinaryPropertyList.cpp: Renamed from Source/WebCore/platform/cf/BinaryPropertyList.cpp.
        * History/BinaryPropertyList.h: Renamed from Source/WebCore/platform/cf/BinaryPropertyList.h.
        * History/HistoryPropertyList.cpp: Renamed from Source/WebCore/history/cf/HistoryPropertyList.cpp.
        * History/HistoryPropertyList.h: Renamed from Source/WebCore/history/cf/HistoryPropertyList.h.
        * History/WebHistory.mm:

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

        Remove custom code for webkitAudioContext global constructor getter
        https://bugs.webkit.org/show_bug.cgi?id=116530

        Reviewed by Geoffrey Garen.

        Use RuntimeEnabledFeatures instead of Settings to toggle Web Audio support.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

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

        Crash in convertMainResourceLoadToDownload when downloading file by option-return
        https://bugs.webkit.org/show_bug.cgi?id=116451

        Reviewed by Andreas Kling.

        If the main resource loader is null, create a new download instead since there's no existing loader to convert.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):

2013-05-22  Simon Fraser  <simon.fraser@apple.com>

        Fix issues with focus rings on search fields
        https://bugs.webkit.org/show_bug.cgi?id=116591

        Reviewed by Darin Adler.
        
        In WebKit1, focus rings didn't render correctly on some OSes until
        some other control drew a focus ring, which changes internal AppKit state
        on the focused view. Fix by overriding an internal AppKit method to always
        disable AppKit's "automatic" focus ring drawing.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _automaticFocusRingDisabled]):

2013-05-20  David Kilzer  <ddkilzer@apple.com>

        Synchronize FeatureDefines.xcconfig

        * Configurations/FeatureDefines.xcconfig: Add a newline to the
        end of the file.

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

        Remove link prerendering code
        https://bugs.webkit.org/show_bug.cgi?id=116415

        Reviewed by Darin Adler.

        This code was only used by Chromium and is dead now.

        * Configurations/FeatureDefines.xcconfig:

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

        Remove ChromeClient::webView()
        https://bugs.webkit.org/show_bug.cgi?id=116054

        Reviewed by Darin Adler.

        This blatantly horrible layer violation was only used to know if a ChromeClient is an empty
        client or not. We already have a (slightly less horrible) way to do that.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

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

        Accessing null function pointers is bad.

        * WebCoreSupport/WebFrameLoaderClient.mm:

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

        Make kit(Frame*) more robust
        https://bugs.webkit.org/show_bug.cgi?id=116324

        Reviewed by Darin Adler.

        Check that the frame loader's client isn't the EmptyFrameLoaderClient (or a subclass thereof)
        before casting to WebFrameLoaderClient.

        * WebView/WebFrame.mm:
        (kit):

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

        Move the policy function to WebFramePolicyListener
        https://bugs.webkit.org/show_bug.cgi?id=116323

        Reviewed by Darin Adler.

        There's no need for the WebFrameLoaaderClient to hold on to the policy function,
        so move it to WebFramePolicyListener. This gets rid of another WebFrameLoaderClient cast.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::setUpPolicyListener):
        Pass the policy function when creating the WebFramePolicyListener object.

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

        WebFramePolicyListener should keep its Frame in a RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=116322

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (-[WebFramePolicyListener initWithWebCoreFrame:]):
        No need to ref the frame, the RefPtr does that for us.

        (-[WebFramePolicyListener invalidate]):
        Just set the frame to null.

        (-[WebFramePolicyListener dealloc]):
        Remove call to deref, that's done automatically now.

        (-[WebFramePolicyListener finalize]):
        Remove this method. (We could have kept it just for the assertion but I didn't think that was necessary).

        (-[WebFramePolicyListener receivedPolicyDecision:):
        Use release() to transfer ownership.

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

        Reduce number of WebFrameLoaderClient static casts in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=116320

        Reviewed by Antti Koivisto.

        We already have a function to return a WebFrame from a WebCore::Frame, use it.

        * DOM/WebDOMOperations.mm:
        (WebFrameFilter::shouldIncludeSubframe):
        * WebView/WebDataSource.mm:
        (-[WebDataSource webFrame]):

2013-05-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150034.
        http://trac.webkit.org/changeset/150034
        https://bugs.webkit.org/show_bug.cgi?id=116257

        This work around doesn't work due to another bug NSUndoManager
        has (Requested by rniwa on #webkit).

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::registerUndoOrRedoStep):

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

        PDFPlugins don't load when plugins are disabled, but they should
        https://bugs.webkit.org/show_bug.cgi?id=75790
        <rdar://problem/11650197>

        Reviewed by Anders Carlsson.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        Nothing loaded via WebBasePluginPackage or WebNetscapePluginPackage
        is an application plugin.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        Previously, this caller depended on pluginData() returning null if
        plug-ins were disabled. Since that is no longer the case, we have to
        check if we can use plug-ins, and otherwise ignore non-application-plug-ins.

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

        Page::chrome() should return a reference.
        <http://webkit.org/b/116185>

        Reviewed by Anders Carlsson.

2013-05-16  Dan Bernstein  <mitz@apple.com>

        -webView:updateHistoryTitle:forURL: does not pass a frame to the delegate
        https://bugs.webkit.org/show_bug.cgi?id=116243

        Reviewed by Anders Carlsson.

        Added a WebFrame parameter to the delegate method.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::setTitle): Pass the frame to the delegate. Maintain
        compatibility with clients that implement the old delegate method that
        doesn’t take a frame.
        * WebView/WebDelegateImplementationCaching.h:
        (WebHistoryDelegateImplementationCache): Added a field to cache the
        implementation of the old delegate method.
        * WebView/WebHistoryDelegate.h: Changed the signature of the delegate method.
        * WebView/WebView.mm:
        (-[WebView _cacheHistoryDelegateImplementations]): Cache the implementation
        of the new delegate method, but also check for the old one.

2013-05-16  Simon Fraser  <simon.fraser@apple.com>

        Re-land r150168 with some OS version guards.

        * WebView/WebFrameView.mm:
        (-[WebFrameView drawRect:]):
        (-[WebFrameView wantsUpdateLayer]):
        (-[WebFrameView updateLayer]):

2013-05-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150168.
        http://trac.webkit.org/changeset/150168
        https://bugs.webkit.org/show_bug.cgi?id=116214

        broke the world on Mountain Lion (Requested by thorton on
        #webkit).

        * WebView/WebFrameView.mm:
        (-[WebFrameView drawRect:]):

2013-05-15  Simon Fraser  <simon.fraser@apple.com>

        Avoid backing store for the WebFrameView's layer when the WebView is layer-backed
        https://bugs.webkit.org/show_bug.cgi?id=116172

        Reviewed by Tim Horton.

        When the WebView is layer-backed, AppKit will create a layer with backing store for
        the WebFrameView because it implements drawRect:. However, this method only paints
        when there is no documentView, so this layer’s backing store is wasteful.

        We can avoid allocation of this backing store by implementing -wantsUpdateLayer
        and -updateLayer, and setting the view’s backgroundColor.

        * WebView/WebFrameView.mm:
        (-[WebFrameView wantsUpdateLayer]):
        (-[WebFrameView updateLayer]):

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

        Frame::editor() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=116037

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _selectedString]):
        (-[WebFrame _firstRectForDOMRange:]):
        (-[WebFrame _markDOMRange]):
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]):
        (-[WebFrame _setTypingStyle:withUndoAction:]):
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        (-[WebHTMLView _shouldDeleteRange:]):
        (-[WebHTMLView _canEdit]):
        (-[WebHTMLView _canEditRichly]):
        (-[WebHTMLView _insertOrderedList]):
        (-[WebHTMLView _insertUnorderedList]):
        (-[WebHTMLView _canIncreaseSelectionListLevel]):
        (-[WebHTMLView _canDecreaseSelectionListLevel]):
        (-[WebHTMLView _increaseSelectionListLevel]):
        (-[WebHTMLView _increaseSelectionListLevelOrdered]):
        (-[WebHTMLView _increaseSelectionListLevelUnordered]):
        (-[WebHTMLView _decreaseSelectionListLevel]):
        (-[WebHTMLView Editor::coreCommandBySelector:]):
        (-[WebHTMLView Editor::coreCommandByName:]):
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebHTMLView becomeFirstResponder]):
        (-[WebHTMLView _selectionStartFontAttributesAsRTF]):
        (-[WebHTMLView _applyStyleToSelection:withUndoAction:]):
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        (-[WebHTMLView checkSpelling:]):
        (-[WebHTMLView showGuessPanel:]):
        (-[WebHTMLView toggleBaseWritingDirection:]):
        (-[WebHTMLView changeBaseWritingDirection:]):
        (-[WebHTMLView _changeBaseWritingDirectionTo:]):
        (-[WebHTMLView _updateFontPanel]):
        (-[WebHTMLView markedRange]):
        (-[WebHTMLView hasMarkedText]):
        (-[WebHTMLView unmarkText]):
        (-[WebHTMLView setMarkedText:selectedRange:]):
        (-[WebHTMLView doCommandBySelector:]):
        (-[WebHTMLView insertText:]):
        (-[WebHTMLView _updateSelectionForInputManager]):
        (-[WebHTMLView countMatchesForText:inDOMRange:options:limit:markMatches:]):
        (-[WebHTMLView setMarkedTextMatchesAreHighlighted:]):
        (-[WebHTMLView markedTextMatchesAreHighlighted]):
        (-[WebHTMLView _findString:options:]):
        * WebView/WebView.mm:
        (-[WebView _executeCoreCommandByName:value:]):
        (-[WebView editableDOMRangeForPoint:]):
        (-[WebView setEditable:]):
        (-[WebView deleteSelection]):
        (-[WebView applyStyle:]):
        (-[WebView typingAttributes]):
        (-[WebView _simplifyMarkup:endNode:]):
        (-[WebView handleAcceptedAlternativeText:]):

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

        [Mac] Remove the ClipboardMac class and header file
        https://bugs.webkit.org/show_bug.cgi?id=116165

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebDragClient.mm: Import Clipboard.h instead of ClipboardMac.h.

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

        [Mac] Thin out the ClipboardMac class and header file to prepare for deleting them
        https://bugs.webkit.org/show_bug.cgi?id=116159

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::willPerformDragSourceAction): Changed to get the pasteboard name
        without going through the ClipboardMac class.
        (WebDragClient::startDrag): Ditto.

2013-05-14  Beth Dakin  <bdakin@apple.com>

        Printing in 1Password app is broken with screen fonts disabled
        https://bugs.webkit.org/show_bug.cgi?id=116133
        -and corresponding-
        <rdar://problem/13162981>

        Reviewed by Anders Carlsson.

        Return YES from [WebPreferences screenFontSubstitutionEnabled] for versions of the 
        1Password app that were linked on or before MountainLion.

        * WebView/WebPreferences.mm:
        (needsScreenFontsEnabledQuirk):
        (-[WebPreferences screenFontSubstitutionEnabled]):

2013-05-13  Dan Bernstein  <mitz@apple.com>

        Make -[WebNavigationData url] the destination of the navigation
        https://bugs.webkit.org/show_bug.cgi?id=114904

        Reviewed by Dave Kilzer.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Initialize the WebNavigationData with the
        current URL, not the original request URL.

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

        Remove ChromeClient::willPopupMenu
        https://bugs.webkit.org/show_bug.cgi?id=116063

        Reviewed by Andreas Kling.

        ChromeClient::willPopupMenu is only called in one place from WebKit, so just move the function to the call site.

        * WebCoreSupport/PopupMenuMac.mm:
        (PopupMenuMac::show):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

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

        Add support for updating the Web Inspector toolbar height.

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

        Reviewed by Joseph Pecoraro and Benjamin Poulain.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::setToolbarHeight):

2013-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        Sometimes NSUndoManager can get into an inconsistent state
        https://bugs.webkit.org/show_bug.cgi?id=116050

        Reviewed by Enrica Casucci.

        Always group undo items to work around a bug in NSUndoManager that manifests
        when we call removeAllActionsWithTarget.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::registerUndoOrRedoStep):

2013-05-13  Zalan Bujtas  <zalan@apple.com>

        WebProcess consuming very high CPU on linkedin.com
        https://bugs.webkit.org/show_bug.cgi?id=115601

        Reviewed by Andreas Kling.

        Disable WEB_TIMING_MINIMAL.
        Turn off window.performance and performance.now(). Some JS frameworks expect
        additional Web Timing APIs, when performance.now() is available.

        * Configurations/FeatureDefines.xcconfig:

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

        [Mac] Layer-backed WebViews draw their background color even when setDrawsBackground:NO was called
        https://bugs.webkit.org/show_bug.cgi?id=116014
        <rdar://problem/12781227>

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]): Remove calls to setBackgroundColor: and
        setDrawsBackground: on the document view. These were added to support a hypothetical document view
        that wanted to draw its background like WebHTMLView does, but this was never communicated as a
        document view protocol, formal or informal, and it's unlikely that it was ever used. The bug was
        caused because there is an -[NSView setDrawsBackground:] method, probably an internal one, and we
        were calling it unintentionally on a WebHTMLView.

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

        Stop including UnusedParam.h
        https://bugs.webkit.org/show_bug.cgi?id=116003

        Reviewed by Sam Weinig.

        UnusedParam.h is empty now so there's no need to include it anymore.

        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        * WebView/WebDashboardRegion.mm:
        * WebView/WebFullScreenController.mm:

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

        Unload event listeners should prevent Safari from insta-killing the web process on last tab close.
        <http://webkit.org/b/115988>
        <rdar://problem/13870943>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::enableSuddenTermination):
        (WebChromeClient::disableSuddenTermination):

2013-05-10  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: Implement WK2 version of WebInspectorFrontendClient::save
        https://bugs.webkit.org/show_bug.cgi?id=115564

        Reviewed by Benjamin Poulain.

        Clean up save() and append() implementations.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::save):
        (WebInspectorFrontendClient::append):

2013-05-10  Laszlo Gombos  <l.gombos@samsung.com>

        Remove Mac OS X Leopard (10.5) support
        https://bugs.webkit.org/show_bug.cgi?id=107964

        Reviewed by Ryosuke Niwa.

        Removed the code for 10.5 and removed if-def for 10.6.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * Misc/WebKitErrors.m:
        (-[NSError _initWithPluginErrorCode:contentURL:pluginPageURL:pluginName:MIMEType:]):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebClipView.mm:
        (-[WebClipView _immediateScrollToPoint:]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]):
        * WebView/WebView.mm:

2013-05-07  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13633007> WebKit and others fail to build headers due to build root dependency

        Reviewed by Sam Weinig.

        * Configurations/WebKit.xcconfig: Look for WebCore's headers within the SDK if we're building against one.

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

        HashTraits<RefPtr<P> >::PeekType should be raw pointer for better performance
        https://bugs.webkit.org/show_bug.cgi?id=115646

        Reviewed by Darin Adler.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::pluginInstance):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::cancelStreamLoad):
            Updated accordingly to new HashMap<.., RefPtr>::get() semantics.

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

        Animations and Transitions should not start when globally suspended
        https://bugs.webkit.org/show_bug.cgi?id=114915

        Reviewed by Sam Weinig.

        The WebView private API cssAnimationsSuspended did not necessarily
        reflect the reality of the Frame's AnimationController value because it
        was caching rather than asking directly. While the WebCore part of this
        patch ensured loading the Document wouldn't resume all animations, it
        is still better to ask directly.

        * WebView/WebView.mm:
        (-[WebView cssAnimationsSuspended]): Call into AnimationController.
        (-[WebView setCSSAnimationsSuspended:]): Ditto.
        * WebView/WebViewData.h: Remove cssAnimationsSuspended boolean.
        * WebView/WebViewData.mm: Ditto.
        (-[WebViewPrivate init]):

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

        Move PopupMenuMac and SearchPopupMenuMac to Source/WebKit/mac
        matching where they are in WebKit2.

        Reviewed by Anders Carlsson.

        * WebCoreSupport/PopupMenuMac.h: Copied from WebCore/platform/mac/PopupMenuMac.h.
        * WebCoreSupport/PopupMenuMac.mm: Copied from WebCore/platform/mac/PopupMenuMac.mm.
        * WebCoreSupport/SearchPopupMenuMac.h: Copied from WebCore/platform/mac/SearchPopupMenuMac.h.
        * WebCoreSupport/SearchPopupMenuMac.mm: Copied from WebCore/platform/mac/SearchPopupMenuMac.mm.
        * WebCoreSupport/WebChromeClient.mm:

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

        Get rid of -[NSMutableDictionary _webkit_setObject:forUncopiedKey:]
        https://bugs.webkit.org/show_bug.cgi?id=115592

        Reviewed by Beth Dakin.

        Using CFDictionarySetValue to set a key without having to copy it is not supported. Use NSMapTable with strong pointers instead.

        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        * Panels/WebPanelAuthenticationHandler.h:
        (NSURLAuthenticationChallenge):
        * Panels/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler init]):
        (-[WebPanelAuthenticationHandler enqueueChallenge:forWindow:]):
        (-[WebPanelAuthenticationHandler tryNextChallengeForWindow:]):
        (-[WebPanelAuthenticationHandler startAuthentication:window:]):
        (-[WebPanelAuthenticationHandler cancelAuthentication:]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView destroyPlugin]):
        (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebNetscapePluginView loadPluginRequest:]):

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] WebKit doesn't enable or disable autocorrections when system preferences are changed
        https://bugs.webkit.org/show_bug.cgi?id=115463

        Reviewed by Darin Adler.

        Observe the default notification center for changes to autocorrection preferences.
        Note system preferences may also update WebAutomatic* defaults.

        * WebView/WebView.mm:
        (+[WebView initialize]):
        (+[WebView _shouldAutomaticTextReplacementBeEnabled]):
        (+[WebView _didChangeAutomaticTextReplacementEnabled:]):
        (+[WebView _shouldAutomaticSpellingCorrectionBeEnabled]):
        (+[WebView _didChangeAutomaticSpellingCorrectionEnabled:]):
        (+[WebView _shouldAutomaticQuoteSubstitutionBeEnabled]):
        (+[WebView _shouldAutomaticDashSubstitutionBeEnabled]):
        (+[WebView _didChangeAutomaticQuoteSubstitutionEnabled:]):
        (+[WebView _didChangeAutomaticDashSubstitutionEnabled:]):

2013-05-01  Benjamin Poulain  <bpoulain@apple.com>

        Fix the function names of r149453

        Unreviewed.

        I forgot to follow one of Darin's review comment. This patch
        fixes the function names to follow CF naming conventions.

        * WebView/WebHTMLRepresentation.mm:
        (newArrayWithStrings):
        (newArrayByConcatenatingArrays):
        (+[WebHTMLRepresentation supportedMIMETypes]):
        (+[WebHTMLRepresentation supportedNonImageMIMETypes]):
        (+[WebHTMLRepresentation supportedImageMIMETypes]):
        (+[WebHTMLRepresentation unsupportedTextMIMETypes]):

2013-05-01  Benjamin Poulain  <benjamin@webkit.org>

        Simplify WebHTMLRepresentation supportedMIMETypes methods
        https://bugs.webkit.org/show_bug.cgi?id=115314

        Reviewed by Darin Adler.

        The initialization was surprisingly complex because of DEFINE_STATIC_LOCAL.
        First, a new pointer was allocated on the heap with fast malloc (for RetainPtr<NSArray>).
        Then a new NSMutableArray was allocated but immediately put on the autorelease pool.
        Finally, that array was retained by the RetainPtr.

        This patch changes the code to only leak the NSMutableArray memory. There
        is no fastMalloc, nor any use of the autorelease pool.

        * WebView/WebHTMLRepresentation.mm:
        (createArrayWithStrings):
        (createArrayByConcatenatingArrays):
        (+[WebHTMLRepresentation supportedMIMETypes]):
        (+[WebHTMLRepresentation supportedNonImageMIMETypes]):
        (+[WebHTMLRepresentation supportedImageMIMETypes]):
        (+[WebHTMLRepresentation unsupportedTextMIMETypes]):

2013-04-30  Darin Adler  <darin@apple.com>

        [Mac] Remove adoptNS/retain pairs, since the two cancel each other out
        https://bugs.webkit.org/show_bug.cgi?id=115426

        Reviewed by Anders Carlsson.

        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::deliverDataToFile): Remove adoptNS and release.

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

        Objective-C JavaScriptCore API should publicly support bridging to C
        https://bugs.webkit.org/show_bug.cgi?id=115447

        Reviewed by Mark Hahnenberg.

        * WebView/WebFrame.mm:
        (-[WebFrame _javaScriptContextForScriptWorld:]):
        * WebView/WebScriptWorld.mm:
        (+[WebScriptWorld scriptWorldForJavaScriptContext:]):

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

        More StorageTracker cleanup
        https://bugs.webkit.org/show_bug.cgi?id=115429

        Reviewed by Andreas Kling.

        Call PageGroup::syncLocalStorage directly.

        * Storage/WebStorageManager.mm:
        (-[WebStorageManager syncLocalStorage]):

2013-04-30  Zalan Bujtas  <zalan@apple.com>

        Animations fail to start on http://www.google.com/insidesearch/howsearchworks/thestory/
        https://bugs.webkit.org/show_bug.cgi?id=111244

        Reviewed by David Kilzer.
        
        Enable performance.now() as a minimal subset of Web Timing API. 
        It returns DOMHighResTimeStamp, a monotonically increasing value representing the 
        number of milliseconds from the start of the navigation of the current document.
        JS libraries use this API to check against the requestAnimationFrame() timestamp.

        * Configurations/FeatureDefines.xcconfig:

2013-04-29  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: need to identify the default voice per language
        https://bugs.webkit.org/show_bug.cgi?id=115366

        Reviewed by Tim Horton.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        [Mac] Disable canvas backing store scaling (HIGH_DPI_CANVAS)
        https://bugs.webkit.org/show_bug.cgi?id=115310

        Reviewed by Simon Fraser.

        Remove ENABLE_HIGH_DPI_CANVAS_macosx.

        * Configurations/FeatureDefines.xcconfig:

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

        Move from constructor and member function adoptCF/NS to free function adoptCF/NS.
        https://bugs.webkit.org/show_bug.cgi?id=115307

        Reviewed by Geoffrey Garen.

        This change was done by a global replace followed by compiling and inspecting for
        cases that needed to be tweaked by hand.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
        * Misc/WebNSFileManagerExtras.mm:
        (-[NSFileManager _webkit_startupVolumeName]):
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::beginModal):
        (WKPCBooleanAndDataReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::print):
        (WebKit::NetscapePluginInstanceProxy::snapshot):
        (WebKit::NetscapePluginInstanceProxy::status):
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript):
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::marshalValue):
        (WebKit::NetscapePluginInstanceProxy::marshalValues):
        (WebKit::NetscapePluginInstanceProxy::demarshalValue):
        (WebKit::NetscapePluginInstanceProxy::demarshalValues):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebBaseNetscapePluginView cacheSnapshot]):
        (WebKit::getAuthenticationInfo):
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::startTimers):
        * Plugins/WebNetscapePluginEventHandlerCocoa.mm:
        (WebNetscapePluginEventHandlerCocoa::syntheticKeyDownWithCommandModifier):
        (WebNetscapePluginEventHandlerCocoa::handleTSMEvent):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _initWithPath:]):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        (WebNetscapePluginStream::deliverData):
        (WebNetscapePluginStream::deliverDataToFile):
        (WebNetscapePluginStream::didReceiveData):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        (-[WebNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
        * Storage/WebDatabaseManagerClient.mm:
        (WebDatabaseManagerClient::dispatchDidModifyOrigin):
        (WebDatabaseManagerClient::dispatchDidModifyDatabase):
        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::dispatchDidModifyOrigin):
        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::handleAcceptedReplacement):
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache originsWithCache]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullScreen:]):
        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument):
        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences initWithCoder:]):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::initGlobalCallFrame):
        (WebScriptDebugger::callEvent):
        * WebView/WebView.mm:
        (-[WebView previousValidKeyView]):
        Use adoptNS and adoptCF free functions.

2013-04-25  Roger Fong  <roger_fong@apple.com>

        Disable sub-pixel layout on mac.
        https://bugs.webkit.org/show_bug.cgi?id=114999.

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        Layer-backed WebViews don't repaint content outside the visible area
        https://bugs.webkit.org/show_bug.cgi?id=115275

        Reviewed by Beth Dakin.

        When a client of WebView makes the WebView be layer-backed, then
        AppKit propagaes the layer-backing down to the WebHTMLView (but
        no further).
        
        In this situation, we had a bug where content that was not
        in the visible content rect would not get repainted, because
        WebCore clips repaints to the visible rect.
        
        Fix by calling ScrollView::setPaintsEntireContents(bool) from
        -[WebHTMLView setLayer:], saying that we need
        to paint the entire contents if we have a layer.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView setLayer:]):

2013-04-25  Chris Fleizach  <cfleizach@apple.com>

        WEB SPEECH: language support does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=115119

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Build fix for smart compliers.

        Reviewed by Tim Horton.
        
        [NSDictionary dictionaryWithObjectsAndKeys:] returns an NSDictionary,
        not a NSMutableDictionary.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::updateSpellingUIWithGrammarString):

2013-04-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ConsoleMessage should include line and column number where possible
        https://bugs.webkit.org/show_bug.cgi?id=114929

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::addMessageToConsole):

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

        Assertion failure (crash in release) attempting to delete database storage in WK1 without
        creating a WebView first
        https://bugs.webkit.org/show_bug.cgi?id=115065

        Reviewed by Brady Eidson.

        Make sure the WebPlatformStrategies is initialized before using the WebDatabaseManager.

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager init]):
        Move the logic from WebKitInitializeDatabasesIfNecessary here, and add a call to
        WebPlatformStrategies::initializeIfNecessary.

        * Storage/WebDatabaseManagerInternal.h: Removed.

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        Change "initialize" to "initalizeIfNecessary".
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::initializeIfNecessary):
        Only call setPlatformStrategies once.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Updated for the name change from initialize to initializeIfNecessary.
        Instead of calling WebKitInitializeDatabasesIfNecessary, call [WebDatabaseManager
        sharedWebDatabaseManager].
        (+[WebView _setLoadResourcesSerially:]):
        Updated for the name change from initialize to initializeIfNecessary.

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

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

        Reviewed by Darin Adler.

        Adding support for new method CTRunGetInitialAdvance in WebKitSystemInterface.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Remove the memory instrumentation code
        https://bugs.webkit.org/show_bug.cgi?id=114931

        Reviewed by Andreas Kling.

        * WebView/WebRenderLayer.mm:

2013-04-18  Andy Estes  <aestes@apple.com>

        REGRESSION (r116645): Versions app's UI is munged in HiDPI due to background-size being reset to 'auto' when background short-hand is also specified
        https://bugs.webkit.org/show_bug.cgi?id=114833

        Reviewed by David Kilzer.

        The Versions app specifies both a background-size and a background
        shorthand CSS property, and its UI is broken after r116645 which resets
        background-size to 'auto' if the background shorthand property is
        specified.

        This patch enables the useLegacyBackgroundSizeShorthandBehavior setting
        added in r147034 to restore the expected behavior if the embedder is
        Versions.app and it was linked against a version of WebKit that had the
        legacy behavior.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (shouldUseLegacyBackgroundSizeShorthandBehavior):
        (-[WebView _commonInitializationWithFrameName:groupName:]):

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

        Network Process crashing trying to read in IDNScriptWhiteList.txt
        https://bugs.webkit.org/show_bug.cgi?id=114827

        Reviewed by Anders Carlsson.

        Move IDNScriptWhiteList.txt from WebKit to WebCore, so that the NetworkProcess does not have to link against
        WebKit. It was a layering violation for WebCore to be trying to access WebKit resources anyway.

        * Resources/IDNScriptWhiteList.txt: Removed.

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

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

        Reviewed by Phil Pizlo.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectsCount]):
        (+[WebCoreStatistics javaScriptGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedGlobalObjectsCount]):
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptObjectTypeCounts]):
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):
        (+[WebCoreStatistics memoryStatistics]):
        (+[WebCoreStatistics javaScriptReferencedObjectsCount]):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (identifierFromIdentifierRep):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (LocalObjectMap):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::createStructure):
        (WebKit::ProxyRuntimeMethod::finishCreation):
        (WebKit::ProxyInstance::getPropertyNames):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::create):
        (WebKit::ProxyRuntimeObject::createStructure):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::wantsAllStreams):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):
        (-[WebNetscapePluginView privateBrowsingModeDidChange]):
        (-[WebNetscapePluginView setWindowIfNecessary]):
        (-[WebNetscapePluginView createPluginScriptableObject]):
        (-[WebNetscapePluginView getFormValue:]):
        (-[WebNetscapePluginView evaluateJavaScriptPluginRequest:]):
        (-[WebNetscapePluginView webFrame:didFinishLoadWithReason:]):
        (-[WebNetscapePluginView loadPluginRequest:]):
        (-[WebNetscapePluginView _printedPluginBitmap]):
        * Plugins/WebPluginController.mm:
        (+[WebPluginController plugInViewWithArguments:fromPluginPackage:]):
        (-[WebPluginController stopOnePlugin:]):
        (-[WebPluginController destroyOnePlugin:]):
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController addPlugin:]):
        * WebKit.order:
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):

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

        Re-name Page::layoutMilestones() to Page::requestedLayoutMilestones()
        https://bugs.webkit.org/show_bug.cgi?id=114713

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (-[WebView _layoutMilestones]):

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

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

        Reviewed by Anders Carlsson.

        * WebView/WebFrame.mm:
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebView.mm:

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

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

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebAlternativeTextClient.h:
        * WebCoreSupport/WebAlternativeTextClient.mm:
        * WebView/WebView.mm:
        * WebView/WebViewInternal.h:

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

        REGRESSION(r146025): WebKit applications can't apply underline or strike through
        https://bugs.webkit.org/show_bug.cgi?id=114662

        Reviewed by Enrica Casucci.

        Use -webkit- prefixes to apply underline. There should be no further compatibility issues
        since -khtml- was used only internally to pass the information down to WebCore.

        Unfortunately, we can't test this code like any other font panel bug.

        In the long run, we need to add some abstraction layer around font panel to make this testable
        or else we'll keep regressing this feature.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _styleFromFontAttributes:]):
        (-[WebHTMLView _styleForAttributeChange:]):

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

        plugins/get-url-beforeunload-destroys-plugin.html crashes in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=114653
        <rdar://problem/13659541>

        Reviewed by Sam Weinig.

        Protect the NetscapePluginInstanceProxy since it can otherwise go away.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::performRequest):

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

        Move Mac specific snapshotting code into its own file
        https://bugs.webkit.org/show_bug.cgi?id=114597

        Reviewed by Andreas Kling.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionDraggingImage]):
        (-[WebHTMLView selectionImageForcingBlackText:]):

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

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

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldApplyStyle):
        * WebView/WebFrame.mm:
        (-[WebFrame _typingStyle]):

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

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

        Reviewed by Dean Jackson.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        * Plugins/WebNetscapePluginStream.mm:
        * Plugins/WebPluginContainerCheck.mm:
        * WebCoreSupport/WebGeolocationClient.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebView/WebFrame.mm:

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

        Add form delegate method that's invoked right before sending a submit event to a form element
        https://bugs.webkit.org/show_bug.cgi?id=114575

        Reviewed by Dan Bernstein.

        * MigrateHeaders.make:
        Copy DOMHTMLFormElementInternal.h over to WebKit.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (makeFormFieldValuesDictionary):
        New helper function that returns the values of a form in dictionary form.

        (WebFrameLoaderClient::dispatchWillSendSubmitEvent):
        Call the right delegate method.

        (WebFrameLoaderClient::dispatchWillSubmitForm):
        Use the helper function.

        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        (CallFormDelegate):
        Add another overload.

        * WebView/WebFormDelegate.h:
        * WebView/WebFormDelegate.m:
        (-[WebFormDelegate willSendSubmitEventToForm:inFrame:withValues:]):
        Add a default implementation.

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

        Mass remove all the empty directories

        Rubberstamped by Ryosuke Niwa.

        * ForwardingHeaders/wtf/unicode/icu: Removed.

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

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

        Reviewed by Geoffrey Garen.

        Include HistoryController.h from WebCore.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebView.mm:

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

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

        Reviewed by Alexey Proskuryakov.

        This mechanism hasn't worked for a while.

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

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):

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

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

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

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

        Stop building Objective-C bindings for the SVG DOM
        https://bugs.webkit.org/show_bug.cgi?id=114076

        Reviewed by Geoffrey Garen.

        The DOM SVG Objective-C bindings have never been exposed as API, and not building them cuts WebCore build by 10%.

        * Configurations/FeatureDefines.xcconfig:
        * MigrateHeaders.make:

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

        Allow the Web Inspector to use WebSQL.

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

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

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Added.

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

        Provide a user default that can be used to disable docking of the Web Inspector.

        The user default is "WebKit Web Inspector Setting - inspectorAttachDisabled".

        https://webkit.org/b/113779
        rdar://problem/13446021

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient::inspectorAttachDisabled): Added.
        (WebInspectorClient::setInspectorAttachDisabled): Added.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::didResizeMainFrame):
        (-[WebInspectorWindowController window]):
        (-[WebInspectorWindowController showWindow:]):
        Check inspectorAttachDisabled() in places where we attach or update the dock button.

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

        [Mac] Remove WKCreateNSURLConnectionDelegateProxy
        https://bugs.webkit.org/show_bug.cgi?id=113810

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        <rdar://problem/13551119> [WK2] Crashes in NetworkProcess when canceling loads
        https://bugs.webkit.org/show_bug.cgi?id=113803

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):
        Just pass nil instead of proxy.

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

        WebKit/mac shouldn't have code for Mac 10.5 and earlier
        https://bugs.webkit.org/show_bug.cgi?id=113746

        Reviewed by Darin Adler.

        Deleted the code for 10.5 and removed if-defs for 10.6.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):
        (-[WebNetscapePluginView _workaroundSilverlightFullscreenBug:]):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection):
        * WebCoreSupport/WebEditorClient.mm:
        (core):
        (WebEditorClient::checkTextOfParagraph):
        (WebEditorClient::requestCheckingOfString):
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _updateMenuAndDockForFullScreen]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:inContext:allowPlainText:]):
        (-[WebHTMLView _frameOrBoundsChanged]):
        (+[WebHTMLView _insertablePasteboardTypes]):
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        (writingDirectionKeyBindingsEnabled):
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView attachRootLayer:]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebPDFDocumentExtras.mm:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebResourceInternal.h:
        * WebView/WebScriptDebugDelegate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _preferencesChanged:]):
        (+[WebView initialize]):
        (clientNeedsWebViewInitThreadWorkaround):
        (-[WebView validateUserInterfaceItemWithoutDelegate:]):
        (-[WebView setGrammarCheckingEnabled:]):
        (-[WebView isAutomaticQuoteSubstitutionEnabled]):
        (-[WebView isAutomaticLinkDetectionEnabled]):
        (-[WebView isAutomaticDashSubstitutionEnabled]):
        (-[WebView isAutomaticTextReplacementEnabled]):
        (-[WebView isAutomaticSpellingCorrectionEnabled]):
        (-[WebView _searchWithSpotlightFromMenu:]):
        (WebInstallMemoryPressureHandler):
        * WebView/WebViewPrivate.h:

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

        WebCache should do the normal initialization dance
        https://bugs.webkit.org/show_bug.cgi?id=113722
        <rdar://problem/13424530>

        Reviewed by Anders Carlsson.

        In case a WebKit1 client uses WebCache before creating a WebView (or any of the other
        initialization-ready classes), we should do the initialization work in WebCache as well.

        * Misc/WebCache.mm:
        (+[WebCache initialize]):

2013-03-26  Timothy Hatcher  <timothy@apple.com>

        Add support for dock-to-right of the Web Inspector in the Mac port.

        Unfortunately this requires Safari changes, so it is disabled in the nightly builds.

        https://webkit.org/b/113341
        rdar://problem/10368152

        Reviewed by Joseph Pecoraro.

        * Resources/Dock.pdf: Updated.
        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorFrontendClient):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::frontendLoaded):
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::setAttachedWindowWidth):
        (-[WebInspectorWindowController attachWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):
        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend attach]):

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

        Unreviewed attempted cr-mac build fix.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2013-03-26  Hayato Ito  <hayato@chromium.org>

        Allow ShadowContents in HitTests by default.
        https://bugs.webkit.org/show_bug.cgi?id=113171

        Reviewed by Dimitri Glazkov.

        * WebView/WebFrame.mm:
        (-[WebFrame elementAtPoint:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView elementAtPoint:allowShadowContent:]):

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

        [ca] Tell CA to clean up unused resources if a given WebProcess won't be drawing
        https://bugs.webkit.org/show_bug.cgi?id=107539
        <rdar://problem/13032692>

        Reviewed by Simon Fraser.

        Update WebSystemInterface.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2013-03-26  Sergio Villar Senin  <svillar@igalia.com>

        Implement overtype mode for editable content
        https://bugs.webkit.org/show_bug.cgi?id=112126

        Reviewed by Ryosuke Niwa.

        Added the OverWrite editing command to the WebCore editing
        commands lists.

        * WebView/WebHTMLView.mm:
        * WebView/WebView.h:
        * WebView/WebView.mm:

2013-03-25  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_INPUT_TYPE_DATETIME
        https://bugs.webkit.org/show_bug.cgi?id=113254

        Reviewed by Kentaro Hara.

        Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
        Actually I'd like to remove the code, but we shouldn't remove it yet
        because we shipped products with it on some platforms.

        * Configurations/FeatureDefines.xcconfig:

2013-03-21  Kiran Muppala  <cmuppala@apple.com>

        Add runtime setting for hidden page DOM timer throttling and CSS animation suspension
        https://bugs.webkit.org/show_bug.cgi?id=112308

        Reviewed by Gavin Barraclough.

        Add private preference for enabling/disabling hidden page DOM timer
        throttling and CSS animation suspension.  The preference should be
        disabled by default to avoid compatibility issues.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences hiddenPageDOMTimerThrottlingEnabled]):
        (-[WebPreferences setHiddenPageDOMTimerThrottlingEnabled:]):
        (-[WebPreferences hiddenPageCSSAnimationSuspensionEnabled]):
        (-[WebPreferences setHiddenPageCSSAnimationSuspensionEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2013-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Another Mac build fix attempt after r146239.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext):

2013-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix attempt after r146239.

        * WebCoreSupport/WebFrameNetworkingContext.h:

2013-03-19  Sergey Ryazanov  <serya@chromium.org>

        Web Inspector: split Console into two entities, a web-facing bound object and page console.
        https://bugs.webkit.org/show_bug.cgi?id=111578

        Reviewed by Vsevolod Vlasov.

        Otherwise, a lot of logging in WebCore needs to go through the DOMWindow which is unnecessary.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics shouldPrintExceptions]):
        (+[WebCoreStatistics setShouldPrintExceptions:]):

2013-03-17  Adam Barth  <abarth@webkit.org>

        Legacy CSS vendor prefixes should only work for Dashboard
        https://bugs.webkit.org/show_bug.cgi?id=111890

        Reviewed by Eric Seidel.

        Enable legacy CSS vendor prefixes when we've been asked to turn on
        Dashboard compatibility mode.

        * WebView/WebView.mm:
        (-[WebView _setDashboardBehavior:to:]):

2013-03-16  Pratik Solanki  <psolanki@apple.com>

        Disable High DPI Canvas on iOS
        https://bugs.webkit.org/show_bug.cgi?id=112511

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

2013-03-15  Timothy Hatcher  <timothy@apple.com>

        Disable suppressesIncrementalRendering for the Web Inspector.

        This ends up causing the Inspector to show blank for a couple seconds before
        it does its first paint. During that time the bare window chrome is showing
        when the Inspector's background and other simple elements count be painting.
        This causes the Inspector to look like it is loading slower than reality.

        https://bugs.webkit.org/show_bug.cgi?id=112300
        rdar://problem/13412219
 
        Reviewed by Geoff Garen.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]): Disable suppressesIncrementalRendering.

2013-03-15  Nate Chapin  <japhet@chromium.org>

        Hide MainResourceLoader from the outside world
        https://bugs.webkit.org/show_bug.cgi?id=109971

        Reviewed by Adam Barth.

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):

2013-03-15  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112401

        Reviewed by Stephen Chenney.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebView/WebRenderNode.mm:
        (copyRenderNode):
        * WebView/WebView.mm:
        (-[WebView _addScrollerDashboardRegionsForFrameView:dashboardRegions:]):

2013-03-14  Manuel Rego Casasnovas  <rego@igalia.com>

        Add selectTrailingWhitespaceEnabled setting to WebCore::Page
        https://bugs.webkit.org/show_bug.cgi?id=109404

        Reviewed by Tony Chang.

        Use new settings for smartInsertDeleteEnabled and
        selectTrailingWhitespaceEnabled.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::smartInsertDeleteEnabled):
        (WebEditorClient::isSelectTrailingWhitespaceEnabled):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]): Initialize
        settings from NSUserDefaults.
        (-[WebView setSelectTrailingWhitespaceEnabled:]):
        (-[WebView isSelectTrailingWhitespaceEnabled]):
        (-[WebView setSmartInsertDeleteEnabled:]):
        (-[WebView smartInsertDeleteEnabled]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):

2013-03-14  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112296

        Reviewed by Kentaro Hara.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (applyAppleDictionaryApplicationQuirkNonInlinePart):
        * WebView/WebHTMLRepresentation.mm:
        (searchForLabelsBeforeElement):

2013-03-14  Alice Liu  <alice.liu@apple.com>

        Add to HistoryItem a way to know if its underlying CachedPage has expired.
        https://bugs.webkit.org/show_bug.cgi?id=110652

        Reviewed by Brady Eidson.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem _isInPageCache]): Added. Just calls and returns core imple's function. 
        (-[WebHistoryItem _hasCachedPageExpired]): Same thing. 
        * History/WebHistoryItemPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences _backForwardCacheExpirationInterval]): Address fixme, now that WebCore::Settings
        has getters and setters with default value.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): call setBackForwardCacheExpirationInterval similar to other settings.

2013-03-13  Rik Cabanier  <cabanier@adobe.com>

        create runtime flags for CSS Compositing
        https://bugs.webkit.org/show_bug.cgi?id=111818

        Reviewed by Ryosuke Niwa.

        Added a preference to enable CSS compositing.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences cssCompositingEnabled]):
        (-[WebPreferences setCSSCompositingEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2013-03-13  Ryosuke Niwa  <rniwa@webkit.org>

        Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
        https://bugs.webkit.org/show_bug.cgi?id=112277

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2013-03-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of hiddenPanels filter
        https://bugs.webkit.org/show_bug.cgi?id=112252

        Reviewed by Vsevolod Vlasov.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorFrontendClient):
        * WebCoreSupport/WebInspectorClient.mm:
        * WebKit.order:

2013-03-12  Geoffrey Garen  <ggaren@apple.com>

        Moved RunLoopTimer and SchedulePair to WTF
        https://bugs.webkit.org/show_bug.cgi?id=112171

        Reviewed by Oliver Hunt.

        This will allow us to use timers in lower level primitives without
        duplicating all the code.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext):

2013-03-12  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* functions.
        https://bugs.webkit.org/show_bug.cgi?id=112072

        Reviewed by Philip Rogers.

        to* functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:WebCore::]):

2013-03-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r145462.
        http://trac.webkit.org/changeset/145462
        https://bugs.webkit.org/show_bug.cgi?id=112097

        Compilation failure in PluginView.cpp (Requested by jamesr_ on
        #webkit).

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:WebCore::]):

2013-03-11  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* functions.
        https://bugs.webkit.org/show_bug.cgi?id=112072

        Reviewed by Philip Rogers.

        to* functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebView/WebView.mm:
        (-[WebView _enterFullscreenForNode:WebCore::]):

2013-03-11  Jochen Eisinger  <jochen@chromium.org>

        Rename DefinitelyProcessingUserGesture to DefinitelyProcessingNewUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=111959

        Reviewed by Alexey Proskuryakov.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):

2013-03-11  Abhishek Arya  <inferno@chromium.org>

        Replace static_cast with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112045

        Reviewed by Eric Seidel.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):

2013-03-11  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.  Remove stray brace which crept into r145409.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController performClose:]):

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

        Mac: Cmd-w should close full screen window.
        https://bugs.webkit.org/show_bug.cgi?id=108406

        Reviewed by Darin Adler.

        Allow the user to close the full screen window with Cmd-w by making the full screen window
        closable, and by intercepting performClose:.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController init]): Create a closable full screen window.
        (-[WebFullScreenController performClose:]): When we receive a close request in full screen mode,
            animate out of full screen.

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

        Add didFocusTextField:inFrame to WebFormDelegate
        https://bugs.webkit.org/show_bug.cgi?id=111804

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedNodeChanged):
        * WebView/WebFormDelegate.h:
        * WebView/WebFormDelegate.m:
        (-[WebFormDelegate didFocusTextField:inFrame:]):

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

        Default mouse cursor behavior should be auto-hide for full screen video with custom controls
        https://bugs.webkit.org/show_bug.cgi?id=107601

        Reviewed by Beth Dakin.

        Enable the CURSOR_VISIBILITY feature.

        * Configurations/FeatureDefines.xcconfig:

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

        Removed some dead code in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=111525

        Reviewed by Alexey Proskuryakov.

        Page cache autorelease doesn't exist anymore, so there's no need to keep
        around these olds hacks.

        This fixes <rdar://problem/4886761> Fix bizarre WebWindowWatcher policy in WebHistoryItem.

        * History/WebHistoryItem.mm:
        (+[WebHistoryItem _releaseAllPendingPageCaches]):
        * History/WebHistoryItemInternal.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics autoreleasedPageCount]):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2013-03-06  Dmitry Zvorygin  <zvorygin@chromium.org>

        Introduce new message sources for logging.
        https://bugs.webkit.org/show_bug.cgi?id=110968

        Reviewed by Pavel Feldman.

        * WebCoreSupport/WebChromeClient.mm:
        * WebView/WebUIDelegatePrivate.h:

2013-03-05  Kent Tamura  <tkent@chromium.org>

        Rename WebCore/editing/visible_units.* to VisibleUnits.*
        https://bugs.webkit.org/show_bug.cgi?id=111426

        Reviewed by Alexey Proskuryakov.

        * WebView/WebFrame.mm:

2013-03-05  James Robinson  <jamesr@chromium.org>

        ContainerNode::setActive should not sleep for 100ms on platforms that do not implement synchronous repaint(true) semantics
        https://bugs.webkit.org/show_bug.cgi?id=87054

        Reviewed by Darin Adler.

        The Mac WebKit1 port supports immediate invalidations.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsImmediateInvalidation):

2013-03-05  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r144698): Only enable SPEECH_SYNTHESIS for Mac
        <http://webkit.org/b/106742>

        Fixes the following build failures:

            Undefined symbols for architecture i386:
              "__ZTVN7WebCore25PlatformSpeechSynthesizerE", referenced from:
                  __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
              NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
              "__ZN7WebCore25PlatformSpeechSynthesizer19initializeVoiceListEv", referenced from:
                  __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
            ld: symbol(s) not found for architecture i386

        * Configurations/FeatureDefines.xcconfig:
        - Only set ENABLE_SPEECH_SYNTHESIS for the macosx platform.

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

        BUILD FIX (r144662): Import JSBase.h in WebFrameLoadDelegate.h
        <http://webkit.org/b/111269>

        Fixes the following build failure:

            In file included from Source/WebKit/ios/DefaultDelegates/WebDefaultFrameLoadDelegate.m:11:
            In file included from Source/WebKit/mac/WebView/WebFrameLoadDelegatePrivate.h:29:
            Source/WebKit/mac/WebView/WebFrameLoadDelegate.h:41:5: error: 'JSC_OBJC_API_ENABLED' is not defined, evaluates to 0 [-Werror,-Wundef]
            #if JSC_OBJC_API_ENABLED
                ^
            Source/WebKit/mac/WebView/WebFrameLoadDelegate.h:207:5: error: 'JSC_OBJC_API_ENABLED' is not defined, evaluates to 0 [-Werror,-Wundef]
            #if JSC_OBJC_API_ENABLED
                ^
            2 errors generated.

        * WebView/WebFrameLoadDelegate.h: Include JSBase.h.

2013-03-04  Chris Fleizach  <cfleizach@apple.com>

        Support WebSpeech - Speech Synthesis
        https://bugs.webkit.org/show_bug.cgi?id=106742

        Reviewed by Simon Fraser.

        Enable speech synthesis for the Mac.

        * Configurations/FeatureDefines.xcconfig:

2013-03-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove contextInternalContext from JSContextInternal.h
        https://bugs.webkit.org/show_bug.cgi?id=111356

        Reviewed by Geoffrey Garen.

        We don't need it any more since we have globalContextRef in JSContext.

        * WebView/WebScriptWorld.mm:
        (+[WebScriptWorld scriptWorldForJavaScriptContext:]):

2013-03-04  Laszlo Gombos  <l.gombos@samsung.com>

        JSC_OBJC_API_ENABLED should be removed from FeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=111269

        Reviewed by Mark Hahnenberg.

        Include JavaScriptCore/JSBase.h for the definition of JSC_OBJC_API_ENABLED.

        * WebView/WebDelegateImplementationCaching.h:

2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Add build flag for FontLoader
        https://bugs.webkit.org/show_bug.cgi?id=111289

        Reviewed by Benjamin Poulain.

        Add ENABLE_FONT_LOAD_EVENTS build flag (disabled by default).

        * Configurations/FeatureDefines.xcconfig:

2013-03-03  Benjamin Poulain  <benjamin@webkit.org>

        [Mac] Get rid of a useless method from DOMHTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=111279

        Reviewed by Sam Weinig.

        * DOM/WebDOMOperations.mm:
        * DOM/WebDOMOperationsPrivate.h:
        setValueForUser: is already privately exposed by DOMHTMLInputElement,
        no need to have it twice.

2013-03-03  Adam Barth  <abarth@webkit.org>

        Unreviewed attempted build fix. Adds back some includes removed in
        http://trac.webkit.org/changeset/144565.

        * DOM/WebDOMOperations.mm:
        * Misc/WebNSPasteboardExtras.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebView/WebRenderLayer.mm:
        * WebView/WebRenderNode.mm:

2013-03-03  Adam Barth  <abarth@webkit.org>

        Unreviewed rollout of http://trac.webkit.org/r144530
        As described in https://bugs.webkit.org/show_bug.cgi?id=111167 and
        https://bugs.webkit.org/show_bug.cgi?id=111035, this patch caused a
        large number of ASSERTs in chromium-win.

        * DOM/WebDOMOperations.mm:
        * Misc/WebNSPasteboardExtras.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebView/WebRenderLayer.mm:
        * WebView/WebRenderNode.mm:

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

        Cut down the number of source files that depend on Clipboard.h
        https://bugs.webkit.org/show_bug.cgi?id=110030

        Reviewed by Ryosuke Niwa.

        * WebView/WebPDFView.mm: Add include of Clipboard.h since we use it
        here and the world no longer includes it everywhere.

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

        Move computedStyleIncludingVisitedInfo from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=109772

        Reviewed by Andreas Kling.

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

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

        BUILD FIX (r143637): Predeclare JSContext as an Objective-C class
        <http://webkit.org/b/106059>

        Fixes the following build failure:

            In file included from Source/WebKit/ios/DefaultDelegates/WebDefaultFrameLoadDelegate.m:11:
            In file included from Source/WebKit/mac/WebView/WebFrameLoadDelegatePrivate.h:29:
            Source/WebKit/mac/WebView/WebFrameLoadDelegate.h:215:64: error: expected a type
            - (void)webView:(WebView *)webView didCreateJavaScriptContext:(JSContext *)context forFrame:(WebFrame *)frame;
                                                                           ^
            1 error generated.

        * WebView/WebFrameLoadDelegate.h: Add @class JSContext
        declaration.

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

        Reduce amount of rebuilding when touching networking headers
        https://bugs.webkit.org/show_bug.cgi?id=111035

        Reviewed by Eric Seidel.

        Adding includes that are now necessary because WebCore headers don't have them
        any more.

        * DOM/WebDOMOperations.mm:
        * Misc/WebNSPasteboardExtras.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebView/WebRenderLayer.mm:
        * WebView/WebRenderNode.mm:

2013-03-01  Jason Anderssen  <janderssen@gmail.com>

        Move markerTextForListItem from TestRunner to Internals
        https://bugs.webkit.org/show_bug.cgi?id=110939

        Reviewed by Benjamin Poulain.

        * DOM/WebDOMOperations.mm:
        * DOM/WebDOMOperationsPrivate.h:

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

        Add SPI for marking a WebView as doing things on behalf of another process
        https://bugs.webkit.org/show_bug.cgi?id=111125

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext):
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::sourceApplicationAuditData):
        * WebView/WebView.mm:
        (-[WebView _setSourceApplicationAuditData:]):
        (-[WebView _sourceApplicationAuditData]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate dealloc]):
        * WebView/WebViewPrivate.h:
        Add SPI for setting a source application for a WebView.

2013-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r144422 and r144424.
        http://trac.webkit.org/changeset/144422
        http://trac.webkit.org/changeset/144424
        https://bugs.webkit.org/show_bug.cgi?id=111167

        Caused over 20 tests to fail assertion on Chromium Win port as
        ASSERTION FAILED: m_platformRequestUpdated (Requested by
        toyoshim on #webkit).

        * DOM/WebDOMOperations.mm:
        * Misc/WebNSPasteboardExtras.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebView/WebRenderLayer.mm:
        * WebView/WebRenderNode.mm:

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

        Reduce amount of rebuilding when touching networking headers
        https://bugs.webkit.org/show_bug.cgi?id=111035

        Reviewed by Eric Seidel.

        Adding includes that are now necessary because WebCore headers don't have them
        any more.

        * DOM/WebDOMOperations.mm:
        * Misc/WebNSPasteboardExtras.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        * WebView/WebRenderLayer.mm:
        * WebView/WebRenderNode.mm:

2013-02-27  John Bauman  <jbauman@chromium.org>

        Plugin in iframe may not display
        https://bugs.webkit.org/show_bug.cgi?id=109879

        Reviewed by Simon Fraser.

        Ensure NetscapePluginWidget informs the plugin view of the cliprect change directly.

        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::clipRectChanged):

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

        Don't add a body to platform request until necessary
        https://bugs.webkit.org/show_bug.cgi?id=110900

        Reviewed by Brady Eidson.

        WebKit1 behavior is unchanged, body is added on every conversion.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):
        (WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebFrameLoaderClient::dispatchWillSendRequest):
        (WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::canHandleRequest):
        * WebView/WebDataSource.mm:
        (-[WebDataSource initialRequest]):
        (-[WebDataSource request]):
        * WebView/WebFrame.mm:
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2013-02-27  Glenn Adams  <glenn@skynav.com>

        Add ENABLE_CSS3_TEXT_LINE_BREAK flag.
        https://bugs.webkit.org/show_bug.cgi?id=110944

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

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

        Unreviewed build fix; use correct macro for platform name in FeatureDefines.xcconfig.

        * Configurations/FeatureDefines.xcconfig:

2013-02-26  Dmitry Zvorygin  <zvorygin@chromium.org>

        Merged Tip and Debug log levels for web console.
        https://bugs.webkit.org/show_bug.cgi?id=109919

        Reviewed by Pavel Feldman.

        In every component either TIP or DEBUG level was used for reporting,
        but not both. This patch is prerequisite for Web Inspector console log filtering.

        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageLevel):
        * WebView/WebUIDelegatePrivate.h:


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

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

        Reviewed by Maciej Stachowiak.

        Update WKSI bindings and add feature defines.

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

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

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

        Reviewed by Alexey Proskuryakov.
    
        Ensure both ENCRYPTED_MEDIA and ENCRYPTED_MEDIA_V2 are enabled on macosx_1090.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebFrame.mm:
        * WebView/WebView.mm:

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

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

        Reviewed by Antti Koivisto.

        * WebView/WebHTMLView.mm:

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

        Allow to retrieve the request data from abstract TextCheckingRequest to be accessible for WK2
        https://bugs.webkit.org/show_bug.cgi?id=110208

        Reviewed by Hajime Morrita.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::didCheckSucceed):
        (WebEditorClient::requestCheckingOfString):
        Extract the request data as it is the member of 'TextCheckingRequest'.

2013-02-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit
        https://bugs.webkit.org/show_bug.cgi?id=106059

        Reviewed by Geoffrey Garen.

        Addition of appropriate delegate callbacks and support to the WebKit API.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebDelegateImplementationCaching.h:
        (WebFrameLoadDelegateImplementationCache):
        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        (-[WebFrame _javaScriptContextForScriptWorld:]):
        (-[WebFrame javaScriptContext]):
        * WebView/WebFrameLoadDelegate.h:
        * WebView/WebFramePrivate.h:
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame _convertValueToObjcValue:JSC::]):
        (-[WebScriptCallFrame exception]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebScriptWorld.h:
        * WebView/WebScriptWorld.mm:
        (+[WebScriptWorld scriptWorldForJavaScriptContext:]):
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):
        (aeDescFromJSValue):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebView _computedStyleIncludingVisitedInfo:forElement:]):

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

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

        Reviewed by Simon Fraser.

        Enable CANVAS_PATH flag on trunk.

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (-[WebView viewWillMoveToWindow:]):
        (-[WebView viewDidMoveToWindow]):
        Use Page::setIsInWindow in addition to willMoveOffscreen/didMoveOnscreen.

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

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

        Reviewed by Andreas Kling.

        Remove all explicit uses of SecurityOriginHash.

        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache originsWithCache]):

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

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

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

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

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

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

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

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

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

        Reviewed by Julien Chaffraix.

        Update calls to new API.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary):
        * WebView/WebFrame.mm:
        (-[WebFrame elementAtPoint:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView elementAtPoint:allowShadowContent:]):

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

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

        Reviewed by Mark Rowe.

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

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

        The 'global isinf/isnan' compiler quirk required when using clang with libstdc++
        https://bugs.webkit.org/show_bug.cgi?id=109325

        Reviewed by Anders Carlsson.

        Prefix calls to the isinf and isnan methods with std::, declaring we want to use the
        two methods as they're provided by the C++ standard library being used.

        * tests/DecimalTest.cpp:
        (TEST_F):

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

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

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        BUILD FIX (r142576): WK1 build fails when ENABLE(DELETION_UI) is off
        <https://bugs.webkit.org/show_bug.cgi?id=109534>

        Fixes the following build failure:

            WebEditorClient.mm:243:23: error: out-of-line definition of 'shouldShowDeleteInterface' does not match any declaration in 'WebEditorClient'
            bool WebEditorClient::shouldShowDeleteInterface(HTMLElement* element)
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldShowDeleteInterface): Protect with
        ENABLE(DELETION_UI) macro.

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

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

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebEditorClient.h:

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

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

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2013-02-10  Dan Bernstein  <mitz@apple.com>

        Added *.pdf to EXCLUDED_SOURCE_FILE_NAMES_iphoneos.

        Rubber-stamped by Anders Carlsson.

        * Configurations/WebKit.xcconfig:

2013-02-10  Jae Hyun Park  <jae.park08@gmail.com>

        Rename ENABLE(GLIB_SUPPORT) to USE(GLIB)
        https://bugs.webkit.org/show_bug.cgi?id=104266

        Reviewed by Philippe Normand.

        Using USE(GLIB) instead of ENABLE(GLIB_SUPPORT) is more consistent with
        the existing macro naming conventions.

        From Platform.h
        USE() - use a particular third-party library or optional OS service
        ENABLE() - turn on a specific feature of WebKit

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _close]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

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

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

        Reviewed by Darin Adler.

        Get rid of WebWorkersPrivate, which was only needed for DRT.

        * WebKit.exp:
        * Workers/WebWorkersPrivate.h: Removed.
        * Workers/WebWorkersPrivate.mm: Removed.

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

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

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

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (WebInstallMemoryPressureHandler):

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

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

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
            - MemoryPressureHandler::install is now called via MemoryPressureHandler::initialize.
        (WebInstallMemoryPressureHandler):
            - MemoryPressureHandler::install is now called via MemoryPressureHandler::initialize.

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

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

        Reviewed by Anders Carlsson.

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

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

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

        Reviewed by Jochen Eisinger.

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

        * Configurations/FeatureDefines.xcconfig:

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

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

        Reviewed by Tony Chang.

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

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

        Add specific EditActions for Bold and Italic commands.
        https://bugs.webkit.org/show_bug.cgi?id=108842.
        <rdar://problem/13098252>

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction):

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

        Upstream ENABLE_PDFKIT_PLUGIN settting
        <http://webkit.org/b/108792>

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig: Disable PDFKIT_PLUGIN
        on iOS since PDFKit is a Mac-only framework.

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

        Upstream iOS FeatureDefines
        <http://webkit.org/b/108753>

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig:
        - ENABLE_DEVICE_ORIENTATION: Add iOS configurations.
        - ENABLE_PLUGIN_PROXY_FOR_VIDEO: Ditto.
        - FEATURE_DEFINES: Add ENABLE_PLUGIN_PROXY_FOR_VIDEO.  Add
          PLATFORM_NAME variant to reduce future merge conflicts. 

2013-02-01  Alexis Menard  <alexis@webkit.org>

        Enable unprefixed CSS transitions by default.
        https://bugs.webkit.org/show_bug.cgi?id=108216

        Reviewed by Dean Jackson.

        Rename the flag CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED which will be used later to 
        guard the unprefixing work for CSS Transforms and animations.

        * Configurations/FeatureDefines.xcconfig:

2013-01-31  Aurimas Liutikas  <aurimas@chromium.org>

        Editor::m_compositionNode not updated on HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=107737

        Reviewed by Ryosuke Niwa.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateSelectionForInputManager]):

2013-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141479.
        http://trac.webkit.org/changeset/141479
        https://bugs.webkit.org/show_bug.cgi?id=108564

        breaks chromium test (Requested by morrita on #webkit).

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateSelectionForInputManager]):

2013-01-31  Enrica Casucci  <enrica@apple.com>

        Mac: Editor::baseWritingDirectionForSelectionStart should return WritingDirection instead of NSWritingDirection.
        https://bugs.webkit.org/show_bug.cgi?id=108519.

        Reviewed by Sam Weinig.

        There is no need to use AppKit types here.
        baseWritingDirectionForSelectionStart now returns WritingDirection and
        WebHTMLView toggleWritingDirection has been modified accordingly.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView toggleBaseWritingDirection:]):

2013-01-31  Aurimas Liutikas  <aurimas@chromium.org>

        Editor::m_compositionNode not updated on HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=107737

        Reviewed by Ryosuke Niwa.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateSelectionForInputManager]):

2013-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Disable ENABLE_FULLSCREEN_API on iOS
        https://bugs.webkit.org/show_bug.cgi?id=108250

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2013-01-31  Enrica Casucci  <enrica@apple.com>

        WebKit2: provide new bundle APIs to allow bundle clients to be notified of pasteboard access.
        https://bugs.webkit.org/show_bug.cgi?id=108396.
        <rdar://problem/12920461>

        Reviewed by Alexey Proskuryakov.

        Adds stub implementation for WebKit of the new EditorClient methods.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::willWriteSelectionToPasteboard):
        (WebEditorClient::getClientPasteboardDataForRange):

2013-01-31  Brady Eidson  <beidson@apple.com>

        Lack of a log level string should not obliterate compiled in logging channel state.
        https://bugs.webkit.org/show_bug.cgi?id=108502

        Reviewed by Alexey Proskuryakov and Sam Weinig.

        * Misc/WebKitLogging.m: If there's no log level string, leave the channel state alone.

2013-01-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140983.
        http://trac.webkit.org/changeset/140983
        https://bugs.webkit.org/show_bug.cgi?id=108277

        Unfortunately, this API has one last client (Requested by
        abarth on #webkit).

        * Configurations/FeatureDefines.xcconfig:

2012-11-28  Jer Noble  <jer.noble@apple.com>

        Allow clients to ask for the WebView/WKView placeholder view when in full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=103558
        <rdar://problem/12763112>

        Reviewed by Benjamin Poulain.

        Clients may want to behave differently when their WebView/WKView has been swapped out by a placeholder
        view when in full screen mode.  Add a simple accessor for the existing placeholder view to
        WebFullScreenController and WebView.

        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController webViewPlaceholder]): Added simple accessor.
        * WebView/WebView.mm:
        (-[WebView fullScreenPlaceholderView]): Added simple accessor.

2013-01-28  Pratik Solanki  <psolanki@apple.com>

        PLATFORM(IOS) should come before __MAC_OS_X_VERSION_MIN_REQUIRED
        https://bugs.webkit.org/show_bug.cgi?id=108101

        Reviewed by Benjamin Poulain.

        Since iOS does not define __MAC_OS_X_VERSION_MIN_REQUIRED, any usage of
        __MAC_OS_X_VERSION_MIN_REQUIRED should be after a PLATFORM(IOS) check.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2013-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Update PageVisibilityState when WebView is hidden / visible
        https://bugs.webkit.org/show_bug.cgi?id=107509

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Set the initial visibility of the page.

        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        (-[WebView _isViewVisible]):
        (-[WebView _updateVisibilityState]):
        (-[WebView viewDidMoveToWindow]):
        (-[WebView _windowVisibilityChanged:]):
        Update visibility state in the same ways WK2 does. This involves
        listening for some new NSWindow delegates.

2013-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Improve PageVisibility API with enums
        https://bugs.webkit.org/show_bug.cgi?id=107364

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:
        (core):
        (-[WebView _setVisibilityState:isInitialState:]):
        Switch the private API form int to a WebPageVisibilityState enum.

2013-01-28  Adam Barth  <abarth@webkit.org>

        Remove webkitNotifications.createHTMLNotification
        https://bugs.webkit.org/show_bug.cgi?id=107598

        Reviewed by Benjamin Poulain.

        * Configurations/FeatureDefines.xcconfig:

2013-01-25  Andy Estes  <aestes@apple.com>

        Wrap content filtering code in an object
        https://bugs.webkit.org/show_bug.cgi?id=107914

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Updated to reflect changes in WKSI.

2013-01-24  Dan Bernstein  <mitz@apple.com>

        WebNavigationData does not distinguish between an empty title and a missing title
        https://bugs.webkit.org/show_bug.cgi?id=107917

        Reviewed by Andy Estes.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (nilOrNSString): Added this helper function.
        (WebFrameLoaderClient::updateGlobalHistory): Initialize the WebNavigationData with a nil
        title, rather than the empty string, if the document does not have a title.

2013-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Rename JSValue.h/APIJSValue.h to JSCJSValue.h/JSValue.h
        https://bugs.webkit.org/show_bug.cgi?id=107327

        Reviewed by Filip Pizlo.

        We're renaming these two files, so we have to replace the names everywhere.

        * DOM/WebDOMOperations.mm:
        * ForwardingHeaders/runtime/JSCJSValue.h: Copied from Source/WebKit/mac/ForwardingHeaders/runtime/JSValue.h.
        * ForwardingHeaders/runtime/JSValue.h: Removed.
        * WebView/WebFrame.mm:
        * WebView/WebView.mm:

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

        Use a platforom strategy for local storage
        https://bugs.webkit.org/show_bug.cgi?id=107600

        Reviewed by Andreas Kling.

        Update for new storage strategy.

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createStorageStrategy):

2013-01-21  Kentaro Hara  <haraken@chromium.org>

        Implement UIEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=107430

        Reviewed by Adam Barth.

        Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm

        UIEvent constructor is implemented under a DOM4_EVENTS_CONSTRUCTOR flag,
        which is enabled on Safari and Chromium for now.

        * Configurations/FeatureDefines.xcconfig:

2013-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Enable Page Visibility (PAGE_VISIBILITY_API)
        https://bugs.webkit.org/show_bug.cgi?id=107230

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        PDFPlugin: Build PDFPlugin everywhere, enable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=107117

        Reviewed by Alexey Proskuryakov.

        Since PDFLayerController SPI is all forward-declared, the plugin should build
        on all Mac platforms, and can be enabled at runtime.

        * Configurations/FeatureDefines.xcconfig:

2013-01-21  Dirk Schulze  <dschulze@adobe.com>

        Add build flag for Canvas's Path object (disabled by default)
        https://bugs.webkit.org/show_bug.cgi?id=107473

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2013-01-17  Andy Estes  <aestes@apple.com>

        Add a USE() macro for content filtering code
        https://bugs.webkit.org/show_bug.cgi?id=107098

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Use USE(CONTENT_FILTERING).

2013-01-19  Philip Rogers  <pdr@google.com>

        Merge SVGStylable into SVGStyledElement
        https://bugs.webkit.org/show_bug.cgi?id=106877

        SVG2 changes element inheritance so all SVGElements are stylable. As a first-step towards a
        cleaner class hierarchy, this patch moves SVGStylable into SVGStyledElement.

        Reviewed by Dirk Schulze.

        * MigrateHeaders.make:

2013-01-18  Seokju Kwon  <seokju.kwon@gmail.com>

        Add explicit keyword to constructors in platform-specific InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=107255

        Reviewed by Kentaro Hara.

        Add explicit keyword to constructors that take one argument
        in platform-specific implementation of InspectorClient.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):

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

        Add a Setting to disable QTKit media engine.
        https://bugs.webkit.org/show_bug.cgi?id=106972

        Reviewed by Eric Carlson.

        Add WebKit API to set QTKit enabled setting from user defaults.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set WebCore settings based on user defaults.
        (-[WebPreferences setQTKitEnabled:]): Pass through to WebCore.
        (-[WebPreferences isQTKitEnabled]): Ditto.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Synchronize WebKit/WebCore settings.

2013-01-15  Enrica Casucci  <enrica@apple.com>

        Add a new set of WebKit2 APIs for text search and
        search results management.
        https://bugs.webkit.org/show_bug.cgi?id=106834.
        <rdar://problem/12597159>

        Reviewed by Simon Fraser.
        
        Adding new API to perform text search in WebKit2 without using
        the stock UI. The new interface provides all the information
        necessary to write a custom UI for search.

        Added new TextWebKitAPI test.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView countMatchesForText:inDOMRange:options:limit:markMatches:]):
        Modified to reflect the changes to Editor::countMatchesForText interface.

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

        Remove the ENABLE_ANIMATION_API feature define occurences
        https://bugs.webkit.org/show_bug.cgi?id=106544

        Reviewed by Simon Fraser.

        The Animation API code was removed in r137243. The ENABLE_ANIMATION_API
        feature define handling still lingers in various build systems and configurations
        but is of no use, so it should be removed.

        * Configurations/FeatureDefines.xcconfig:

2013-01-08  Mark Lam  <mark.lam@apple.com>

        Removed the need for the ProposedDatabase mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=106292.

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota):

2013-01-07  Dan Bernstein  <mitz@apple.com>

        [mac] WebKit1 clients can’t tell when a frame has been removed from the hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=106261

        Reviewed by Simon Fraser.

        Test: TestWebKitAPI/Tests/mac/WebViewDidRemoveFrameFromHierarchy.mm.

        Added -[WebFrameLoadDelegate webView:didRemoveFrameFromHierarchy:].

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::detachedFromParent2): Added a call to the new frame load delegate
        method.
        * WebView/WebDelegateImplementationCaching.h:
        (WebFrameLoadDelegateImplementationCache): Added the new method to the cache.
        * WebView/WebFrameLoadDelegatePrivate.h: Declared the new delegate method.
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]): Added the new method to the cache.

2013-01-07  Mike West  <mkwst@chromium.org>

        Make the IFRAME_SEAMLESS flag runtime-enabled.
        https://bugs.webkit.org/show_bug.cgi?id=106213

        Reviewed by Ojan Vafai.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences seamlessIFramesEnabled]):
        (-[WebPreferences setSeamlessIFramesEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
            Add a seamless IFrame preference to WebPreferences, and use it to
            toggle the runtime state of the feature as appropriate.

2013-01-04  Adam Klein  <adamk@chromium.org>

        Remove ENABLE_MUTATION_OBSERVERS #define
        https://bugs.webkit.org/show_bug.cgi?id=105459

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2013-01-01  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12942239> Update copyright strings

        Reviewed by Sam Weinig.

        * Info.plist:

2012-12-29  Adam Roben  <aroben@webkit.org>

        Web Inspector: Mac WK1 Inspector can't save/load timeline data
        https://bugs.webkit.org/show_bug.cgi?id=105547

        Reviewed by Pavel Feldman.

        * WebCoreSupport/WebInspectorClient.h: Declared new overrides and
        member variables necessary for save support.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::save):
        (WebInspectorFrontendClient::append):
        Implemented these to make saving timeline data work. (It seems to me
        the InspectorFrontendClient API could be cleaned up a bit. I had to
        look at Chromium source code to determine that I needed to call back
        into the InspectorFrontendAPI JS object after saving/appending, and
        that I needed to keep a map of passed URLs -> chosen URLs.)

        (-[WebInspectorWindowController window:willPositionSheet:usingRect:]):
        Tweaked the position of the sheet so that open/save sheets look a
        little bette.r

        (-[WebInspectorWindowController webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:]):
        Implemented to make loading timeline data work.

2012-12-28  Mark Rowe  <mrowe@apple.com>

        Move logic for extracting the OS X marketing version in to WebCore
        <http://webkit.org/b/105841> / <rdar://problem/10736041>

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove the code related to the WKSI symbol.
        * WebView/WebView.mm:
        (systemMarketingVersionForUserAgentString): Call the WebCore function instead of the WKSI function.
        (+[WebView _standardUserAgentWithApplicationName:]): Retain the result now that our helper doesn't
        do that for us.

2012-12-27  Sam Weinig  <sam@webkit.org>

        Attempt to fix the tests.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

2012-12-23  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12808377> Network process should respect cookie accept policy
        https://bugs.webkit.org/show_bug.cgi?id=105684

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        CookiesStrategy no longer has notifyCookiesChanged().

2012-12-22  Alexey Proskuryakov  <ap@apple.com>

        Add a separate class for networking related storage
        https://bugs.webkit.org/show_bug.cgi?id=105676

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        Updated for ResourceHandle include changes.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        This class is now simpler, with more session tracking being in WebCore now.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::cookiesForDOM):
        (WebPlatformStrategies::setCookiesFromDOM):
        (WebPlatformStrategies::cookiesEnabled):
        (WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebPlatformStrategies::getRawCookies):
        (WebPlatformStrategies::deleteCookie):
        We no longer need a function for default cookie storage! Other cookie functions
        now take a session.

        * WebView/WebPreferences.mm:
        (+[WebPreferences _switchNetworkLoaderToNewTestingSession]): Initialize WCSI before
        calling a WebCore that uses it.
        (+[WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]): Use
        NetworkStorageSession for session tracking.

        * WebView/WebView.mm: (-[WebView _cachedResponseForURL:]): Updated for networking
        context now returning a class for session.

2012-12-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for chromium mac after r138206.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-12-19  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12890242> [WK2 NetworkProcess] Client doesn't receive SSL certificates
        https://bugs.webkit.org/show_bug.cgi?id=105467

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Initialize
        a WKSI function we've been missing.

2012-12-19  Alexis Menard  <alexis@webkit.org>

        Implement CSS parsing for CSS transitions unprefixed.
        https://bugs.webkit.org/show_bug.cgi?id=104804

        Reviewed by Dean Jackson.

        Add a new flag ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
        to cover the work of unprefixing Transforms, Animations and 
        Transitions. It will let the possibility of each ports to turn it off 
        in their release branches until we're confident that these CSS 
        properties are ready to be unprefixed.

        * Configurations/FeatureDefines.xcconfig:

2012-12-18  Alexey Proskuryakov  <ap@apple.com>

        Remove unnecessary functions from CookiesStrategy
        https://bugs.webkit.org/show_bug.cgi?id=105369

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:

2012-12-18  Alice Liu  <alice.liu@apple.com>

        Add SPI to WebKit1 WebFrame for hit testing
        https://bugs.webkit.org/show_bug.cgi?id=105106

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        (-[WebFrame elementAtPoint:]): Added. Takes an NSPoint to feed to the WebCore::Frame for hit-testing.
        Creates a WebElementDictionary from that WebCore::HitTestResult, and returns the element dictionary. 
        * WebView/WebFramePrivate.h:

2012-12-18  Alice Liu  <alice.liu@apple.com>

        Add SPI to WebKit1 WebFrame for node conversion to JSValueRef
        https://bugs.webkit.org/show_bug.cgi?id=105262

        Reviewed by Anders Carlsson.

        * WebView/WebFrame.mm:
        (-[WebFrame jsWrapper:forWorld:]): Added. Takes a DOMNode and WebScriptWorld and provides a JSValueRef
        for the WebCore::Node in that particular WebScriptWorld.
        * WebView/WebFramePrivate.h:

2012-12-18  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=102579
        [mac] Enable scaled cursors

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

2012-12-16  Levi Weintraub  <leviw@chromium.org>

        Push pixel snapping logic into TransformState
        https://bugs.webkit.org/show_bug.cgi?id=101779

        Reviewed by Simon Fraser.

        * WebView/WebFullScreenController.mm:
        (screenRectOfContents): Removed SnapOffsetForTransforms as it's no longer needed.

2012-12-15  Anders Carlsson  <andersca@apple.com>

        Rename FrameLoaderClient::download to convertMainResourceLoadToDownload
        https://bugs.webkit.org/show_bug.cgi?id=105122

        Reviewed by Andreas Kling.

        Update for WebCore changes.

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::convertMainResourceLoadToDownload):

2012-12-15  Mark Lam  <mark.lam@apple.com>

        Re-landing patch for "Introducing the DatabaseStrategy and database servers".
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Not reviewed.

        Merged from r137767. Previously reviewed by Sam Weinig.

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createDatabaseStrategy):

2012-12-14  Mark Lam  <mark.lam@apple.com>

        The WebView should initialize the platform strategies before initializing other sub-systems.
        https://bugs.webkit.org/show_bug.cgi?id=105083.

        Reviewed by Alexey Proskuryakov.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2012-12-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r137767.
        http://trac.webkit.org/changeset/137767
        https://bugs.webkit.org/show_bug.cgi?id=105062

        Broke Mac builds. (Requested by mlam on #webkit).

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:

2012-12-14  Mark Lam  <mark.lam@apple.com>

        Introducing the DatabaseStrategy and database servers.
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Reviewed by Sam Weinig.

        The database server is currently a placeholder that does nothing.

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createDatabaseStrategy):

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12838354> Per-Tab WebProcess: DOM cookie access functions should respect private browsing
        https://bugs.webkit.org/show_bug.cgi?id=104691

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::inPrivateBrowsingMode):
        (WebFrameNetworkingContext::storageSession):
        Implemented inPrivateBrowsingMode().

2012-12-12  Mark Lam  <mark.lam@apple.com>

        Encapsulate externally used webdatabase APIs in DatabaseManager.
        https://bugs.webkit.org/show_bug.cgi?id=104741.

        Reviewed by Sam Weinig.

        Use DatabaseManager instead of accessing DatabaseTracker, AbstractDatabase,
        and DatabaseContext directly. This is to prepare for upcoming webkit2
        refactoring.

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager origins]):
        (-[WebDatabaseManager databasesWithOrigin:]):
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]):
        (-[WebDatabaseManager deleteAllDatabases]):
        (-[WebDatabaseManager deleteOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        (WebKitInitializeDatabasesIfNecessary):
        * Storage/WebDatabaseManagerClient.h: Copied from Source/WebKit/mac/Storage/WebDatabaseTrackerClient.h.
        (WebDatabaseManagerClient):
        * Storage/WebDatabaseManagerClient.mm: Copied from Source/WebKit/mac/Storage/WebDatabaseTrackerClient.mm.
        (WebDatabaseManagerClient::sharedWebDatabaseManagerClient):
        (WebDatabaseManagerClient::WebDatabaseManagerClient):
        (WebDatabaseManagerClient::~WebDatabaseManagerClient):
        (DidModifyOriginData::dispatchToMainThread):
        (DidModifyOriginData::DidModifyOriginData):
        (DidModifyOriginData):
        (WebDatabaseManagerClient::dispatchDidModifyOrigin):
        (WebDatabaseManagerClient::dispatchDidModifyDatabase):
        * Storage/WebDatabaseQuotaManager.mm:
        (-[WebDatabaseQuotaManager usage]):
        (-[WebDatabaseQuotaManager quota]):
        (-[WebDatabaseQuotaManager setQuota:]):
        * Storage/WebDatabaseTrackerClient.h: Removed.
        * Storage/WebDatabaseTrackerClient.mm: Removed.
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        * WebKit.order:
        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make LOG() work in WebProcess and NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=104718

        Reviewed by Tim Horton.

        * WebView/WebView.mm: Use WebCore/InitializeLogging.h to avoid conflicts between
        WebCore and WebKit versions of this file.

2012-12-11  Mike West  <mkwst@chromium.org>

        Web Inspector: ConsoleTypes should not expose MessageType - it should be private to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=66371

        Reviewed by Pavel Feldman.

        Drops WebCore::MessageType from the addMessageToConsole method.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::addMessageToConsole):

2012-12-09  Antti Koivisto  <antti@apple.com>

        Factor node traversal into standalone functions
        https://bugs.webkit.org/show_bug.cgi?id=104507

        Reviewed by Eric Seidel.
    
        * WebView/WebHTMLRepresentation.mm:
        (searchForLabelsBeforeElement):

2012-12-10  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Remove CSS3_BACKGROUND feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=104539

        Reviewed by Antonio Gomes.

        As discussed on webkit-dev it is not needed to keep this feature flag 
        as support for <position> type is a small feature that is already 
        implemented by three other UAs. It was useful while landing this 
        feature as partial bits were landed one after one.

        * Configurations/FeatureDefines.xcconfig:

2012-12-06  Rick Byers  <rbyers@chromium.org>

        CSS cursor property should support webkit-image-set
        https://bugs.webkit.org/show_bug.cgi?id=99493

        Reviewed by Beth Dakin.

        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default.

        * Configurations/FeatureDefines.xcconfig:

2012-12-03  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Mac compilation after r136448.

        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageType):

2012-12-03  Alexis Menard  <alexis@webkit.org>

        [Mac] Enable CSS3 background-position offset by default.
        https://bugs.webkit.org/show_bug.cgi?id=103905

        Reviewed by Simon Fraser.

        Turn the flag on by default.

        * Configurations/FeatureDefines.xcconfig:

2012-12-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        Need a method to close all idle localstorage databases immediately.
        https://bugs.webkit.org/show_bug.cgi?id=103469

        Reviewed by David Kilzer.

        Add a new method to WebStorageManager that we can call to close all
        idle local storage databases.

        * Storage/WebStorageManager.mm:
        (+[WebStorageManager closeIdleLocalStorageDatabases]):
        * Storage/WebStorageManagerPrivate.h:

2012-11-30  Mihai Maerean  <mmaerean@adobe.com>

        [CSSRegions] when WebKit uses V8, there should be a single variable to store if the CSS Regions feature is enabled
        https://bugs.webkit.org/show_bug.cgi?id=101192

        Reviewed by Hajime Morita.

        Removed the CSS Regions flag in Settings and switched to using the new flag I have added in RuntimeEnabledFeatures.

        Tests: No new tests because there is no functional change.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-11-29  Rafael Weinstein  <rafaelw@chromium.org>

        [HTMLTemplateElement] Add feature flag
        https://bugs.webkit.org/show_bug.cgi?id=103694

        Reviewed by Adam Barth.

        This flag will guard the implementation of the HTMLTemplateElement.
        http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html

        * Configurations/FeatureDefines.xcconfig:

2012-11-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Forward cookie jar calls to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=103457

        Reviewed by Darin Adler.

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::cookiesForDOM):
        (WebPlatformStrategies::setCookiesFromDOM):
        (WebPlatformStrategies::cookiesEnabled):
        (WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebPlatformStrategies::getRawCookies):
        (WebPlatformStrategies::deleteCookie):
        (WebPlatformStrategies::getHostnamesWithCookies):
        (WebPlatformStrategies::deleteCookiesForHostname):
        (WebPlatformStrategies::deleteAllCookies):
        (WebPlatformStrategies::getPluginInfo):
        (WebPlatformStrategies::bufferForType):
        WebKit1 strategy just uses PlatformCookieJar.

2012-11-28  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=102970
        [WK1] REGRESSION (r129545): Main frame doesn't rubberband unless 
        WebFrameLoadDelegate implements -webView:didFirstLayoutInFrame:

        Reviewed by Sam Weinig.

        We should always register for DidFirstLayout in WK1 since we do work 
        at that time besides just calling the delegate function.
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):

2012-11-27  Michael Saboff  <msaboff@apple.com>

        TextIterator unnecessarily converts 8 bit strings to 16 bits
        https://bugs.webkit.org/show_bug.cgi?id=103295

        Reviewed by Brent Fulgham.

        Updated _stringForRange to use plainText() instead of removed plainTextToMallocAllocatedBuffer().

        * WebView/WebFrame.mm:
        (-[WebFrame _stringForRange:]):

2012-11-27  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2012-11-27  Pratik Solanki  <psolanki@apple.com>

        objc/objc-runtime.h does not exist on all PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=101780

        Reviewed by Brent Fulgham.

        Clean up header includes so we don't include objc/objc-runtime.h.

        * Carbon/HIWebView.mm:
        (UpdateCommandStatus): Use wtfObjcMsgSend template instead of objc_msgSend.
        * Plugins/WebNetscapePluginView.mm:
        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck _continueWithPolicy:]): Use wtfObjcMsgSend template instead of objc_msgSend.
        * Plugins/WebPluginController.mm:
        * WebCoreSupport/WebCachedFramePlatformData.h:
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        * WebView/WebDelegateImplementationCaching.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebPDFDocumentExtras.mm:
        * WebView/WebPolicyDelegate.mm:
        (-[WebPolicyDecisionListener _usePolicy:]): Use wtfObjcMsgSend template instead of objc_msgSend.
        * WebView/WebView.mm:

2012-11-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135786.
        http://trac.webkit.org/changeset/135786
        https://bugs.webkit.org/show_bug.cgi?id=103379

        It made 3 plugin tests timeout on several platforms (Requested
        by Ossy on #webkit).

        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2012-11-26  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2012-11-23  Alexis Menard  <alexis@webkit.org>

        [CSS3 Backgrounds and Borders] Implement new CSS3 background-position parsing.
        https://bugs.webkit.org/show_bug.cgi?id=102104

        Reviewed by Julien Chaffraix.

        Protect the new feature behind a feature flag.

        * Configurations/FeatureDefines.xcconfig:

2012-11-21  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Disambiguate innerNodeFramePoint and mainFramePoint
        https://bugs.webkit.org/show_bug.cgi?id=98139

        Reviewed by Julien Chaffraix.

        Switch to using HitTestResult::innerNodeFrame and HitTestResult::innerNodeFramePoint.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::showContextMenu):

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135295.
        http://trac.webkit.org/changeset/135295
        https://bugs.webkit.org/show_bug.cgi?id=102834

        This patch causes assertion to some layout tests on chromium
        (Requested by jianli on #webkit).

        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2012-11-20  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * Plugins/WebPluginController.mm:
        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]):
        (-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

2012-11-19  Kihong Kwon  <kihong.kwon@samsung.com>

        Add PROXIMITY_EVENTS feature
        https://bugs.webkit.org/show_bug.cgi?id=102658

        Reviewed by Kentaro Hara.

        Add PROXIMITY_EVENTS feature to xcode project for WebKit.

        * Configurations/FeatureDefines.xcconfig:

2012-11-16  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS_HIERARCHIES since it's no longer in use
        https://bugs.webkit.org/show_bug.cgi?id=102554

        Reviewed by Andreas Kling.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=79939#c41 ,
        we're going to revist this feature once additional vendor support is
        achieved.

        * Configurations/FeatureDefines.xcconfig:

2012-11-15  Alexey Proskuryakov  <ap@apple.com>

        Private Browsing is a per-page setting that sets a global value
        https://bugs.webkit.org/show_bug.cgi?id=67870

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        Moved functions for managing global sessions from WebCore.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::defaultCookieStorage): Added. Uses WebFrameNetworkingContext
        to reach the storage.

        * WebView/WebPreferences.mm:
        (+[WebPreferences _switchNetworkLoaderToNewTestingSession]): Ditto.
        (+[WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]): Ditto.

        * WebView/WebPreferencesPrivate.h: Added a comment explaining that two functions
        are not generic enough for use outside DRT (one of them had "testing" in name,
        but another did not).

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Create a global private browsing session when
        the first view with private browsing is created, delete it when any window with
        it disabled is created (since this comes from preferences, it applies to all
        views equally, even though we are dealing with a single one here).
        (-[WebView _cachedResponseForURL:]): Use main frame's networking context instead of
        a global one.

2012-11-13  Timothy Hatcher  <timothy@apple.com>

        Adjust the Web Inspector window title frame if needed to prevent it from intersecting the dock button.

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

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindow _customTitleFrame]): Added. Adjust the title frame.

2012-11-12  Simon Fraser  <simon.fraser@apple.com>

        Build fix after r134346 and 134347.
        
        Use frameView.isFlipped, not frameView.flipped in the assertion.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]):

2012-11-12  Timothy Hatcher  <timothy@apple.com>

        Add a dock button to the top right corner of the Web Inspector window (similar to the full screen button).

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

        Reviewed by Joseph Pecoraro.

        * Resources/Dock.pdf: Added.
        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindow _cursorForResizeDirection:]): Added.
        (WebInspectorClient::didResizeMainFrame): Call attachAvailabilityChanged instead.
        (WebInspectorFrontendClient::attachAvailabilityChanged): Added.
        (-[WebInspectorWindowController window]): Create the dock button and add it.
        (-[WebInspectorWindowController attachWindow:]): Added.
        (-[WebInspectorWindowController attach]): Call setAttachedWindow.
        (-[WebInspectorWindowController detach]): Ditto.
        (-[WebInspectorWindowController setDockingUnavailable:]): Added. Update hidden state of the dock button.

2012-11-08  Timothy Hatcher  <timothy@apple.com>

        Always use a textured window for the Web Inspector.

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

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController window]): Removed the conditional for a textured window.

2012-11-08  Roger Fong  <roger_fong@apple.com>

        Null check URL key entries into WebHistory hash table. 
        https://bugs.webkit.org/show_bug.cgi?id=101664
        <rdar://problem/12440852>

        Reviewed by Brady Eidson.
        
        Sometimes the _entriesByURL hash table used to keep track of web history is erroneously passed in null key entries, which causes an exception to fire.
        This prevents the desired page navigation from taking effect. This is a workaround for the problem.
        Ideally we would figure out where the null values for the key are coming from but for now we'll just set it to "" to prevent the exception from being thrown
        so that navigation can continue as expected.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate visitedURL:withTitle:increaseVisitCount:]):

2012-11-07  Andreas Kling  <akling@apple.com>

        Remove build-webkit dependency on Java SDK for Apple Mac WebKit.
        <http://webkit.org/b/101492>

        Reviewed by Anders Carlsson.

        * Plugins/WebJavaPlugIn.h: Removed.

2012-11-06  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the chromium-mac build.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

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

        Update Java related WKSI function names
        https://bugs.webkit.org/show_bug.cgi?id=101414

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::unavailablePluginButtonClicked):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (isPlugInInactive):

2012-11-06  Alexey Proskuryakov  <ap@apple.com>

        Clean up which storage cookie jar functions use
        https://bugs.webkit.org/show_bug.cgi?id=101395

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Updated for
        two new functions.

2012-11-06  Andrey Lushnikov  <lushnikov@google.com>

        Added console.clear() method

        Web Inspector: add console.clear()
        https://bugs.webkit.org/show_bug.cgi?id=101021

        Reviewed by Vsevolod Vlasov.

        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageType): Added ClearMessageType case to switch

2012-11-05  Alexey Proskuryakov  <ap@apple.com>

        Get rid of setCookieStoragePrivateBrowsingEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=101247

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): We no longer
        have this function.

2012-11-03  Alexey Proskuryakov  <ap@apple.com>

        Get rid of USE(CFURLSTORAGESESSIONS)
        https://bugs.webkit.org/show_bug.cgi?id=101131

        Reviewed by Sam Weinig.

        * WebView/WebPreferences.mm:
        (+[WebPreferences _switchNetworkLoaderToNewTestingSession]):
        (+[WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]):
        * WebView/WebView.mm:
        (-[WebView _cachedResponseForURL:]):

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

        Don't instantiate the Java plug-in if it's inactive
        https://bugs.webkit.org/show_bug.cgi?id=101102
        <rdar://problem/12595679>

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldUnavailablePluginMessageBeButton):
        The RenderEmbeddedObject::PluginInactive reason should always result in a button being shown.

        (WebChromeClient::unavailablePluginButtonClicked):
        If the Java plug-in is inactive, call WKJLReportWebComponentsUsed() to reactivate the plug-in and
        then reload the page.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (isOracleJavaPlugIn):
        (isPlugInInactive):
        Helper functions.

        (WebFrameLoaderClient::createPlugin):
        If the plug-in is inactive, set the appropriate unavailability reason on the renderer.

2012-11-02  Simon Fraser  <simon.fraser@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        https://bugs.webkit.org/show_bug.cgi?id=101076

        Reviewed by Dave Hyatt.

        Define ENABLE_SUBPIXEL_LAYOUT and include it in FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-11-02  Adam Barth  <abarth@webkit.org>

        ENABLE(UNDO_MANAGER) is disabled everywhere and is not under active development
        https://bugs.webkit.org/show_bug.cgi?id=100711

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2012-11-01  Adam Roben  <aroben@webkit.org>

        [WK1] Fixed-position elements jiggle up and down slightly during scrolling on a Retina display
        https://bugs.webkit.org/show_bug.cgi?id=100957

        Reviewed by Simon Fraser.

        WebCore doesn't yet support subpixel scrolling. WebKit2 forces
        scrolling to always be integral. Now WebKit1 forces this as well.

        I'm not sure how to write a test for this.

        * WebView/WebDynamicScrollBarsView.mm:
        (shouldRoundScrollOrigin): Returns YES if there are any position:fixed
        or position:sticky elements in the page.
        (-[WebDynamicScrollBarsView scrollClipView:toPoint:]): Round the
        scroll origin to the nearest pixel if needed.

2012-10-31  Anders Carlsson  <andersca@apple.com>

        Fix build.
        <rdar://problem/12612207>.

        Reviewed by Sam Weinig.

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel loadNib]):

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Sync up FeatureDefine Configuration Files
        https://bugs.webkit.org/show_bug.cgi?id=100171

        Reviewed by David Kilzer.

        Follow up to better coordinate with iOS feature defines. Make:

          - ENABLE_FILTERS always on
          - ENABLE_INPUT_* iphonesimulator values point to the iphoneos values

        * Configurations/FeatureDefines.xcconfig:

2012-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Sync up FeatureDefine Configuration Files
        https://bugs.webkit.org/show_bug.cgi?id=100171

        Reviewed by David Kilzer.

        Ensure an identical FeatureDefine files across all projects. Changes:

          - ENABLE_CSS_BOX_DECORATION_BREAK should be in all
          - ENABLE_PDFKIT_PLUGIN should be in all
          - ENABLE_RESOLUTION_MEDIA_QUERY should be in all
          - ENABLE_ENCRYPTED_MEDIA should be in all
          - ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING with corrected value
          - Some alphabetical ordering cleanup

        * Configurations/FeatureDefines.xcconfig:

2012-10-29  Anders Carlsson  <andersca@apple.com>

        Build WebKit as C++11 on Mac
        https://bugs.webkit.org/show_bug.cgi?id=100720

        Reviewed by Daniel Bates.

        * Configurations/Base.xcconfig:
        Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList description]):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem description]):
        Add static_casts to prevent implicit type conversions in non-constant initializer lists.

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Simplify Xcode configuration settings that used to vary between OS versions.

        Reviewed by Dan Bernstein.

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

2012-10-28  Mark Rowe  <mrowe@apple.com>

        Remove references to unsupported OS and Xcode versions.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Removed.
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2012-10-29  Enrica Casucci  <enrica@apple.com>

        Add ENABLE_USERSELECT_ALL feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=100559

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2012-10-27  Alexey Proskuryakov  <ap@apple.com>

        All tests crash in WebKit1 mode
        https://bugs.webkit.org/show_bug.cgi?id=100602

        Reviewed by Sam Weinig.

        * WebView/WebView.mm: (+[WebView _setLoadResourcesSerially:]): Resource load
        scheduler is created via a strategy, so strategies need to be initialized before
        using it.

2012-10-27  Dan Bernstein  <mitz@apple.com>

        REAL_PLATFORM_NAME build setting is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=100587

        Reviewed by Mark Rowe.

        Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
        to PLATFORM_NAME.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit.xcconfig:

2012-10-26  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        Add feature flags for CSS Device Adaptation
        https://bugs.webkit.org/show_bug.cgi?id=95960

        Reviewed by Kenneth Rohde Christiansen.

        * Configurations/FeatureDefines.xcconfig:

2012-10-25  Dominik Röttsches  <dominik.rottsches@intel.com>

        Conditionalize XHR timeout support
        https://bugs.webkit.org/show_bug.cgi?id=100356

        Reviewed by Adam Barth.

        Adding XHR_TIMEOUT feature to conditionalize this on ports without network backend support.
        Defaults to ON on Mac since the Mac NSUrlConnection based backend has setTimeoutInterval support.

        * Configurations/FeatureDefines.xcconfig:

2012-10-24  Timothy Hatcher  <timothy@apple.com>

        Fix a crash seen during the Inspector tests on the WebKit1 bots.

        Reviewed by Filip Pizlo.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::bringToFront): Use the window from the WebView since m_windowController's window
        is not the same when the Inspector is docked.

2012-10-24  Brady Eidson  <beidson@apple.com>

        Add a strategy for loader customization.
        https://bugs.webkit.org/show_bug.cgi?id=100278

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createLoaderStrategy):

2012-10-24  Timothy Hatcher  <timothy@apple.com>

        Make the Inspector WKView/WebView become the first responder when bringToFront is called.

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

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::bringToFront): Make the Inspector WebView become the first responder.

2012-10-23  Alexey Proskuryakov  <ap@apple.com>

        Add a strategy for shared workers
        https://bugs.webkit.org/show_bug.cgi?id=100165

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createPasteboardStrategy):
        (WebPlatformStrategies::createSharedWorkerStrategy):
        (WebPlatformStrategies::createVisitedLinkStrategy):

2012-10-24  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Maciej Stachowiak.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new WKSI function pointers.

2012-10-23  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of <rdar://problem/2966974> [mac] Kerning and ligatures are not enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=100188

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (+[WebView initialize]): Added a local variable to hold the standard user defaults. Added
        code to register a value of YES for the WebKitKerningAndLigaturesEnabledByDefault user
        default. Changed to refer to that default key by name.

2012-10-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Add support for resolution media query
        https://bugs.webkit.org/show_bug.cgi?id=99077

        Reviewed by Antti Koivisto.

        Add support for the RESOLUTION_MEDIA_QUERY feature flag.

        * Configurations/FeatureDefines.xcconfig:

2012-10-21  Andreas Kling  <kling@webkit.org>

        Remove Page::javaScriptURLsAreAllowed setting.
        <http://webkit.org/b/99944>

        Reviewed by Anders Carlsson.

        * WebKit.order:
        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2012-10-19  Dongwoo Joshua Im  <dw.im@samsung.com>

        Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT
        https://bugs.webkit.org/show_bug.cgi?id=99804

        Reviewed by Julien Chaffraix.

        CSS3 text related properties will be implemented under this flag,
        including text decoration, text-align-last, and text-justify.

        * Configurations/FeatureDefines.xcconfig:

2012-10-18  Pablo Flouret  <pablof@motorola.com>

        Implement css3-conditional's @supports rule
        https://bugs.webkit.org/show_bug.cgi?id=86146

        Reviewed by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:
            Add an ENABLE_CSS3_CONDITIONAL_RULES flag.

2012-10-17  Joseph Pecoraro  <pecoraro@apple.com>

        [Mac] Uninitialized Members in WebDataSourcePrivate
        https://bugs.webkit.org/show_bug.cgi?id=99617

        Reviewed by David Kilzer.

        Initialize BOOL member variables.

        * WebView/WebDataSource.mm:
        (WebDataSourcePrivate::WebDataSourcePrivate):

2012-10-17  Mark Rowe  <mrowe@apple.com>

        Fix the build with a newer version of clang.

        Reviewed by Dan Bernstein.

        Some of the methods in WebCoreStatistics appear to have been added by someone not familiar with Objective-C.
        While it's technically valid to have empty components in a selector, it's rarely done and is not consistent
        with our style guidelines. In this particular case it's also done in such a manner that it's ambiguous and
        therefore generates a warning in newer versions of the compiler.

        Fixes <rdar://problem/12503709>.

        * Misc/WebCoreStatistics.h: Remove unused methods and rename the two poorly-named methods that remain.
        * Misc/WebCoreStatistics.mm: Ditto.
        (-[WebFrame numberOfPagesWithPageWidth:pageHeight:]):
        (-[WebFrame printToCGContext:pageWidth:pageHeight:]):

2012-10-16  Jian Li  <jianli@chromium.org>

        Rename feature define ENABLE_WIDGET_REGION to ENABLE_DRAGGBALE_REGION
        https://bugs.webkit.org/show_bug.cgi?id=98975

        Reviewed by Adam Barth.

        Renaming is needed to better match with the draggable region code.

        * Configurations/FeatureDefines.xcconfig:

2012-10-15  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of <rdar://problem/12470680> Font’s fast code path doesn’t support kerning and ligatures
        https://bugs.webkit.org/show_bug.cgi?id=99113

        Reviewed by Tim Horton.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added wkCTFontTransformGlyphs.

2012-10-15  David Kilzer  <ddkilzer@apple.com>

        Move framework and library linking into WebKit.xcconfig
        <http://webkit.org/b/99284>

        Reviewed by Mark Rowe.

        * Configurations/WebKit.xcconfig: Move frameworks and libraries
        link flags to OTHER_LDFLAGS so that they work for iOS and OS X.

2012-10-14  Jon Lee  <jonlee@apple.com>

        Allow notification origin permission request when no js callback is provided
        https://bugs.webkit.org/show_bug.cgi?id=63615
        <rdar://problem/11059590>

        Reviewed by Sam Weinig.

        Introduce a boolean to determine whether the request was using the legacy or standard API. This way,
        we do not fall through to calling the standard API's callback if the legacy API's callback is null.

        * WebCoreSupport/WebNotificationClient.mm:
        (WebCore):
        (-[WebNotificationPolicyListener initWithVoidCallback:]):
        (-[WebNotificationPolicyListener allow]):
        (-[WebNotificationPolicyListener deny]):

2012-10-14  Sam Weinig  <sam@webkit.org>

        Make UserScript and UserStyleSheet value objects that are copyable
        https://bugs.webkit.org/show_bug.cgi?id=99275

        Reviewed by Tim Horton.

        * WebView/WebView.mm:
        (-[WebView _injectMailQuirksScript]):
        (-[WebView _injectOutlookQuirksScript]):
        Update for new PageGroup function signatures.

2012-10-10  Brady Eidson  <beidson@apple.com>

        Switch ResourceLoader::resourceData() from SharedBuffer to ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98976

        Reviewed by Anders Carlsson.

        * WebView/WebDataSource.mm:
        (-[WebDataSource data]):

2012-10-10  Jer Noble  <jer.noble@apple.com>

        Disallow full screen mode keyboard access by default.
        https://bugs.webkit.org/show_bug.cgi?id=98971
        <rdar://problem/12474226>

        Reviewed by Sam Weinig.

        Only support full screen if keyboard access is not requested.

        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:WebCore::withKeyboard:]):

2012-10-10  Jon Lee  <jonlee@apple.com>

        [WK2] Activate plugins when user clicks on snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98328
        <rdar://problem/12426681>

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::recreatePlugin): Stub implementation of recreatePlugin().

2012-10-10  Brady Eidson  <beidson@apple.com>

        Switch CachedResource over from SharedBuffer to a new ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98541

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]):

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

        Store a visible rect in GraphicsLayers, and optionally dump it in layerTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=98839

        Reviewed by Sam Weinig.

        To replace CATiledLayer with TileCaches, we need to be able to compute the visible part of a GraphicsLayer,
        in order to limit the extent of TileCache tiles. Reuse the existing code in GraphicsLayerCA for this,
        but store the computed rect in m_visibleRect.
        
        Add a flag to layerTreeAsText() so that tests can optionally include this visible rect in
        layer tree dumps. This output will be platform-specific, so we don't want to do it unconditionally.

        * WebView/WebFrame.mm:
        (-[WebFrame _layerTreeAsText]):

2012-10-09  Jian Li  <jianli@chromium.org>

        Update the CSS property used to support draggable regions.
        https://bugs.webkit.org/show_bug.cgi?id=97156

        Reviewed by Adam Barth.

        The CSS property to support draggable regions, guarded under
        WIDGET_REGION is now disabled from Mac WebKit, in order not to cause
        confusion with DASHBOARD_SUPPORT feature.

        Also update the code to use the new name annotatedRegions to work for
        both features.

        * Configurations/FeatureDefines.xcconfig: Disable WIDGET_REGION feature.
        * WebCoreSupport/WebChromeClient.h: Rename dashboardRegions to annotatedRegions.
        * WebCoreSupport/WebChromeClient.mm: Rename dashboardRegions to annotatedRegions.
        (WebChromeClient::annotatedRegionsChanged):
        * WebView/WebView.mm: Rename dashboardRegions to annotatedRegions.
        (-[WebView _dashboardRegions]):

2012-10-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130811 and r130821.
        http://trac.webkit.org/changeset/130811
        http://trac.webkit.org/changeset/130821
        https://bugs.webkit.org/show_bug.cgi?id=98831

        Broke date-suggestion-picker-appearance-with-scroll-bar.html
        (Requested by abarth|gardening on #webkit).

        * WebView/WebFullScreenController.mm:
        (screenRectOfContents):
        * WebView/WebRenderNode.mm:
        (copyRenderNode):

2012-10-08  Kiran Muppala  <cmuppala@apple.com>

        Throttle DOM timers on hidden pages.
        https://bugs.webkit.org/show_bug.cgi?id=98474

        Reviewed by Maciej Stachowiak.

        Add HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define and provide a SPI for
        DumpRenderTree to modify the visibility state of a page.  The latter
        is needed to test throttling of timers on hidden pages through DumpRenderTree.

        * Configurations/FeatureDefines.xcconfig:
        * WebView/WebView.mm:
        (-[WebView _setVisibilityState:isInitialState:]):
        * WebView/WebViewPrivate.h:

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate removeItemFromDateCaches:]):
        (-[WebHistoryPrivate orderedLastVisitedDays]):
        (WebHistoryWriter::WebHistoryWriter):
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptObjectTypeCounts]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):
        (WebKit::NetscapePluginHostManager::pluginHostDied):
        (WebKit::NetscapePluginHostManager::didCreateWindow):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::pluginHostDied):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
        (WebKit::NetscapePluginInstanceProxy::destroy):
        (WebKit::NetscapePluginInstanceProxy::webFrameDidFinishLoadWithReason):
        (WebKit::NetscapePluginInstanceProxy::cancelCheckIfAllowedToLoadURL):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        * WebView/WebHTMLView.mm:
        (commandNameForSelector):

2012-10-06  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of <rdar://problem/12446507> [mac] WebKit clients cannot change the behavior of text-rendering: auto
        https://bugs.webkit.org/show_bug.cgi?id=98601

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (+[WebView initialize]): Added a call to Font::setDefaultTypesettingFeatures() to enable
        kerning and ligatures if the WebKitKerningAndLigaturesEnabledByDefault user default key has
        the value YES.

2012-10-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130556 and r130564.
        http://trac.webkit.org/changeset/130556
        http://trac.webkit.org/changeset/130564
        https://bugs.webkit.org/show_bug.cgi?id=98572

        The patch wasn't reviewed by a reviewer and it is breaking
        Chromium Windows (Requested by jchaffraix on #webkit).

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-10-05  Tim Horton  <timothy_horton@apple.com>

        [cg] GraphicsContextCG should ask CG whether the shadow offset workaround is required
        https://bugs.webkit.org/show_bug.cgi?id=98565
        <rdar://problem/12436468>

        Reviewed by Simon Fraser.

        Add wkCGContextDrawsWithCorrectShadowOffsets.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-10-04  Eric Carlson  <eric.carlson@apple.com>

        Allow ports to override text track rendering style
        https://bugs.webkit.org/show_bug.cgi?id=97800
        <rdar://problem/12044964>

        Reviewed by Silvia Pfeiffer.

        Add WCSI support for new WKSI caption functions.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new WKSI function pointers.

2012-10-04  Jon Lee  <jonlee@apple.com>

        Add a setting to enable plugin snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=98319
        <rdar://problem/12426480>

        Reviewed by Brady Eidson.

        Expose plugInSnapshottingEnabled preference to WebKit clients.

        * WebView/WebPreferenceKeysPrivate.h: Add WebKitPlugInSnapshottingEnabled key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Setting is turned off by default.
        (-[WebPreferences plugInSnapshottingEnabled]):
        (-[WebPreferences setPlugInSnapshottingEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Update settings based on preference.

2012-10-04  Rik Cabanier  <cabanier@adobe.com>

        Turn Compositing on by default in WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=98315

        Reviewed by Simon Fraser.

        enable -webkit-blend-mode on trunk.

        * Configurations/FeatureDefines.xcconfig:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Final part of "sync" to "flush" renaming
        https://bugs.webkit.org/show_bug.cgi?id=98430

        Reviewed by Tim Horton.

        Change method names on GraphicsLayer and GraphicsLayerClient that
        refer to "sync" to use the term "flush" instead, to be consistent
        with the rest of the code.

        * WebView/WebView.mm:

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Support all attributes of GeolocationPosition
        https://bugs.webkit.org/show_bug.cgi?id=98212

        Reviewed by Sam Weinig.

        Add an internal constructor for the sake of testing.
        A similar API is used on iOS.

        * WebView/WebGeolocationPosition.mm:
        (-[WebGeolocationPosition initWithGeolocationPosition:]):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Standardize on "flush" terminology for compositing layer flushing/syncing
        https://bugs.webkit.org/show_bug.cgi?id=98321

        Reviewed by Simon Fraser.

        Rename compositing-related methods that refer to "syncing" to instead
        refer to "flushing".

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scheduleCompositingLayerFlush):
        * WebView/WebView.mm:
        (-[WebView _flushCompositingChanges]):
        (LayerFlushController::flushLayers):
        (-[WebView _scheduleCompositingLayerFlush]):
        * WebView/WebViewInternal.h:

== Rolled over to ChangeLog-2012-10-02 ==
